X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftar.c;h=33616d017220acdb069e545a39efdfb3959b3ca2;hb=8d6e47cc7fcfb6781b82ba60b8eb823c7fdc7013;hp=1daaf5754ce3f604adafa6940452a461a5d75c12;hpb=eb6bef9909f1b7bded5af64da1a913e360f06359;p=chaz%2Ftar diff --git a/src/tar.c b/src/tar.c index 1daaf57..33616d0 100644 --- a/src/tar.c +++ b/src/tar.c @@ -122,7 +122,8 @@ static struct fmttab { enum archive_format fmt; } const fmttab[] = { { "v7", V7_FORMAT }, - { "oldgnu", OLDGNU_FORMAT }, + { "oldgnu", OLDGNU_FORMAT }, + { "ustar", USTAR_FORMAT }, { "posix", POSIX_FORMAT }, #if 0 /* not fully supported yet */ { "star", STAR_FORMAT }, @@ -218,7 +219,7 @@ enum USE_COMPRESS_PROGRAM_OPTION, VOLNO_FILE_OPTION, WILDCARDS_OPTION, - WILDCARDS_MATCH_SLASH_OPTION, + WILDCARDS_MATCH_SLASH_OPTION }; /* If nonzero, display usage information and exit. */ @@ -442,7 +443,8 @@ Archive format selection:\n\ FMTNAME is one of the following:\n\ v7 old V7 tar format\n\ oldgnu GNU format as per tar <= 1.12\n\ - posix POSIX 1003.1-2001 tar format\n\ + ustar POSIX 1003.1-1988 (ustar) format\n\ + posix POSIX 1003.1-2001 (pax) format\n\ gnu GNU format\n\ --old-archive, --portability same as --format=v7\n\ --posix same as --format=posix\n\ @@ -1274,13 +1276,7 @@ see the file named COPYING for details.")); archive_format = DEFAULT_ARCHIVE_FORMAT; if (archive_format == GNU_FORMAT && getenv ("POSIXLY_CORRECT")) - archive_format = POSIX_FORMAT; - - if (((volume_label_option && subcommand_option == CREATE_SUBCOMMAND) - || incremental_option || multi_volume_option || sparse_option) - && archive_format != OLDGNU_FORMAT && archive_format != GNU_FORMAT) - USAGE_ERROR ((0, 0, - _("GNU features wanted on incompatible archive format"))); + archive_format = POSIX_FORMAT; /*FIXME?*/ if (volume_label_option && subcommand_option == CREATE_SUBCOMMAND) assert_format (FORMAT_MASK (OLDGNU_FORMAT) @@ -1510,17 +1506,24 @@ main (int argc, char **argv) error (0, 0, _("Error exit delayed from previous errors")); if (ferror (stderr) || fclose (stderr) != 0) exit_status = TAREXIT_FAILURE; - exit (exit_status); + return exit_status; } void -destroy_stat (struct tar_stat_info *st) +tar_stat_init (struct tar_stat_info *st) +{ + memset (st, 0, sizeof (*st)); +} + +void +tar_stat_destroy (struct tar_stat_info *st) { free (st->orig_file_name); free (st->file_name); free (st->link_name); free (st->uname); free (st->gname); + free (st->sparse_map); memset (st, 0, sizeof (*st)); }