(exclude_pool, exclude_pool_size, allocated_exclude_pool_size,

simple_exclude_array, simple_excludes, allocated_simple_excludes,
pattern_exclude_array, pattern_excludes, allocated_pattern_excludes,
add_exclude, add_exclude_file, check_exclude): Remove; now done in
../lib/exclude.c.
This commit is contained in:
Paul Eggert
1999-07-08 03:45:21 +00:00
parent 07f380748c
commit 8e8acfbc97

View File

@@ -379,13 +379,10 @@ name_next (int change_dirs)
else if (change_dirs && strcmp (name_buffer, "-C") == 0)
chdir_flag = 1;
else
#if 0
if (!exclude_option || !check_exclude (name_buffer))
#endif
{
unquote_string (name_buffer);
return name_buffer;
}
{
unquote_string (name_buffer);
return name_buffer;
}
}
/* No more names in file. */
@@ -808,137 +805,3 @@ new_name (const char *path, const char *name)
sprintf (buffer, "%s/%s", path, name);
return buffer;
}
/* Excludes names. */
static char *exclude_pool = NULL;
static size_t exclude_pool_size = 0;
static size_t allocated_exclude_pool_size = 0;
static char **simple_exclude_array = NULL;
static int simple_excludes = 0;
static int allocated_simple_excludes = 0;
static char **pattern_exclude_array = NULL;
static int pattern_excludes = 0;
static int allocated_pattern_excludes = 0;
/*---.
| ? |
`---*/
void
add_exclude (char *name)
{
size_t name_size;
unquote_string (name); /* FIXME: unquote in all cases? If ever? */
name_size = strlen (name) + 1;
if (exclude_pool_size + name_size > allocated_exclude_pool_size)
{
char *previous_exclude_pool = exclude_pool;
char **cursor;
allocated_exclude_pool_size = exclude_pool_size + name_size + 1024;
exclude_pool = (char *)
xrealloc (exclude_pool, allocated_exclude_pool_size);
for (cursor = simple_exclude_array;
cursor < simple_exclude_array + simple_excludes;
cursor++)
*cursor = exclude_pool + (*cursor - previous_exclude_pool);
for (cursor = pattern_exclude_array;
cursor < pattern_exclude_array + pattern_excludes;
cursor++)
*cursor = exclude_pool + (*cursor - previous_exclude_pool);
}
if (is_pattern (name))
{
if (pattern_excludes == allocated_pattern_excludes)
{
allocated_pattern_excludes += 32;
pattern_exclude_array = (char **)
xrealloc (pattern_exclude_array,
allocated_pattern_excludes * sizeof (char *));
}
pattern_exclude_array[pattern_excludes++]
= exclude_pool + exclude_pool_size;
}
else
{
if (simple_excludes == allocated_simple_excludes)
{
allocated_simple_excludes += 32;
simple_exclude_array = (char **)
xrealloc (simple_exclude_array,
allocated_simple_excludes * sizeof (char *));
}
simple_exclude_array[simple_excludes++]
= exclude_pool + exclude_pool_size;
}
strcpy (exclude_pool + exclude_pool_size, name);
exclude_pool_size += name_size;
}
/*---.
| ? |
`---*/
void
add_exclude_file (const char *name)
{
FILE *file;
char buffer[1024];
if (strcmp (name, "-"))
file = fopen (name, "r");
else
{
request_stdin ("-X");
file = stdin;
}
if (!file)
FATAL_ERROR ((0, errno, _("Cannot open %s"), name));
while (fgets (buffer, 1024, file))
{
char *end_of_line = strrchr (buffer, '\n');
if (end_of_line)
*end_of_line = '\0';
add_exclude (buffer);
}
if (fclose (file) == EOF)
ERROR ((0, errno, "%s", name));
}
/*------------------------------------------------------------------.
| Returns true if the file NAME should not be added nor extracted. |
`------------------------------------------------------------------*/
int
check_exclude (const char *name)
{
int counter;
for (counter = 0; counter < pattern_excludes; counter++)
if (fnmatch (pattern_exclude_array[counter], name, FNM_LEADING_DIR) == 0)
return 1;
for (counter = 0; counter < simple_excludes; counter++)
{
/* Accept the output from strstr only if it is the last part of the
string. FIXME: Find a faster way to do this. */
char *string = strstr (name, simple_exclude_array[counter]);
if (string
&& (string == name || string[-1] == '/')
&& string[strlen (simple_exclude_array[counter])] == '\0')
return 1;
}
return 0;
}