diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 19 | ||||
-rw-r--r-- | src/config.in | 3 | ||||
-rw-r--r-- | src/dired.c | 17 | ||||
-rw-r--r-- | src/fileio.c | 35 | ||||
-rw-r--r-- | src/filelock.c | 4 | ||||
-rw-r--r-- | src/lread.c | 5 | ||||
-rw-r--r-- | src/xrdb.c | 5 |
7 files changed, 34 insertions, 54 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 9713a4a6ed5..d0208d507b5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,22 @@ +2011-02-22 Paul Eggert <eggert@cs.ucla.edu> + + Assume S_ISLNK etc. work, since gnulib supports this. + * config.in: Regenerate. + * dired.c (lstat): Remove. + (file_name_completion): Assume S_ISDIR works. + (file_name_completion_stat): Assume S_ISLNK works. + Do not bother calling stat unless lstat says it's a symlink. + * fileio.c (S_ISLNK, S_ISFIFO, S_ISREG, lstat): Remove. + (Fcopy_file): Assume S_ISREG and S_ISLNK work. + (check_writable, Ffile_writable_p, Fset_file_times): + Assume S_ISDIR works. + (Ffile_readable_p): Use S_IFIFO, not S_ISFIFO, to guess whether + fifos exist. + (Ffile_regular_p, Finsert_file_contents): Assumes S_ISREG works. + * filelock.c (S_ISLNK): Remove. + * lread.c (openp): Assume S_ISDIR works. + * xrdb.c (S_ISDIR): Remove. + 2011-02-21 Eli Zaretskii <eliz@gnu.org> * makefile.w32-in ($(BLD)/filemode.$(O)): Move recipe to diff --git a/src/config.in b/src/config.in index 9c23fb583fa..ded8c6b292a 100644 --- a/src/config.in +++ b/src/config.in @@ -465,6 +465,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ /* Define to 1 if you have the `lrand48' function. */ #undef HAVE_LRAND48 +/* Define to 1 if you have the `lstat' function. */ +#undef HAVE_LSTAT + /* Define to 1 if using libm17n-flt. */ #undef HAVE_M17N_FLT diff --git a/src/dired.c b/src/dired.c index b01ce8d4d8f..92c12846558 100644 --- a/src/dired.c +++ b/src/dired.c @@ -84,13 +84,6 @@ extern struct re_pattern_buffer *compile_pattern (Lisp_Object, struct re_registers *, Lisp_Object, int, int); -/* if system does not have symbolic links, it does not have lstat. - In that case, use ordinary stat instead. */ - -#ifndef S_IFLNK -#define lstat stat -#endif - Lisp_Object Qdirectory_files; Lisp_Object Qdirectory_files_and_attributes; Lisp_Object Qfile_name_completion; @@ -539,7 +532,7 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, int all_flag, int v if (file_name_completion_stat (encoded_dir, dp, &st) < 0) continue; - directoryp = ((st.st_mode & S_IFMT) == S_IFDIR); + directoryp = S_ISDIR (st.st_mode); tem = Qnil; /* If all_flag is set, always include all. It would not actually be helpful to the user to ignore any possible @@ -843,20 +836,16 @@ file_name_completion_stat (Lisp_Object dirname, DIRENTRY *dp, struct stat *st_ad memcpy (fullname + pos, dp->d_name, len); fullname[pos + len] = 0; -#ifdef S_IFLNK /* We want to return success if a link points to a nonexistent file, but we want to return the status for what the link points to, in case it is a directory. */ value = lstat (fullname, st_addr); - stat (fullname, st_addr); - return value; -#else - value = stat (fullname, st_addr); + if (value == 0 && S_ISLNK (st_addr->st_mode)) + stat (fullname, st_addr); #ifdef MSDOS _djstat_flags = save_djstat_flags; #endif /* MSDOS */ return value; -#endif /* S_IFLNK */ } Lisp_Object diff --git a/src/fileio.c b/src/fileio.c index 2ccad83f668..0225e0bf3a9 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -26,18 +26,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <setjmp.h> #include <unistd.h> -#if !defined (S_ISLNK) && defined (S_IFLNK) -# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) -#endif - -#if !defined (S_ISFIFO) && defined (S_IFIFO) -# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) -#endif - -#if !defined (S_ISREG) && defined (S_IFREG) -# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -#endif - #ifdef HAVE_PWD_H #include <pwd.h> #endif @@ -95,10 +83,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include "commands.h" -#ifndef S_ISLNK -# define lstat stat -#endif - #ifndef FILE_SYSTEM_CASE #define FILE_SYSTEM_CASE(filename) (filename) #endif @@ -1922,7 +1906,6 @@ on the system, we copy the SELinux context of FILE to NEWNAME. */) Fcons (file, Fcons (newname, Qnil))); } -#if defined (S_ISREG) && defined (S_ISLNK) if (input_file_statable_p) { if (!(S_ISREG (st.st_mode)) && !(S_ISLNK (st.st_mode))) @@ -1934,7 +1917,6 @@ on the system, we copy the SELinux context of FILE to NEWNAME. */) report_file_error ("Non-regular file", Fcons (file, Qnil)); } } -#endif /* S_ISREG && S_ISLNK */ #ifdef MSDOS /* System's default file type was set to binary by _fmode in emacs.c. */ @@ -2408,7 +2390,7 @@ check_writable (const char *filename) struct stat st; if (stat (filename, &st) < 0) return 0; - return (st.st_mode & S_IWRITE || (st.st_mode & S_IFMT) == S_IFDIR); + return (st.st_mode & S_IWRITE || S_ISDIR (st.st_mode)); #else /* not MSDOS */ #ifdef HAVE_EUIDACCESS return (euidaccess (filename, 2) >= 0); @@ -2500,7 +2482,7 @@ See also `file-exists-p' and `file-attributes'. */) return Qnil; #else /* not DOS_NT and not macintosh */ flags = O_RDONLY; -#if defined (S_ISFIFO) && defined (O_NONBLOCK) +#if defined (S_IFIFO) && defined (O_NONBLOCK) /* Opening a fifo without O_NONBLOCK can wait. We don't want to wait. But we don't want to mess wth O_NONBLOCK except in the case of a fifo, on a system which handles it. */ @@ -2555,7 +2537,7 @@ DEFUN ("file-writable-p", Ffile_writable_p, Sfile_writable_p, 1, 1, 0, should check ACLs though, which do affect this. */ if (stat (SDATA (dir), &statbuf) < 0) return Qnil; - return (statbuf.st_mode & S_IFMT) == S_IFDIR ? Qt : Qnil; + return S_ISDIR (statbuf.st_mode) ? Qt : Qnil; #else return (check_writable (!NILP (dir) ? SSDATA (dir) : "") ? Qt : Qnil); @@ -2681,7 +2663,7 @@ See `file-symlink-p' to distinguish symlinks. */) if (stat (SSDATA (absname), &st) < 0) return Qnil; - return (st.st_mode & S_IFMT) == S_IFDIR ? Qt : Qnil; + return S_ISDIR (st.st_mode) ? Qt : Qnil; } DEFUN ("file-accessible-directory-p", Ffile_accessible_directory_p, Sfile_accessible_directory_p, 1, 1, 0, @@ -2744,12 +2726,12 @@ See `file-symlink-p' to distinguish symlinks. */) if (result < 0) return Qnil; - return (st.st_mode & S_IFMT) == S_IFREG ? Qt : Qnil; + return S_ISREG (st.st_mode) ? Qt : Qnil; } #else if (stat (SSDATA (absname), &st) < 0) return Qnil; - return (st.st_mode & S_IFMT) == S_IFREG ? Qt : Qnil; + return S_ISREG (st.st_mode) ? Qt : Qnil; #endif } @@ -3007,8 +2989,7 @@ Use the current time if TIME is nil. TIME is in the format of struct stat st; /* Setting times on a directory always fails. */ - if (stat (SDATA (encoded_absname), &st) == 0 - && (st.st_mode & S_IFMT) == S_IFDIR) + if (stat (SSDATA (encoded_absname), &st) == 0 && S_ISDIR (st.st_mode)) return Qnil; #endif report_file_error ("Setting file times", Fcons (absname, Qnil)); @@ -3267,7 +3248,6 @@ variable `last-coding-system-used' to the coding system actually used. */) goto notfound; } -#ifdef S_IFREG /* This code will need to be changed in order to work on named pipes, and it's probably just not worth it. So we should at least signal an error. */ @@ -3282,7 +3262,6 @@ variable `last-coding-system-used' to the coding system actually used. */) xsignal2 (Qfile_error, build_string ("not a regular file"), orig_filename); } -#endif if (fd < 0) if ((fd = emacs_open (SSDATA (filename), O_RDONLY, 0)) < 0) diff --git a/src/filelock.c b/src/filelock.c index 8e18bb7b650..7f8f0e1c0fb 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -51,10 +51,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <utmp.h> #endif -#if !defined (S_ISLNK) && defined (S_IFLNK) -#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) -#endif - /* A file whose last-modified time is just after the most recent boot. Define this to be NULL to disable checking for this file. */ #ifndef BOOT_TIME_FILE diff --git a/src/lread.c b/src/lread.c index 855869cd90d..e594a363873 100644 --- a/src/lread.c +++ b/src/lread.c @@ -1402,8 +1402,7 @@ openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes, Lisp_Object *sto encoded_fn = ENCODE_FILE (string); pfn = SSDATA (encoded_fn); - exists = (stat (pfn, &st) >= 0 - && (st.st_mode & S_IFMT) != S_IFDIR); + exists = (stat (pfn, &st) == 0 && ! S_ISDIR (st.st_mode)); if (exists) { /* Check that we can access or open it. */ @@ -4385,7 +4384,7 @@ to load. See also `load-dangerous-libraries'. */); Qdir_ok = intern_c_string ("dir-ok"); staticpro (&Qdir_ok); - + Qdo_after_load_evaluation = intern_c_string ("do-after-load-evaluation"); staticpro (&Qdo_after_load_evaluation) ; diff --git a/src/xrdb.c b/src/xrdb.c index 01714900752..9fb3f3474fb 100644 --- a/src/xrdb.c +++ b/src/xrdb.c @@ -38,10 +38,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #endif #include <sys/stat.h> -#if !defined(S_ISDIR) && defined(S_IFDIR) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) -#endif - #include "lisp.h" #ifdef USE_MOTIF @@ -764,4 +760,3 @@ main (argc, argv) XCloseDisplay (display); } #endif /* TESTRM */ - |