]> git.eshelyaron.com Git - emacs.git/commitdiff
[ChangeLog]
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 22 Feb 2011 01:55:20 +0000 (17:55 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 22 Feb 2011 01:55:20 +0000 (17:55 -0800)
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.

15 files changed:
ChangeLog
Makefile.in
configure
configure.in
lib-src/ChangeLog
lib-src/etags.c
lib/Makefile.in
lib/gnulib.mk
src/ChangeLog
src/config.in
src/dired.c
src/fileio.c
src/filelock.c
src/lread.c
src/xrdb.c

index cfd77b652b4910d2c09a407b5be61c5b6e674b93..5aacf77688b96b8198422ee5ddf8cdafc2503f45 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-02-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       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.
+
 2011-02-21  Paul Eggert  <eggert@cs.ucla.edu>
 
        * lib/min-max.h: New file, for "min" and "max".
index b18612418820a5672ec20d060f9731da28aae00a..489409afe5b902fd3239fc33665761973424dc65 100644 (file)
@@ -332,7 +332,7 @@ DOS_gnulib_comp.m4 = gl-comp.m4
 # as per $(gnulib_srcdir)/DEPENDENCIES.
 GNULIB_MODULES = \
   crypto/md5 dtoastr filemode getloadavg getopt-gnu \
-  ignore-value mktime strftime
+  ignore-value mktime strftime sys_stat
 GNULIB_TOOL_FLAGS = \
  --import --no-changelog --no-vc-files --makefile-name=gnulib.mk
 sync-from-gnulib: $(gnulib_srcdir)
index 16673f2ca79f5e6fe8c86d52e1a4bd3eb4e6ca06..70aa60bb1e75516405afac0e83ffb65ae5ad098b 100755 (executable)
--- a/configure
+++ b/configure
@@ -2963,6 +2963,7 @@ as_fn_append ac_func_list " tzset"
 as_fn_append ac_header_list " sys/stat.h"
 as_fn_append ac_header_list " sys/time.h"
 as_fn_append ac_func_list " localtime_r"
+as_fn_append ac_func_list " lstat"
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
@@ -17211,6 +17212,23 @@ $as_echo "$gl_cv_next_unistd_h" >&6; }
 
 
 
+# Emacs does not care about lstat's behavior on files whose names end in
+# trailing slashes, so it does not use the gnulib lstat module.
+# However, Emacs does want the "#define lstat stat" in sys/stat.h
+# when lstat does not exist, so it pretends to use the lstat module
+# even though it implements only the lstat-checking part of that module.
+
+
+
+test $ac_cv_func_lstat = yes || HAVE_LSTAT=0
+
+
+
+  GNULIB_LSTAT=1
+
+
+
+
 # UNIX98 PTYs.
 for ac_func in grantpt
 do :
index 376c82c4ca471bdc0bedd383c91cc52708263b24..fa5ae960c59a201201acf960d459f199d410f36e 100644 (file)
@@ -2661,6 +2661,15 @@ gl_ASSERT_NO_GNULIB_POSIXCHECK
 gl_ASSERT_NO_GNULIB_TESTS
 gl_INIT
 
+# Emacs does not care about lstat's behavior on files whose names end in
+# trailing slashes, so it does not use the gnulib lstat module.
+# However, Emacs does want the "#define lstat stat" in sys/stat.h
+# when lstat does not exist, so it pretends to use the lstat module
+# even though it implements only the lstat-checking part of that module.
+AC_CHECK_FUNCS_ONCE([lstat])
+test $ac_cv_func_lstat = yes || HAVE_LSTAT=0
+gl_SYS_STAT_MODULE_INDICATOR([lstat])
+
 # UNIX98 PTYs.
 AC_CHECK_FUNCS(grantpt)
 
