X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fsavedir.c;h=d930fb4af273af105ae895fccdb34f1f1ac65476;hb=9e1c363a5e3c4ccc9c44ac40e90c811af52c7a63;hp=c68547054fbb3837a623114044637c5e5afda633;hpb=d76a6493392c315ba9da4a262efaa430b1a72476;p=gnulib.git diff --git a/lib/savedir.c b/lib/savedir.c index c68547054..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, 2006 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,11 +27,9 @@ #include -#if HAVE_DIRENT_H -# include -#else -# define dirent direct -# include +#include +#ifndef _D_EXACT_NAMLEN +# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name) #endif #include @@ -47,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. @@ -81,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)