X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fsavedir.c;h=d930fb4af273af105ae895fccdb34f1f1ac65476;hb=50bbfa997cdf1e76af526569e1e3dbbadd1bdebd;hp=b08f32b7916de07b3891e16d5fbedf0fc85c0a29;hpb=0e54d613ae73baae389f82279958af959c746290;p=gnulib.git diff --git a/lib/savedir.c b/lib/savedir.c index b08f32b79..d930fb4af 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 1990, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free - Software Foundation, Inc. + Copyright (C) 1990, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, + 2006 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 @@ -19,9 +19,7 @@ /* Written by David MacKenzie . */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include #include "savedir.h" @@ -29,26 +27,9 @@ #include -#if HAVE_DIRENT_H -# include -#else -# define dirent direct -# if HAVE_SYS_NDIR_H -# include -# endif -# if HAVE_SYS_DIR_H -# include -# endif -# if HAVE_NDIR_H -# include -# endif -#endif - -#ifdef CLOSEDIR_VOID -/* Fake a return value. */ -# define CLOSEDIR(d) (closedir (d), 0) -#else -# define CLOSEDIR(d) closedir (d) +#include +#ifndef _D_EXACT_NAMLEN +# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name) #endif #include @@ -62,6 +43,11 @@ # define NAME_SIZE_DEFAULT 512 #endif +/* The results of opendir() in this file are not used with dirfd and fchdir, + therefore save some unnecessary work in fchdir.c. */ +#undef opendir +#undef closedir + /* 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. @@ -96,7 +82,7 @@ savedirstream (DIR *dirp) entry = dp->d_name; if (entry[entry[0] != '.' ? 0 : entry[1] != '.' ? 1 : 2] != '\0') { - size_t entry_size = strlen (entry) + 1; + size_t entry_size = _D_EXACT_NAMLEN (dp) + 1; if (used + entry_size < used) xalloc_die (); if (allocated <= used + entry_size) @@ -117,7 +103,7 @@ savedirstream (DIR *dirp) } name_space[used] = '\0'; save_errno = errno; - if (CLOSEDIR (dirp) != 0) + if (closedir (dirp) != 0) save_errno = errno; if (save_errno != 0) {