X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fextract.c;h=a3877583437c98147c240aa93847e01e7c690630;hb=32c1e664e5f0b5bc4191a334ade93c1b98a90acb;hp=d6af621c4307cf37130fef21838efc99a3183a32;hpb=d858a433c82626309e0d974ca923a79ac7f7f18f;p=chaz%2Ftar diff --git a/src/extract.c b/src/extract.c index d6af621..a387758 100644 --- a/src/extract.c +++ b/src/extract.c @@ -407,10 +407,7 @@ make_directories (char *file_name) else if ((errno == ENOSYS /* Automounted dirs on Solaris return this. Reported by Warren Hyde */ -#if MSDOS - || errno == EACCES /* Turbo C mkdir gives a funny errno. */ -#endif - ) + || ERRNO_IS_EACCESS) /* Turbo C mkdir gives a funny errno. */ && access (file_name, W_OK) == 0) continue; @@ -717,7 +714,17 @@ extract_archive (void) print_header (-1); file_name = safer_name_suffix (current_stat_info.file_name, 0); - + if (strip_path_elements) + { + size_t prefix_len = stripped_prefix_len (file_name, strip_path_elements); + if (prefix_len == (size_t) -1) + { + skip_member (); + return; + } + file_name += prefix_len; + } + apply_nonancestor_delayed_set_stat (file_name, 0); /* Take a safety backup of a previously existing file. */