X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fextract.c;h=0e499e5d4121649cc3c468ecb4d9aeda3aba811b;hb=8c75b1387a33fdbf3cbc8ba8bfa0ab1851d30894;hp=60ec747f72a9e94d192ab30a31e4da91adf4f1a3;hpb=02bf3a96a931678211117534ee535863c780c6dc;p=chaz%2Ftar diff --git a/src/extract.c b/src/extract.c index 60ec747..0e499e5 100644 --- a/src/extract.c +++ b/src/extract.c @@ -642,11 +642,14 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made) switch (old_files_option) { - case KEEP_OLD_FILES: + case SKIP_OLD_FILES: WARNOPT (WARN_EXISTING_FILE, (0, 0, _("%s: skipping existing file"), file_name)); return RECOVER_SKIP; + case KEEP_OLD_FILES: + return RECOVER_NO; + case KEEP_NEWER_FILES: if (file_newer_p (file_name, stp, ¤t_stat_info)) break; @@ -884,7 +887,8 @@ open_output_file (char const *file_name, int typeflag, mode_t mode, /* If O_NOFOLLOW is needed but does not work, check for a symlink separately. There's a race condition, but that cannot be avoided on hosts lacking O_NOFOLLOW. */ - if (! O_NOFOLLOW && overwriting_old_files && ! dereference_option) + if (! HAVE_WORKING_O_NOFOLLOW + && overwriting_old_files && ! dereference_option) { struct stat st; if (fstatat (chdir_fd, file_name, &st, AT_SYMLINK_NOFOLLOW) == 0 @@ -995,7 +999,7 @@ extract_file (char *file_name, int typeflag) if (written > size) written = size; errno = 0; - count = full_write (fd, data_block->buffer, written); + count = blocking_write (fd, data_block->buffer, written); size -= written; set_next_block_after ((union block *) @@ -1382,7 +1386,7 @@ prepare_to_extract (char const *file_name, int typeflag, tar_extractor_t *fun) default: WARNOPT (WARN_UNKNOWN_CAST, (0, 0, - _("%s: Unknown file type `%c', extracted as normal file"), + _("%s: Unknown file type '%c', extracted as normal file"), quotearg_colon (file_name), typeflag)); *fun = extract_file; }