+/* File name arguments are processed in two stages: first a
+ name_array (see below) is filled, then the names from it
+ are moved into the namelist.
+
+ This awkward process is needed only to implement --same-order option,
+ which is meant to help process large archives on machines with
+ limited memory. With this option on, namelist contains at most one
+ entry, which diminishes the memory consumption.
+
+ However, I very much doubt if we still need this -- Sergey */
+
+/* A name_array element contains entries of three types: */
+
+#define NELT_NAME 0 /* File name */
+#define NELT_CHDIR 1 /* Change directory request */
+#define NELT_FMASK 2 /* Change fnmatch options request */
+
+struct name_elt /* A name_array element. */
+{
+ char type; /* Element type, see NELT_* constants above */
+ union
+ {
+ const char *name; /* File or directory name */
+ int matching_flags;/* fnmatch options if type == NELT_FMASK */
+ } v;
+};
+
+static struct name_elt *name_array; /* store an array of names */
+static size_t allocated_names; /* how big is the array? */
+static size_t names; /* how many entries does it have? */
+static size_t name_index; /* how many of the entries have we scanned? */
+
+/* Check the size of name_array, reallocating it as necessary. */
+static void
+check_name_alloc ()