X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fbackupfile.c;h=adfc0e5411a14664d7150b60ccee4476db4bc14a;hb=59c99e8a034089d8f9cbd8f20b2ed636669363eb;hp=3dfaf45dc98dfb9838fe0650a81d986c7b075992;hpb=a8f0811e1e174cd6d3b5f0fef314269d000f9c4c;p=gnulib.git diff --git a/lib/backupfile.c b/lib/backupfile.c index 3dfaf45dc..adfc0e541 100644 --- a/lib/backupfile.c +++ b/lib/backupfile.c @@ -22,9 +22,7 @@ /* Written by Paul Eggert and David MacKenzie. Some algorithms adapted from GNU Emacs. */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include #include "backupfile.h" @@ -41,29 +39,10 @@ #include -#if HAVE_DIRENT_H -# include -# define NLENGTH(direct) strlen ((direct)->d_name) -#else -# define dirent direct -# define NLENGTH(direct) ((size_t) (direct)->d_namlen) -# if HAVE_SYS_NDIR_H -# include -# endif -# if HAVE_SYS_DIR_H -# include -# endif -# if HAVE_NDIR_H -# include -# endif -#endif - -#if HAVE_DIRENT_H || HAVE_NDIR_H || HAVE_SYS_DIR_H || HAVE_SYS_NDIR_H -# define HAVE_DIR 1 -#else -# define HAVE_DIR 0 +#include +#ifndef _D_EXACT_NAMLEN +# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name) #endif - #if D_INO_IN_DIRENT # define REAL_DIR_ENTRY(dp) ((dp)->d_ino != 0) #else @@ -103,6 +82,11 @@ of `digit' even when the host does not conform to POSIX. */ #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) +/* 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 + /* The extension added to file names to produce a simple (as opposed to numbered) backup file name. */ char const *simple_backup_suffix = "~"; @@ -166,8 +150,6 @@ check_extension (char *file, size_t filelen, char e) } } -#if HAVE_DIR - /* Returned values for NUMBERED_BACKUP. */ enum numbered_backup_result @@ -227,7 +209,7 @@ numbered_backup (char **buffer, size_t buffer_size, size_t filelen) size_t versionlen; size_t new_buflen; - if (! REAL_DIR_ENTRY (dp) || NLENGTH (dp) < baselen + 4) + if (! REAL_DIR_ENTRY (dp) || _D_EXACT_NAMLEN (dp) < baselen + 4) continue; if (memcmp (buf + base_offset, dp->d_name, baselen + 2) != 0) @@ -282,7 +264,6 @@ numbered_backup (char **buffer, size_t buffer_size, size_t filelen) *buffer = buf; return result; } -#endif /* HAVE_DIR */ /* Return the name of the new backup file for the existing file FILE, allocated with malloc. Report an error and fail if out of memory. @@ -301,14 +282,13 @@ find_backup_file_name (char const *file, enum backup_type backup_type) size_t simple_backup_suffix_size = strlen (simple_backup_suffix) + 1; size_t backup_suffix_size_guess = simple_backup_suffix_size; enum { GUESS = sizeof ".~12345~" }; - if (HAVE_DIR && backup_suffix_size_guess < GUESS) + if (backup_suffix_size_guess < GUESS) backup_suffix_size_guess = GUESS; ssize = filelen + backup_suffix_size_guess + 1; s = xmalloc (ssize); memcpy (s, file, filelen + 1); -#if HAVE_DIR if (backup_type != simple_backups) switch (numbered_backup (&s, ssize, filelen)) { @@ -323,7 +303,6 @@ find_backup_file_name (char const *file, enum backup_type backup_type) simple = (backup_type == numbered_existing_backups); break; } -#endif if (simple) memcpy (s + filelen, simple_backup_suffix, simple_backup_suffix_size);