index 7aa13a45cbad710e18a6412728c0ff1d2dc059d3..6d50f4fa4fc70340e38ba3038254447543bd5a84 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Assume S_ISLNK etc. work, since gnulib supports this.
+       * etags.c (S_ISREG): Remove.
+
 2011-02-21  Paul Eggert  <eggert@cs.ucla.edu>
 
        New file "lib/min-max.h".
index 9471c0fe29fe60d05ced13d6d3c77c923ccd97a8..9ca10776259a70d8244082e817181ea19d86900c 100644 (file)
@@ -190,10 +190,6 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4";
 # define assert(x) ((void) 0)
 #endif
 
-#if !defined (S_ISREG) && defined (S_IFREG)
-# define S_ISREG(m)    (((m) & S_IFMT) == S_IFREG)
-#endif
-
 #ifdef NO_LONG_OPTIONS         /* define this if you don't have GNU getopt */
 # define NO_LONG_OPTIONS TRUE
 # define getopt_long(argc,argv,optstr,lopts,lind) getopt (argc, argv, optstr)
@@ -5327,7 +5323,7 @@ prolog_skip_comment (linebuffer *plb, FILE *inf)
  */
 static int
 prolog_pr (char *s, char *last)
-             
+
                                /* Name of last clause. */
 {
   int pos;
@@ -5484,7 +5480,7 @@ Erlang_functions (FILE *inf)
  */
 static int
 erlang_func (char *s, char *last)
-             
+
                                /* Name of last clause. */
 {
   int pos;
index b16587bbddc9c3b2e3dc931983cf2f5fe37c3a95..48e7b1d6507c8bca181f14171eb00cfc2d4455eb 100644 (file)
@@ -24,7 +24,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. --makefile-name=gnulib.mk --no-libtool --macro-prefix=gl --no-vc-files crypto/md5 dtoastr filemode getloadavg getopt-gnu ignore-value mktime strftime
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. --makefile-name=gnulib.mk --no-libtool --macro-prefix=gl --no-vc-files crypto/md5 dtoastr filemode getloadavg getopt-gnu ignore-value mktime strftime sys_stat
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
index bdba2e9c1bbcc484a82494ac08d7b256d2b54929..32bf5714d17b855f8eedc361efd7782c921135e5 100644 (file)
@@ -9,7 +9,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. --makefile-name=gnulib.mk --no-libtool --macro-prefix=gl --no-vc-files crypto/md5 dtoastr filemode getloadavg getopt-gnu ignore-value mktime strftime
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. --makefile-name=gnulib.mk --no-libtool --macro-prefix=gl --no-vc-files crypto/md5 dtoastr filemode getloadavg getopt-gnu ignore-value mktime strftime sys_stat
 
 
 MOSTLYCLEANFILES += core *.stackdump
index 9713a4a6ed54db65c973385313dfa365410deaae..d0208d507b5752fec7defee2b47b710001142190 100644 (file)
@@ -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
index 9c23fb583fae743cddf85f486bbcd30c9abe156c..ded8c6b292aaab947499a49dc99cfbf9907f635e 100644 (file)
@@ -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
 
index b01ce8d4d8fb161eebc927fc8467ae9280ee239d..92c12846558fbd5db5bee858bb8c2922889a352a 100644 (file)
@@ -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 */
 }
 \f
 Lisp_Object
index 2ccad83f6685ba3aac8bd54cfd05a00ed1b45a30..0225e0bf3a90467e4f7a76a4c4d6f23873e3bc40 100644 (file)
@@ -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
 }
 \f
@@ -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)
index 8e18bb7b6507f3a097cc29e9cb22b0b2e7e28664..7f8f0e1c0fb238703ed0c5ec9d1826e07d687e27 100644 (file)
@@ -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
index 855869cd90de4b57c0341f9a9d09e2009e5b4ec4..e594a36387314c7928ef794fe2de63ca0f86d518 100644 (file)
@@ -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) ;
 
index 01714900752806e522c9408507c200f8fed22d59..9fb3f3474fb0ba446863583580f5aa2ce7e9a878 100644 (file)
@@ -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 */
-