X-Git-Url: https://git.cworth.org/git?p=tar;a=blobdiff_plain;f=gnu%2Fsavedir.c;fp=gnu%2Fsavedir.c;h=598434135efb4495afcea87c7d5b4111bcfdaecd;hp=a1eaa4379c11abd02fdf358044d90d6ed231cfba;hb=b414e25de8ca49d7567a92c203d431383ec57c83;hpb=29ece34f44a27750bbfd76154ad9882580453dc7 diff --git a/gnu/savedir.c b/gnu/savedir.c index a1eaa43..5984341 100644 --- a/gnu/savedir.c +++ b/gnu/savedir.c @@ -46,11 +46,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; @@ -98,8 +98,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); @@ -109,6 +107,22 @@ savedirstream (DIR *dirp) return name_space; } +/* Like savedirstreamp (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. @@ -125,6 +139,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) {