From 3a283cfe9f8f1f127e8dc5597a5ea1d249985a54 Mon Sep 17 00:00:00 2001
From: Sergey Poznyakoff <gray@gnu.org>
Date: Sat, 12 Nov 2016 11:20:47 +0200
Subject: [PATCH] Fix the --add-file option.

* src/common.h (name_more_files): New proto.
(files_from_option): Remove.
* src/names.c (name_more_files): New file.
(names_options): Fix declaration of the
add-file option.
(names_parse_opt): Handle --add-file.
* src/tar.c (struct tar_args): Remove the input_files member.
Change all uses: use name_more_files() instead.
* tests/Makefile.am: Add new test.
* tests/add-file.at: New testcase.
* tests/testsuite.at: Add new test.
---
 src/common.h       |  4 +---
 src/names.c        | 24 ++++++++++++-------
 src/tar.c          | 16 ++++---------
 tests/Makefile.am  |  3 ++-
 tests/add-file.at  | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/testsuite.at |  1 +
 6 files changed, 92 insertions(+), 23 deletions(-)
 create mode 100644 tests/add-file.at

diff --git a/src/common.h b/src/common.h
index 50c34cc7c09b..6fdb6225f18b 100644
--- a/src/common.h
+++ b/src/common.h
@@ -414,9 +414,6 @@ GLOBAL bool show_transformed_names_option;
    timestamps from archives with an unusual member order. It is automatically
    set for incremental archives. */
 GLOBAL bool delay_directory_restore_option;
-
-/* When set, tar will not refuse to create empty archives */
-GLOBAL bool files_from_option;
 
 /* Declarations for each module.  */
 
@@ -738,6 +735,7 @@ void uid_to_uname (uid_t uid, char **uname);
 int uname_to_uid (char const *uname, uid_t *puid);
 
 void name_init (void);
+bool name_more_files (void);
 void name_add_name (const char *name);
 void name_term (void);
 const char *name_next (int change_dirs);
diff --git a/src/names.c b/src/names.c
index 219aa77a4356..1a9465667cd3 100644
--- a/src/names.c
+++ b/src/names.c
@@ -32,7 +32,8 @@ static void name_add_file (const char *name);
 
 enum
   {
-    EXCLUDE_BACKUPS_OPTION = 256,
+    ADD_FILE_OPTION = 256,
+    EXCLUDE_BACKUPS_OPTION,
     EXCLUDE_CACHES_OPTION,
     EXCLUDE_CACHES_UNDER_OPTION,
     EXCLUDE_CACHES_ALL_OPTION,
@@ -67,7 +68,7 @@ static struct argp_option names_options[] = {
   {NULL, 0, NULL, 0,
    N_("Local file name selection:"), GRID },
 
-  {"add-file", ARGP_KEY_ARG, N_("FILE"), 0,
+  {"add-file", ADD_FILE_OPTION, N_("FILE"), 0,
    N_("add given FILE to the archive (useful if its name starts with a dash)"), GRID+1 },
   {"directory", 'C', N_("DIR"), 0,
    N_("change to directory DIR"), GRID+1 },
@@ -190,10 +191,10 @@ names_parse_opt (int key, char *arg, struct argp_state *state)
 
     case 'T':
       name_add_file (arg);
-      /* Indicate we've been given -T option. This is for backward
-	 compatibility only, so that `tar cfT archive /dev/null will
-	 succeed */
-      files_from_option = true;
+      break;
+
+    case ADD_FILE_OPTION:
+      name_add_name (arg);
       break;
 
     default:
@@ -651,8 +652,8 @@ struct name_elt        /* A name_array element. */
   } v;
 };
 
-static struct name_elt *name_head;  /* store a list of names */
-size_t name_count;	 	    /* how many of the entries are names? */
+static struct name_elt *name_head;/* store a list of names */
+size_t name_count;	 	  /* how many of the entries are file names? */
 
 static struct name_elt *
 name_elt_alloc (void)
@@ -784,6 +785,12 @@ name_list_advance (void)
     }
 }
 
+/* Return true if there are names or options in the list */
+bool
+name_more_files (void)
+{
+  return name_count > 0;
+}
 
 /* Add to name_array the file NAME with fnmatch options MATFLAGS */
 void
@@ -823,6 +830,7 @@ name_add_file (const char *name)
   ep->v.file.name = name;
   ep->v.file.line = 0;
   ep->v.file.fp = NULL;
+  name_count++;
 }
 
 /* Names from external name file.  */
diff --git a/src/tar.c b/src/tar.c
index 35bac38c2793..a361fc2c607f 100644
--- a/src/tar.c
+++ b/src/tar.c
@@ -813,7 +813,6 @@ struct tar_args        /* Variables used during option parsing */
   bool pax_option;                 /* True if --pax-option was given */
   char const *backup_suffix_string;   /* --suffix option argument */
   char const *version_control_string; /* --backup option argument */
-  bool input_files;                /* True if some input files where given */
   int compress_autodetect;         /* True if compression autodetection should
 				      be attempted when creating archives */
 };
@@ -1322,7 +1321,6 @@ parse_opt (int key, char *arg, struct argp_state *state)
     case ARGP_KEY_ARG:
       /* File name or non-parsed option, because of ARGP_IN_ORDER */
       name_add_name (arg);
-      args->input_files = true;
       break;
 
     case 'A':
@@ -2179,7 +2177,7 @@ more_options (int argc, char **argv, struct option_locus *loc)
   args.loc = loc;
   if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER|ARGP_NO_EXIT, &idx, &args))
     abort (); /* shouldn't happen */
-  if (loc->source == OPTS_ENVIRON && args.input_files)
+  if (loc->source == OPTS_ENVIRON && name_more_files ())
     USAGE_ERROR ((0, 0, _("non-option arguments in %s"), loc->name));
 }
 
@@ -2221,7 +2219,6 @@ decode_options (int argc, char **argv)
   args.pax_option = false;
   args.backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
   args.version_control_string = 0;
-  args.input_files = false;
   args.compress_autodetect = false;
 
   subcommand_option = UNKNOWN_SUBCOMMAND;
@@ -2340,10 +2337,7 @@ decode_options (int argc, char **argv)
 
   /* Handle operands after any "--" argument.  */
   for (; idx < argc; idx++)
-    {
-      name_add_name (argv[idx]);
-      args.input_files = true;
-    }
+    name_add_name (argv[idx]);
 
   /* Derive option values and check option consistency.  */
 
@@ -2365,7 +2359,7 @@ decode_options (int argc, char **argv)
 
   if (occurrence_option)
     {
-      if (!args.input_files)
+      if (!name_more_files ())
 	USAGE_ERROR ((0, 0,
 		      _("--occurrence is meaningless without a file list")));
       if (!IS_SUBCOMMAND_CLASS (SUBCL_OCCUR))
@@ -2569,7 +2563,7 @@ decode_options (int argc, char **argv)
     {
       /* --test-label is silent if the user has specified the label name to
 	 compare against. */
-      if (!args.input_files)
+      if (!name_more_files ())
 	verbose_option++;
     }
   else if (utc_option)
@@ -2598,7 +2592,7 @@ decode_options (int argc, char **argv)
   switch (subcommand_option)
     {
     case CREATE_SUBCOMMAND:
-      if (!args.input_files && !files_from_option)
+      if (!name_more_files ())
 	USAGE_ERROR ((0, 0,
 		      _("Cowardly refusing to create an empty archive")));
       if (args.compress_autodetect && archive_names
