X-Git-Url: https://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fsavedir.c;h=6d5ed7f459a338de9eb973e1512c801ca75eacb8;hb=b28ec8ed78286cbd1d113d0785e0e1f5cf11832e;hp=455f3202855979e0e32beca2e841e563fce7073c;hpb=441aa3044f43e5572f58c354f01e6bc070acd5c7;p=gnulib.git diff --git a/lib/savedir.c b/lib/savedir.c index 455f32028..6d5ed7f45 100644 --- a/lib/savedir.c +++ b/lib/savedir.c @@ -1,7 +1,7 @@ /* savedir.c -- save the list of files in a directory in a string - Copyright (C) 1990, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, - 2006, 2009 Free Software Foundation, Inc. + Copyright (C) 1990, 1997-2001, 2003-2006, 2009-2013 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 @@ -44,11 +44,11 @@ /* Return a freshly allocated string containing the file names in directory DIRP, separated by '\0' characters; the end is marked by two '\0' characters in a row. - Return NULL (setting errno) if DIRP cannot be read or closed. + Return NULL (setting errno) if DIRP cannot be read. If DIRP is NULL, return NULL without affecting errno. */ -static char * -savedirstream (DIR *dirp) +char * +streamsavedir (DIR *dirp) { char *name_space; size_t allocated = NAME_SIZE_DEFAULT; @@ -96,8 +96,6 @@ savedirstream (DIR *dirp) } name_space[used] = '\0'; save_errno = errno; - if (closedir (dirp) != 0) - save_errno = errno; if (save_errno != 0) { free (name_space); @@ -107,6 +105,22 @@ savedirstream (DIR *dirp) return name_space; } +/* Like streamsavedir (DIRP), except also close DIRP. */ + +static char * +savedirstream (DIR *dirp) +{ + char *name_space = streamsavedir (dirp); + if (dirp && closedir (dirp) != 0) + { + int save_errno = errno; + free (name_space); + errno = save_errno; + return NULL; + } + return name_space; +} + /* Return a freshly allocated string containing the file names in directory DIR, separated by '\0' characters; the end is marked by two '\0' characters in a row. @@ -123,6 +137,7 @@ savedir (char const *dir) the end is marked by two '\0' characters in a row. Return NULL (setting errno) if FD cannot be read or closed. */ +/* deprecated */ char * fdsavedir (int fd) {