From: junio Date: Thu, 4 Dec 1997 06:37:52 +0000 (+0000) Subject: Implement -E (ending-file) option. X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=d1f1e3a18997f3357fe946750d13ab0ce2cc21ef;p=chaz%2Ftar Implement -E (ending-file) option. --- diff --git a/src/list.c b/src/list.c index c5fd5f4..2eba9f6 100644 --- a/src/list.c +++ b/src/list.c @@ -28,6 +28,10 @@ ((unsigned char) (Char) >= '0' && (unsigned char) (Char) <= '7') #define ISSPACE(Char) (ISASCII (Char) && isspace (Char)) +#ifndef FNM_LEADING_DIR +# include +#endif + #include "common.h" union block *current_header; /* points to current archive header */ @@ -62,6 +66,12 @@ read_and (void (*do_something) ()) /* Valid header. We should decode next field (mode) first. Ensure incoming names are null terminated. */ + if (ending_file_option && + fnmatch (ending_file_option, current_file_name, + FNM_LEADING_DIR) == 0) { + goto all_done; + } + /* FIXME: This is a quick kludge before 1.12 goes out. */ current_stat.st_mtime = TIME_FROM_OCT (current_header->header.mtime); @@ -164,6 +174,7 @@ read_and (void (*do_something) ()) } break; } + all_done: ; apply_delayed_set_stat (); close_archive (); diff --git a/src/tar.c b/src/tar.c index 787d37c..10224a9 100644 --- a/src/tar.c +++ b/src/tar.c @@ -217,6 +217,7 @@ struct option long_options[] = {"dereference", no_argument, NULL, 'h'}, {"diff", no_argument, NULL, 'd'}, {"directory", required_argument, NULL, 'C'}, + {"ending-file", required_argument, NULL, 'E'}, {"exclude", required_argument, NULL, EXCLUDE_OPTION}, {"exclude-from", required_argument, NULL, 'X'}, {"extract", no_argument, NULL, 'x'}, @@ -397,6 +398,7 @@ Local file selection:\n\ -h, --dereference dump instead the files symlinks point to\n\ --no-recursion avoid descending automatically in directories\n\ -l, --one-file-system stay in local file system when creating archive\n\ + -E, --ending-file=NAME end reading the archive before file NAME\n\ -K, --starting-file=NAME begin at file NAME in the archive\n"), stdout); #if !MSDOS @@ -451,13 +453,13 @@ Report bugs to .\n"), | Parse the options for tar. | `----------------------------*/ -/* Available option letters are DEHIJQY and aejnqy. Some are reserved: +/* Available option letters are DHIJQY and aejnqy. Some are reserved: y per-file gzip compression Y per-block gzip compression */ #define OPTION_STRING \ - "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxz" + "-01234567ABC:E:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxz" static void set_subcommand_option (enum subcommand subcommand) @@ -621,6 +623,10 @@ decode_options (int argc, char *const *argv) set_subcommand_option (DIFF_SUBCOMMAND); break; + case 'E': + ending_file_option = optarg; + break; + case 'f': if (archive_names == allocated_archive_names) {