/* Names from the command call. */
static struct name *namelist; /* first name in list, if any */
-static struct name **nametail = &namelist; /* end of name list */
+static struct name *nametail; /* end of name list */
/* File name arguments are processed in two stages: first a
name_array (see below) is filled, then the names from it
buffer->matching_flags = matching_flags;
buffer->directory = NULL;
buffer->parent = NULL;
+ buffer->cmdline = true;
- namelist = buffer;
- nametail = &namelist->next;
+ namelist = nametail = buffer;
}
else if (change_dir)
- addname (0, change_dir, NULL);
+ addname (0, change_dir, false, NULL);
}
else
{
change_dir = chdir_arg (xstrdup (ep->v.name));
if (ep)
- addname (ep->v.name, change_dir, NULL);
+ addname (ep->v.name, change_dir, true, NULL);
else
{
if (change_dir != change_dir0)
- addname (0, change_dir, NULL);
+ addname (NULL, change_dir, false, NULL);
break;
}
}
/* Add a name to the namelist. */
struct name *
-addname (char const *string, int change_dir, struct name *parent)
+addname (char const *string, int change_dir, bool cmdline, struct name *parent)
{
struct name *name = make_name (string);
- name->prev = *nametail;
+ name->prev = nametail;
name->next = NULL;
name->found_count = 0;
name->matching_flags = matching_flags;
name->change_dir = change_dir;
name->directory = NULL;
name->parent = parent;
-
- *nametail = name;
- nametail = &name->next;
+ name->cmdline = cmdline;
+
+ if (nametail)
+ nametail->next = name;
+ else
+ namelist = name;
+ nametail = name;
return name;
}
if ((p = name->next) != NULL)
p->prev = name->prev;
else
- nametail = &name->prev;
+ nametail = name->prev;
}
/* Return true if and only if name FILE_NAME (from an archive) matches any
if (cursor->name[0] == 0)
{
chdir_do (cursor->change_dir);
- namelist = 0;
- nametail = &namelist;
+ namelist = NULL;
+ nametail = NULL;
return true;
}
if (starting_file_option)
{
free (namelist);
- namelist = 0;
- nametail = &namelist;
+ namelist = NULL;
+ nametail = NULL;
}
chdir_do (cursor->change_dir);
return true;
}
-static inline int
-is_pattern (const char *string)
-{
- return strchr (string, '*') || strchr (string, '[') || strchr (string, '?');
-}
-
static void
regex_usage_warning (const char *name)
{
static int warned_once = 0;
- if (warn_regex_usage && is_pattern (name))
+ if (warn_regex_usage && fnmatch_pattern_has_wildcards (name, 0))
{
warned_once = 1;
WARN ((0, 0,
}
/* Don't bother freeing the name list; we're about to exit. */
- namelist = 0;
- nametail = &namelist;
+ namelist = NULL;
+ nametail = NULL;
if (same_order_option)
{
namebuf = xrealloc (namebuf, allocated_length + 1);
}
strcpy (namebuf + name_length, string + 1);
- np = addname (namebuf, change_dir, name);
+ np = addname (namebuf, change_dir, false, name);
if (!child_head)
child_head = np;
else
name_gather ();
if (!namelist)
- addname (".", 0, NULL);
+ addname (".", 0, false, NULL);
if (listed_incremental_option)
{
_("Only one -C option is allowed with "
"--listed-incremental")));
}
- chdir_do (namelist->change_dir);
+
read_directory_file ();
}
prev_name = name;
num_names++;
}
- nametail = &prev_name;
+ nametail = prev_name;
hash_free (nametab);
namelist = merge_sort (namelist, num_names, compare_names_found);
find and return all the non-found names in the namelist. */
struct name *gnu_list_name;
-char *
-name_from_list (void)
+struct name const *
+name_from_list ()
{
if (!gnu_list_name)
gnu_list_name = namelist;
{
gnu_list_name->found_count++;
chdir_do (gnu_list_name->change_dir);
- return gnu_list_name->name;
+ return gnu_list_name;
}
- return 0;
+ return NULL;
}
void
{
return excluded_file_name (excluded, name + FILE_SYSTEM_PREFIX_LEN (name));
}
-\f
-/* Names to avoid dumping. */
-static Hash_table *avoided_name_table;
-
-/* Remember to not archive NAME. */
-void
-add_avoided_name (char const *name)
-{
- hash_string_insert (&avoided_name_table, name);
-}
-
-/* Should NAME be avoided when archiving? */
-bool
-is_avoided_name (char const *name)
-{
- return hash_string_lookup (avoided_name_table, name);
-}
-
\f
static Hash_table *individual_file_table;