X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftar.c;h=a034b34cc1b24c8e46c5815dceeddbcdcd3f6997;hb=1689ed43885c8418c29d1365ae3a06450a460830;hp=59cde36ebf6221f64df2ff183d504d672f6995e3;hpb=717a07e208ced8ab10c59e70eada67c1a2e8afa2;p=chaz%2Ftar diff --git a/src/tar.c b/src/tar.c index 59cde36..a034b34 100644 --- a/src/tar.c +++ b/src/tar.c @@ -319,6 +319,7 @@ enum OCCURRENCE_OPTION, OLD_ARCHIVE_OPTION, ONE_FILE_SYSTEM_OPTION, + ONE_TOP_LEVEL_OPTION, OVERWRITE_DIR_OPTION, OVERWRITE_OPTION, OWNER_OPTION, @@ -489,6 +490,9 @@ static struct argp_option options[] = { {"keep-directory-symlink", KEEP_DIRECTORY_SYMLINK_OPTION, 0, 0, N_("preserve existing symlinks to directories when extracting"), GRID+1 }, + {"one-top-level", ONE_TOP_LEVEL_OPTION, N_("DIR"), OPTION_ARG_OPTIONAL, + N_("create a subdirectory to avoid having loose files extracted"), + GRID+1 }, #undef GRID #define GRID 40 @@ -1167,6 +1171,9 @@ tar_help_filter (int key, const char *text, void *input) s = xasprintf (_("filter the archive through %s"), LZMA_PROGRAM); break; + case LZOP_OPTION: + s = xasprintf (_("filter the archive through %s"), LZOP_PROGRAM); + case 'J': s = xasprintf (_("filter the archive through %s"), XZ_PROGRAM); break; @@ -1438,6 +1445,11 @@ parse_opt (int key, char *arg, struct argp_state *state) one_file_system_option = true; break; + case ONE_TOP_LEVEL_OPTION: + one_top_level_option = true; + one_top_level_dir = arg; + break; + case 'l': check_links_option = 1; break; @@ -2390,6 +2402,9 @@ decode_options (int argc, char **argv) subcommand_string (subcommand_option))); } + if (one_top_level_option && absolute_names_option) + USAGE_ERROR ((0, 0, _("--one-top-level cannot be used with --absolute-names"))); + if (archive_names == 0) { /* If no archive file name given, try TAPE from the environment, or @@ -2623,6 +2638,8 @@ main (int argc, char **argv) exit_failure = TAREXIT_FAILURE; exit_status = TAREXIT_SUCCESS; + error_hook = checkpoint_flush_actions; + filename_terminator = '\n'; set_quoting_style (0, DEFAULT_QUOTING_STYLE);