X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fexclude.c;h=24146eb93ca0cde34550a53801d1ecca9c12f50f;hb=5e6933eb225721fac1de4a8abf6c0da985ddaa6a;hp=3d1d3bfcb0dd860dff7755663200acf6539e2cc4;hpb=5e28cd65a57b6c3ddedc8b509ed88d47976e11a3;p=gnulib.git diff --git a/lib/exclude.c b/lib/exclude.c index 3d1d3bfcb..24146eb93 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 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 @@ -28,28 +28,17 @@ #include #include -#ifndef errno -extern int errno; -#endif #include #include #include #include -#if HAVE_INTTYPES_H -# include -#else -# if HAVE_STDINT_H -# include -# endif -#endif #include "exclude.h" #include "fnmatch.h" -#include "unlocked-io.h" #include "xalloc.h" -#ifndef SIZE_MAX -# define SIZE_MAX ((size_t) -1) +#if USE_UNLOCKED_IO +# include "unlocked-io.h" #endif #if STDC_HEADERS || (! defined isascii && ! HAVE_ISASCII) @@ -104,11 +93,7 @@ struct exclude struct exclude * new_exclude (void) { - struct exclude *ex = xmalloc (sizeof *ex); - ex->exclude_count = 0; - ex->exclude_alloc = (1 << 6); /* This must be a power of 2. */ - 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. */ @@ -199,14 +184,9 @@ add_exclude (struct exclude *ex, char const *pattern, int options) { struct patopts *patopts; - if (ex->exclude_alloc <= ex->exclude_count) - { - size_t s = 2 * ex->exclude_alloc; - if (! (0 < s && s <= SIZE_MAX / sizeof ex->exclude[0])) - xalloc_die (); - ex->exclude_alloc = s; - ex->exclude = xrealloc (ex->exclude, s * sizeof ex->exclude[0]); - } + 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; @@ -225,11 +205,11 @@ add_exclude_file (void (*add_func) (struct exclude *, char const *, int), { bool use_stdin = filename[0] == '-' && !filename[1]; FILE *in; - char *buf; + char *buf = NULL; char *p; char const *pattern; char const *lim; - size_t buf_alloc = (1 << 10); /* This must be a power of two. */ + size_t buf_alloc = 0; size_t buf_count = 0; int c; int e = 0; @@ -239,18 +219,11 @@ add_exclude_file (void (*add_func) (struct exclude *, char const *, int), else if (! (in = fopen (filename, "r"))) return -1; - buf = xmalloc (buf_alloc); - while ((c = getc (in)) != EOF) { - buf[buf_count++] = c; if (buf_count == buf_alloc) - { - buf_alloc *= 2; - if (! buf_alloc) - xalloc_die (); - buf = xrealloc (buf, buf_alloc); - } + buf = x2realloc (buf, &buf_alloc); + buf[buf_count++] = c; } if (ferror (in))