diff options
| author | Paul Eggert <eggert@cs.ucla.edu> | 2011-02-21 17:55:20 -0800 |
|---|---|---|
| committer | Paul Eggert <eggert@cs.ucla.edu> | 2011-02-21 17:55:20 -0800 |
| commit | f68c809d7e91fcde5ee2e4f7f15def3d7e48b720 (patch) | |
| tree | 9df8577ff5f281f066f778dee44bdb839eb13daf /src/fileio.c | |
| parent | 5ecec6a7f4a1ce83abd53a14fba7f51b668c6336 (diff) | |
| download | emacs-f68c809d7e91fcde5ee2e4f7f15def3d7e48b720.tar.gz | |
[ChangeLog]
Assume S_ISLNK etc. work, since gnulib supports this.
* Makefile.in (GNULIB_MODULES): Add sys_stat.
* configure.in: Check for lstat and set HAVE_LSTAT=0 if not.
Pretend to be using the gnulib lstat module for benefit of sys/stat.h.
* configure, lib/Makefile.in, lib/gnulib.mk: Regenerate.
[lib-src/ChangeLog]
Assume S_ISLNK etc. work, since gnulib supports this.
* etags.c (S_ISREG): Remove.
[src/ChangeLog]
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.
Diffstat (limited to 'src/fileio.c')
| -rw-r--r-- | src/fileio.c | 35 |
1 files changed, 7 insertions, 28 deletions
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) |
