]> git.eshelyaron.com Git - emacs.git/commitdiff
Minor fixes for recent openp changes.
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 18 Dec 2013 20:36:50 +0000 (12:36 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 18 Dec 2013 20:36:50 +0000 (12:36 -0800)
* lisp.h (GCPRO7): New macro.
* lread.c (openp): Use bool for boolean; all callers changed.
Protect save_string from GC.  Don't assume that file descriptors
are nonzero.  Redo save_mtime comparison to avoid bogus GCC
warning about uninitialized variable.

src/ChangeLog
src/callproc.c
src/charset.c
src/emacs.c
src/image.c
src/lisp.h
src/lread.c
src/process.c
src/sound.c

index 74fd2bc35b7641b1497cb20462c38b6343d442ea..eaec5dd97dcbbe7976e64527e5adb0faac38cbce 100644 (file)
@@ -1,3 +1,12 @@
+2013-12-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Minor fixes for recent openp changes.
+       * lisp.h (GCPRO7): New macro.
+       * lread.c (openp): Use bool for boolean; all callers changed.
+       Protect save_string from GC.  Don't assume that file descriptors
+       are nonzero.  Redo save_mtime comparison to avoid bogus GCC
+       warning about uninitialized variable.
+
 2013-12-18  Eli Zaretskii  <eliz@gnu.org>
 
        * w32fns.c (emacs_abort): Use intptr_t as argument of
index 0d30fe549ea1caa763bed399d2df251c37b5a4c1..3b383a7fbef77ab9520d65e32f9d8051e708546a 100644 (file)
@@ -465,7 +465,8 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
     int ok;
 
     GCPRO3 (buffer, current_dir, error_file);
-    ok = openp (Vexec_path, args[0], Vexec_suffixes, &path, make_number (X_OK), 0);
+    ok = openp (Vexec_path, args[0], Vexec_suffixes, &path,
+               make_number (X_OK), false);
     UNGCPRO;
     if (ok < 0)
       report_file_error ("Searching for program", args[0]);
index 1e14475f111cbe775667e54d33c1a86646c3d9df..af3a6cd11aee2c96cb722321d51bcbac5cf53f7d 100644 (file)
@@ -495,7 +495,7 @@ load_charset_map_from_file (struct charset *charset, Lisp_Object mapfile,
   count = SPECPDL_INDEX ();
   record_unwind_protect_nothing ();
   specbind (Qfile_name_handler_alist, Qnil);
-  fd = openp (Vcharset_map_path, mapfile, suffixes, NULL, Qnil, 0);
+  fd = openp (Vcharset_map_path, mapfile, suffixes, NULL, Qnil, false);
   fp = fd < 0 ? 0 : fdopen (fd, "r");
   if (!fp)
     {
index 791e0524e1533bd80998cdf82e5733ec0cb72781..35e8ff330c9ea26d5dfe2356c17f5a4110787e69 100644 (file)
@@ -424,7 +424,7 @@ init_cmdargs (int argc, char **argv, int skip_args, char *original_pwd)
     {
       Lisp_Object found;
       int yes = openp (Vexec_path, Vinvocation_name,
-                      Vexec_suffixes, &found, make_number (X_OK), 0);
+                      Vexec_suffixes, &found, make_number (X_OK), false);
       if (yes == 1)
        {
          /* Add /: to the front of the name
index 85f29329bd307ff61c434a966a94b10f7bb6ff7e..2a216b85dec87bb7443dbdb5e4ae6ca8b19a7dbb 100644 (file)
@@ -327,7 +327,9 @@ x_create_bitmap_from_file (struct frame *f, Lisp_Object file)
     }
 
   /* Search bitmap-file-path for the file, if appropriate.  */
-  if (openp (Vx_bitmap_file_path, file, Qnil, &found, make_number (R_OK), 0) < 0)
+  if (openp (Vx_bitmap_file_path, file, Qnil, &found,
+            make_number (R_OK), false)
+      < 0)
     return -1;
 
   filename = SSDATA (found);
@@ -2242,7 +2244,7 @@ x_find_image_file (Lisp_Object file)
                       Vx_bitmap_file_path);
 
   /* Try to find FILE in data-directory/images, then x-bitmap-file-path.  */
-  fd = openp (search_path, file, Qnil, &file_found, Qnil, 0);
+  fd = openp (search_path, file, Qnil, &file_found, Qnil, false);
 
   if (fd == -1)
     file_found = Qnil;
index e53d25b3fcb9e689572584f4cf2caeda78945f00..bb1c38e1bf65eb9635f6b670ae4434a9ec41baf2 100644 (file)
@@ -3032,6 +3032,7 @@ struct gcpro
 #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \
   ((void) gcpro6, (void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, \
    (void) gcpro1)
+#define GCPRO7(a, b, c, d, e, f, g) (GCPRO6 (a, b, c, d, e, f), (void) gcpro7)
 #define UNGCPRO ((void) 0)
 
 #else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
@@ -3077,6 +3078,16 @@ struct gcpro
   gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \
   gcprolist = &gcpro6; }
 
+#define GCPRO7(a, b, c, d, e, f, g)                            \
+ {gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;        \
+  gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;  \
+  gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;  \
+  gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;  \
+  gcpro5.next = &gcpro4; gcpro5.var = &(e); gcpro5.nvars = 1;  \
+  gcpro6.next = &gcpro5; gcpro6.var = &(f); gcpro6.nvars = 1;  \
+  gcpro7.next = &gcpro6; gcpro7.var = &(g); gcpro7.nvars = 1;  \
+  gcprolist = &gcpro7; }
+
 #define UNGCPRO (gcprolist = gcpro1.next)
 
 #else
@@ -3133,6 +3144,18 @@ extern int gcpro_level;
   gcpro6.level = gcpro_level++; \
   gcprolist = &gcpro6; }
 
+#define GCPRO7(a, b, c, d, e, f, g)                                    \
+ {gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;                \
+  gcpro1.level = gcpro_level;                                          \
+  gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;          \
+  gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;          \
+  gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;          \
+  gcpro5.next = &gcpro4; gcpro5.var = &(e); gcpro5.nvars = 1;          \
+  gcpro6.next = &gcpro5; gcpro6.var = &(f); gcpro6.nvars = 1;          \
+  gcpro7.next = &gcpro6; gcpro7.var = &(g); gcpro7.nvars = 1;          \
+  gcpro7.level = gcpro_level++;                                                \
+  gcprolist = &gcpro7; }
+
 #define UNGCPRO                                        \
   (--gcpro_level != gcpro1.level               \
    ? emacs_abort ()                            \
@@ -3791,7 +3814,7 @@ LOADHIST_ATTACH (Lisp_Object x)
     Vcurrent_load_list = Fcons (x, Vcurrent_load_list);
 }
 extern int openp (Lisp_Object, Lisp_Object, Lisp_Object,
-                  Lisp_Object *, Lisp_Object, int);
+                  Lisp_Object *, Lisp_Object, bool);
 extern Lisp_Object string_to_number (char const *, int, bool);
 extern void map_obarray (Lisp_Object, void (*) (Lisp_Object, Lisp_Object),
                          Lisp_Object);
index e0b9533fa600e7d44c418a7b303a89d4e6e39737..2042d16592928f5d2058dbd2d3ab5f1ef3134d9c 100644 (file)
@@ -1420,7 +1420,7 @@ directories, make sure the PREDICATE function returns `dir-ok' for them.  */)
   (Lisp_Object filename, Lisp_Object path, Lisp_Object suffixes, Lisp_Object predicate)
 {
   Lisp_Object file;
-  int fd = openp (path, filename, suffixes, &file, predicate, 0);
+  int fd = openp (path, filename, suffixes, &file, predicate, false);
   if (NILP (predicate) && fd >= 0)
     emacs_close (fd);
   return file;
@@ -1455,20 +1455,20 @@ static Lisp_Object Qdir_ok;
 
 int
 openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes,
-       Lisp_Object *storeptr, Lisp_Object predicate, int newer)
+       Lisp_Object *storeptr, Lisp_Object predicate, bool newer)
 {
   ptrdiff_t fn_size = 100;
   char buf[100];
   char *fn = buf;
-  bool absolute = 0;
+  bool absolute;
   ptrdiff_t want_length;
   Lisp_Object filename;
-  struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6;
+  struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6, gcpro7;
   Lisp_Object string, tail, encoded_fn, save_string;
   ptrdiff_t max_suffix_len = 0;
   int last_errno = ENOENT;
-  struct timespec save_mtime;
-  int save_fd = 0;
+  struct timespec save_mtime = make_timespec (TYPE_MINIMUM (time_t), -1);
+  int save_fd = -1;
 
   CHECK_STRING (str);
 
@@ -1479,14 +1479,13 @@ openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes,
                            SBYTES (XCAR (tail)));
     }
 
-  string = filename = encoded_fn = Qnil;
-  GCPRO6 (str, string, filename, path, suffixes, encoded_fn);
+  string = filename = encoded_fn = save_string = Qnil;
+  GCPRO7 (str, string, save_string, filename, path, suffixes, encoded_fn);
 
   if (storeptr)
     *storeptr = Qnil;
 
-  if (complete_filename_p (str))
-    absolute = 1;
+  absolute = complete_filename_p (str);
 
   for (; CONSP (path); path = XCDR (path))
     {
@@ -1556,13 +1555,13 @@ openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes,
                {
                  Lisp_Object tmp = call1 (predicate, string);
                  if (NILP (tmp))
-                   exists = 0;
+                   exists = false;
                  else if (EQ (tmp, Qdir_ok)
                           || NILP (Ffile_directory_p (string)))
-                   exists = 1;
+                   exists = true;
                  else
                    {
-                     exists = 0;
+                     exists = false;
                      last_errno = EISDIR;
                    }
                }
@@ -1628,14 +1627,16 @@ openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes,
                     {
                       struct timespec mtime = get_stat_mtime (&st);
 
-                      if (!save_fd || timespec_cmp (save_mtime, mtime) < 0)
+                     if (timespec_cmp (mtime, save_mtime) <= 0)
+                       emacs_close (fd);
+                     else
                         {
-                          if (save_fd) emacs_close (save_fd);
+                         if (0 <= save_fd)
+                           emacs_close (save_fd);
                           save_fd = fd;
                           save_mtime = mtime;
                           save_string = string;
                         }
-                      else emacs_close (fd);
                     }
                   else
                     {
@@ -1648,7 +1649,7 @@ openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes,
                }
 
               /* No more suffixes.  Return the newest.  */
-              if (newer && save_fd && ! CONSP (XCDR (tail)))
+             if (0 <= save_fd && ! CONSP (XCDR (tail)))
                 {
                   if (storeptr)
                     *storeptr = save_string;
index bef1e6d68f3339fe184c68e2380ec1d9e91a05b5..598ed8528f32626f15a5f1fb6cef24e1d7477142 100644 (file)
@@ -1530,7 +1530,8 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS)  */)
 
          tem = Qnil;
          GCPRO4 (name, program, buffer, current_dir);
-         openp (Vexec_path, program, Vexec_suffixes, &tem, make_number (X_OK), 0);
+         openp (Vexec_path, program, Vexec_suffixes, &tem,
+                make_number (X_OK), false);
          UNGCPRO;
          if (NILP (tem))
            report_file_error ("Searching for program", program);
index e84f7415cd33ba88b20fba0098f80c37acc9b2a0..0cbbcda611c87250be58f213cb17b49c1f250dbe 100644 (file)
@@ -1332,7 +1332,7 @@ Internal use only, use `play-sound' instead.  */)
     {
       /* Open the sound file.  */
       current_sound->fd = openp (list1 (Vdata_directory),
-                                attrs[SOUND_FILE], Qnil, &file, Qnil, 0);
+                                attrs[SOUND_FILE], Qnil, &file, Qnil, false);
       if (current_sound->fd < 0)
        sound_perror ("Could not open sound file");