X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Ftar.c;h=994a0f783d21c9eff84e02cbc6badb1a4d8cacbb;hb=7645d20465e8c37f8f246b7490cbffbb0107045d;hp=004a13d30108f9f1ba9b482e8cc1db2c6c8377f4;hpb=879ae47aa16752580616c6c52d6b4757a2705dd3;p=chaz%2Ftar diff --git a/src/tar.c b/src/tar.c index 004a13d..994a0f7 100644 --- a/src/tar.c +++ b/src/tar.c @@ -44,6 +44,10 @@ /* Local declarations. */ +#ifndef DEFAULT_ARCHIVE_FORMAT +# define DEFAULT_ARCHIVE_FORMAT GNU_FORMAT +#endif + #ifndef DEFAULT_ARCHIVE # define DEFAULT_ARCHIVE "tar.out" #endif @@ -113,39 +117,47 @@ confirm (const char *message_action, const char *message_name) } } -void -set_archive_format (char *name) -{ - static struct fmttab { - char *name; - enum archive_format fmt; - } fmttab[] = { - { "v7", V7_FORMAT }, - { "oldgnu", OLDGNU_FORMAT }, - { "posix", POSIX_FORMAT }, +static struct fmttab { + char const *name; + enum archive_format fmt; +} const fmttab[] = { + { "v7", V7_FORMAT }, + { "oldgnu", OLDGNU_FORMAT }, + { "posix", POSIX_FORMAT }, #if 0 /* not fully supported yet */ - { "star", STAR_FORMAT }, + { "star", STAR_FORMAT }, #endif - { "gnu", GNU_FORMAT }, - NULL - }; - struct fmttab *p; - enum archive_format fmt; - - for (p = fmttab; p->name; p++) - { - if (strcmp (p->name, name) == 0) - { - fmt = p->fmt; - break; - } - } + { "gnu", GNU_FORMAT }, + { NULL, 0 } +}; + +static void +set_archive_format (char const *name) +{ + struct fmttab const *p; + + for (p = fmttab; strcmp (p->name, name) != 0; ) + if (! (++p)->name) + USAGE_ERROR ((0, 0, _("%s: Invalid archive format"), + quotearg_colon (name))); - if (archive_format != DEFAULT_FORMAT && archive_format != fmt) + if (archive_format != DEFAULT_FORMAT && archive_format != p->fmt) USAGE_ERROR ((0, 0, _("Conflicting archive format options"))); - archive_format = fmt; + archive_format = p->fmt; } + +static const char * +archive_format_string (enum archive_format fmt) +{ + struct fmttab const *p; + + for (p = fmttab; p->name; p++) + if (p->fmt == fmt) + return p->name; + return "unknown?"; +} + /* Options. */ @@ -484,12 +496,10 @@ The version control may be set with --backup or VERSION_CONTROL, values are:\n\ stdout); printf (_("\ \n\ -GNU tar cannot read nor produce `--posix' archives. If POSIXLY_CORRECT\n\ -is set in the environment, GNU extensions are disallowed with `--posix'.\n\ -Support for POSIX is only partially implemented, don't count on it yet.\n\ ARCHIVE may be FILE, HOST:FILE or USER@HOST:FILE; DATE may be a textual date\n\ or a file name starting with `/' or `.', in which case the file's date is used.\n\ -*This* `tar' defaults to `-f%s -b%d'.\n"), +*This* `tar' defaults to `--format=%s -f%s -b%d'.\n"), + archive_format_string (DEFAULT_ARCHIVE_FORMAT), DEFAULT_ARCHIVE, DEFAULT_BLOCKING); printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); } @@ -1209,7 +1219,7 @@ see the file named COPYING for details.")); /* Derive option values and check option consistency. */ if (archive_format == DEFAULT_FORMAT) - archive_format = GNU_FORMAT; + archive_format = DEFAULT_ARCHIVE_FORMAT; if (archive_format == GNU_FORMAT && getenv ("POSIXLY_CORRECT")) archive_format = POSIX_FORMAT;