X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fnames.c;h=e68f599a034ec93b4bde20d6bcef580e130c048f;hb=120e96c480fbfc5fa31fba0f59ba1a45953b838e;hp=a5f2f7e70f346ff1c24e757501fb63790fdfad46;hpb=7347b4f5d51c15bb19637ea52e9bf7dff832cc52;p=chaz%2Ftar diff --git a/src/names.c b/src/names.c index a5f2f7e..e68f599 100644 --- a/src/names.c +++ b/src/names.c @@ -1,7 +1,7 @@ /* Various processing of names. Copyright (C) 1988, 1992, 1994, 1996, 1997, 1998, 1999, 2000, 2001, - 2003, 2004 Free Software Foundation, Inc. + 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 the @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include @@ -66,7 +66,7 @@ uid_to_uname (uid_t uid, char **uname) if (uid != 0 && uid == cached_no_such_uid) { - *uname = strdup (""); + *uname = xstrdup (""); return; } @@ -81,11 +81,11 @@ uid_to_uname (uid_t uid, char **uname) else { cached_no_such_uid = uid; - *uname = strdup (""); + *uname = xstrdup (""); return; } } - *uname = strdup (cached_uname); + *uname = xstrdup (cached_uname); } /* Given GID, find the corresponding GNAME. */ @@ -96,7 +96,7 @@ gid_to_gname (gid_t gid, char **gname) if (gid != 0 && gid == cached_no_such_gid) { - *gname = strdup (""); + *gname = xstrdup (""); return; } @@ -111,11 +111,11 @@ gid_to_gname (gid_t gid, char **gname) else { cached_no_such_gid = gid; - *gname = strdup (""); + *gname = xstrdup (""); return; } } - *gname = strdup (cached_gname); + *gname = xstrdup (cached_gname); } /* Given UNAME, set the corresponding UID and return 1, or else, return 0. */ @@ -212,7 +212,6 @@ name_add (const char *name) /* Names from external name file. */ -static FILE *name_file; /* file to read names from */ static char *name_buffer; /* buffer to hold the current file name */ static size_t name_buffer_length; /* allocated length of name_buffer */ @@ -233,17 +232,6 @@ name_init (void) { name_buffer = xmalloc (NAME_FIELD_SIZE + 2); name_buffer_length = NAME_FIELD_SIZE; - - if (files_from_option) - { - if (!strcmp (files_from_option, "-")) - { - request_stdin ("-T"); - name_file = stdin; - } - else if (name_file = fopen (files_from_option, "r"), !name_file) - open_fatal (files_from_option); - } } void @@ -253,47 +241,6 @@ name_term (void) free (name_array); } -/* Read the next filename from name_file and null-terminate it. Put - it into name_buffer, reallocating and adjusting name_buffer_length - if necessary. Return 0 at end of file, 1 otherwise. */ -static int -read_name_from_file (void) -{ - int character; - size_t counter = 0; - - /* FIXME: getc may be called even if character was EOF the last time here. */ - - /* FIXME: This + 2 allocation might serve no purpose. */ - - while (character = getc (name_file), - character != EOF && character != filename_terminator) - { - if (counter == name_buffer_length) - { - if (name_buffer_length * 2 < name_buffer_length) - xalloc_die (); - name_buffer_length *= 2; - name_buffer = xrealloc (name_buffer, name_buffer_length + 2); - } - name_buffer[counter++] = character; - } - - if (counter == 0 && character == EOF) - return 0; - - if (counter == name_buffer_length) - { - if (name_buffer_length * 2 < name_buffer_length) - xalloc_die (); - name_buffer_length *= 2; - name_buffer = xrealloc (name_buffer, name_buffer_length + 2); - } - name_buffer[counter] = '\0'; - - return 1; -} - /* Get the next name from ARGV or the file of names. Result is in static storage and can't be relied upon across two calls. @@ -311,37 +258,25 @@ name_next (int change_dirs) if (filename_terminator == '\0') change_dirs = 0; - while (1) + while (name_index != names) { - /* Get a name, either from file or from saved arguments. */ - - if (name_index == names) + size_t source_len; + source = name_array[name_index++]; + source_len = strlen (source); + if (name_buffer_length < source_len) { - if (! name_file) - break; - if (! read_name_from_file ()) - break; - } - else - { - size_t source_len; - source = name_array[name_index++]; - source_len = strlen (source); - if (name_buffer_length < source_len) + do { - do - { - name_buffer_length *= 2; - if (! name_buffer_length) - xalloc_die (); - } - while (name_buffer_length < source_len); - - free (name_buffer); - name_buffer = xmalloc (name_buffer_length + 2); + name_buffer_length *= 2; + if (! name_buffer_length) + xalloc_die (); } - strcpy (name_buffer, source); + while (name_buffer_length < source_len); + + free (name_buffer); + name_buffer = xmalloc (name_buffer_length + 2); } + strcpy (name_buffer, source); /* Zap trailing slashes. */ @@ -359,30 +294,17 @@ name_next (int change_dirs) chdir_flag = 1; else { - unquote_string (name_buffer); + if (unquote_option) + unquote_string (name_buffer); if (incremental_option) register_individual_file (name_buffer); return name_buffer; } } - /* No more names in file. */ - - if (name_file && chdir_flag) - FATAL_ERROR ((0, 0, _("Missing file name after -C"))); - return 0; } -/* Close the name file, if any. */ -void -name_close (void) -{ - if (name_file && name_file != stdin) - if (fclose (name_file) != 0) - close_error (name_buffer); -} - /* Gather names in a list for scanning. Could hash them later if we really care. @@ -557,14 +479,14 @@ name_match (const char *file_name) struct name *cursor = namelist; if (!cursor) - return ! files_from_option; + return 1; if (cursor->fake) { chdir_do (cursor->change_dir); namelist = 0; nametail = &namelist; - return ! files_from_option; + return 1; } cursor = namelist_match (file_name, length); @@ -945,8 +867,8 @@ excluded_name (char const *name) /* Hash tables of strings. */ /* Calculate the hash of a string. */ -static unsigned -hash_string_hasher (void const *name, unsigned n_buckets) +static size_t +hash_string_hasher (void const *name, size_t n_buckets) { return hash_string (name, n_buckets); }