X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fexclude.c;h=955c289563d03658c198b4d2116a3d0fe8fd89fc;hb=35a32ee9550d22a932f1a71d89653e351405638d;hp=cb43326667aa76098c16583eea25b757f20e4dd0;hpb=6942bbb52b3b0cdbdedcdf8b4356387631a2e8f3;p=gnulib.git diff --git a/lib/exclude.c b/lib/exclude.c index cb4332666..955c28956 100644 --- a/lib/exclude.c +++ b/lib/exclude.c @@ -1,7 +1,7 @@ /* exclude.c -- exclude file names - Copyright (C) 1992, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003 Free - Software Foundation, Inc. + Copyright (C) 1992, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, + 2004, 2005 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Paul Eggert */ @@ -28,9 +28,6 @@ #include #include -#ifndef errno -extern int errno; -#endif #include #include #include @@ -38,9 +35,12 @@ extern int errno; #include "exclude.h" #include "fnmatch.h" -#include "unlocked-io.h" #include "xalloc.h" +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + #if STDC_HEADERS || (! defined isascii && ! HAVE_ISASCII) # define IN_CTYPE_DOMAIN(c) true #else @@ -93,11 +93,7 @@ struct exclude struct exclude * new_exclude (void) { - struct exclude *ex = xmalloc (sizeof *ex); - ex->exclude_count = 0; - ex->exclude_alloc = 60; - ex->exclude = xmalloc (ex->exclude_alloc * sizeof ex->exclude[0]); - return ex; + return xzalloc (sizeof *new_exclude ()); } /* Free the storage associated with an exclude list. */ @@ -138,7 +134,7 @@ fnmatch_no_wildcards (char const *pattern, char const *f, int options) /* Return true if EX excludes F. */ bool -excluded_filename (struct exclude const *ex, char const *f) +excluded_file_name (struct exclude const *ex, char const *f) { size_t exclude_count = ex->exclude_count; @@ -188,54 +184,46 @@ add_exclude (struct exclude *ex, char const *pattern, int options) { struct patopts *patopts; - if (ex->exclude_alloc <= ex->exclude_count) - { - ex->exclude = xnrealloc (ex->exclude, ex->exclude_alloc, - 2 * sizeof *ex->exclude); - ex->exclude_alloc *= 2; - } + if (ex->exclude_count == ex->exclude_alloc) + ex->exclude = x2nrealloc (ex->exclude, &ex->exclude_alloc, + sizeof *ex->exclude); patopts = &ex->exclude[ex->exclude_count++]; patopts->pattern = pattern; patopts->options = options; } -/* Use ADD_FUNC to append to EX the patterns in FILENAME, each with +/* Use ADD_FUNC to append to EX the patterns in FILE_NAME, each with OPTIONS. LINE_END terminates each pattern in the file. If LINE_END is a space character, ignore trailing spaces and empty lines in FILE. Return -1 on failure, 0 on success. */ int add_exclude_file (void (*add_func) (struct exclude *, char const *, int), - struct exclude *ex, char const *filename, int options, + struct exclude *ex, char const *file_name, int options, char line_end) { - bool use_stdin = filename[0] == '-' && !filename[1]; + bool use_stdin = file_name[0] == '-' && !file_name[1]; FILE *in; - char *buf; + char *buf = NULL; char *p; char const *pattern; char const *lim; - size_t buf_alloc = 1000; + size_t buf_alloc = 0; size_t buf_count = 0; int c; int e = 0; if (use_stdin) in = stdin; - else if (! (in = fopen (filename, "r"))) + else if (! (in = fopen (file_name, "r"))) return -1; - buf = xmalloc (buf_alloc); - while ((c = getc (in)) != EOF) { - buf[buf_count++] = c; if (buf_count == buf_alloc) - { - buf = xnrealloc (buf, buf_alloc, 2); - buf_alloc *= 2; - } + buf = x2realloc (buf, &buf_alloc); + buf[buf_count++] = c; } if (ferror (in))