X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fsavedir.c;h=6d5ed7f459a338de9eb973e1512c801ca75eacb8;hb=fa1db0dd22768f09a507674a30beb5b8a87bb35f;hp=538f397cb6456aace6dc02cc4c70bc8b15a6338f;hpb=b2e2010c7c902235b5efb5bd3c6529f61b093aa4;p=gnulib.git diff --git a/lib/savedir.c b/lib/savedir.c index 538f397cb..6d5ed7f45 100644 --- a/lib/savedir.c +++ b/lib/savedir.c @@ -1,6 +1,6 @@ /* savedir.c -- save the list of files in a directory in a string - Copyright (C) 1990, 1997-2001, 2003-2006, 2009-2010 Free Software + 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 @@ -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) {