gpgtar,w32: Support file names longer than MAX_PATH.

* tools/gpgtar.c: Replace assert by log_assert.
* tools/gpgtar-extract.c: Ditto.
(extract_regular): Create files with sysopen flag.
* tools/gpgtar-create.c (scan_directory): Use gpgrt_fname_to_wchar.
--

Note that for this change libgpg-error 1.45 is required for Windows.
This commit is contained in:
Werner Koch 2022-03-04 14:54:17 +01:00
parent 4122896a39
commit 5492079def
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
3 changed files with 10 additions and 13 deletions

View File

@ -36,7 +36,6 @@
# include <pwd.h> # include <pwd.h>
# include <grp.h> # include <grp.h>
#endif /*!HAVE_W32_SYSTEM*/ #endif /*!HAVE_W32_SYSTEM*/
#include <assert.h>
#include "../common/i18n.h" #include "../common/i18n.h"
#include "../common/exectool.h" #include "../common/exectool.h"
@ -114,7 +113,7 @@ fillup_entry_w32 (tar_header_t hdr)
for (p=hdr->name; *p; p++) for (p=hdr->name; *p; p++)
if (*p == '/') if (*p == '/')
*p = '\\'; *p = '\\';
wfname = utf8_to_wchar (hdr->name); wfname = gpgrt_fname_to_wchar (hdr->name);
for (p=hdr->name; *p; p++) for (p=hdr->name; *p; p++)
if (*p == '\\') if (*p == '\\')
*p = '/'; *p = '/';
@ -345,7 +344,7 @@ scan_directory (const char *dname, scanctrl_t scanctrl)
for (p=fname; *p; p++) for (p=fname; *p; p++)
if (*p == '/') if (*p == '/')
*p = '\\'; *p = '\\';
wfname = utf8_to_wchar (fname); wfname = gpgrt_fname_to_wchar (fname);
xfree (fname); xfree (fname);
if (!wfname) if (!wfname)
{ {
@ -448,7 +447,7 @@ scan_recursive (const char *dname, scanctrl_t scanctrl)
} }
scanctrl->nestlevel++; scanctrl->nestlevel++;
assert (scanctrl->flist_tail); log_assert (scanctrl->flist_tail);
start_tail = scanctrl->flist_tail; start_tail = scanctrl->flist_tail;
scan_directory (dname, scanctrl); scan_directory (dname, scanctrl);
stop_tail = scanctrl->flist_tail; stop_tail = scanctrl->flist_tail;
@ -903,7 +902,7 @@ write_file (estream_t stream, tar_header_t hdr)
if (hdr->typeflag == TF_REGULAR) if (hdr->typeflag == TF_REGULAR)
{ {
infp = es_fopen (hdr->name, "rb"); infp = es_fopen (hdr->name, "rb,sysopen");
if (!infp) if (!infp)
{ {
err = gpg_error_from_syserror (); err = gpg_error_from_syserror ();
@ -1152,7 +1151,7 @@ gpgtar_create (char **inpattern, const char *files_from, int null_names,
if (!strcmp (opt.outfile, "-")) if (!strcmp (opt.outfile, "-"))
outstream = es_stdout; outstream = es_stdout;
else else
outstream = es_fopen (opt.outfile, "wb"); outstream = es_fopen (opt.outfile, "wb,sysopen");
if (!outstream) if (!outstream)
{ {
err = gpg_error_from_syserror (); err = gpg_error_from_syserror ();

View File

@ -28,7 +28,6 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
#include <assert.h>
#include "../common/i18n.h" #include "../common/i18n.h"
#include "../common/exectool.h" #include "../common/exectool.h"
@ -98,9 +97,9 @@ extract_regular (estream_t stream, const char *dirname,
if (opt.dry_run) if (opt.dry_run)
outfp = es_fopenmem (0, "wb"); outfp = es_fopen ("/dev/null", "wb");
else else
outfp = es_fopen (fname, "wb"); outfp = es_fopen (fname, "wb,sysopen");
if (!outfp) if (!outfp)
{ {
err = gpg_error_from_syserror (); err = gpg_error_from_syserror ();
@ -333,7 +332,7 @@ gpgtar_extract (const char *filename, int decrypt)
if (!strcmp (filename, "-")) if (!strcmp (filename, "-"))
stream = es_stdin; stream = es_stdin;
else else
stream = es_fopen (filename, "rb"); stream = es_fopen (filename, "rb,sysopen");
if (!stream) if (!stream)
{ {
err = gpg_error_from_syserror (); err = gpg_error_from_syserror ();

View File

@ -34,7 +34,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <assert.h>
#define INCLUDED_BY_MAIN_MODULE 1 #define INCLUDED_BY_MAIN_MODULE 1
#include "../common/util.h" #include "../common/util.h"
@ -259,7 +258,7 @@ shell_parse_stringlist (const char *str, strlist_t *r_list)
break; break;
case doublequote: case doublequote:
assert (s > str || !"cannot be quoted at first char"); log_assert (s > str || !"cannot be quoted at first char");
if (*s == doublequote && *(s - 1) != '\\') if (*s == doublequote && *(s - 1) != '\\')
quoted = unquoted; quoted = unquoted;
else else
@ -267,7 +266,7 @@ shell_parse_stringlist (const char *str, strlist_t *r_list)
break; break;
default: default:
assert (! "reached"); log_assert (! "reached");
} }
} }