]> code.delx.au - gnu-emacs/blobdiff - src/filelock.c
(Fnext_property_change): Properly offset interval
[gnu-emacs] / src / filelock.c
index d8e30acc9d58115037bdba3cb232fd75247a9f9c..6876cbdb5c1991af5cd72066f031451e062bbbfd 100644 (file)
@@ -41,6 +41,8 @@ Boston, MA 02111-1307, USA.  */
 
 #include "lisp.h"
 #include "buffer.h"
+#include "charset.h"
+#include "coding.h"
 
 #include <time.h>
 #include <errno.h>
@@ -102,13 +104,27 @@ get_boot_time ()
     return boot_time;
 
   utmpname ("/var/log/wtmp");
-  ut.ut_type = BOOT_TIME;
-  utp = getutid (&ut);
+  setutent ();
+  boot_time = 1;
+  while (1)
+    {
+      /* Find the next reboot record.  */
+      ut.ut_type = BOOT_TIME;
+      utp = getutid (&ut);
+      if (! utp)
+       break;
+      /* Compare reboot times and use the newest one.  */
+      if (utp->ut_time > boot_time)
+       boot_time = utp->ut_time;
+      /* Advance on element in the file
+        so that getutid won't repeat the same one.  */
+      utp = getutent ();
+      if (! utp)
+       break;
+    }
   endutent ();
 
-  if (!utp)
-    return boot_time = 1;
-  return boot_time = utp->ut_time;
+  return boot_time;
 #else
   return 0;
 #endif
@@ -368,23 +384,24 @@ lock_if_free (clasher, lfname)
 
 void
 lock_file (fn)
-    register Lisp_Object fn;
+     Lisp_Object fn;
 {
-  register Lisp_Object attack, orig_fn;
+  register Lisp_Object attack, orig_fn, encoded_fn;
   register char *lfname, *locker;
   lock_info_type lock_info;
 
   orig_fn = fn;
   fn = Fexpand_file_name (fn, Qnil);
+  encoded_fn = ENCODE_FILE (fn);
 
   /* Create the name of the lock-file for file fn */
-  MAKE_LOCK_NAME (lfname, fn);
+  MAKE_LOCK_NAME (lfname, encoded_fn);
 
   /* See if this file is visited and has changed on disk since it was
      visited.  */
   {
     register Lisp_Object subject_buf;
-    struct gcpro1;
+    struct gcpro gcpro1;
 
     subject_buf = get_truename_buffer (orig_fn);
     GCPRO1 (fn);
@@ -426,6 +443,7 @@ unlock_file (fn)
   register char *lfname;
 
   fn = Fexpand_file_name (fn, Qnil);
+  fn = ENCODE_FILE (fn);
 
   MAKE_LOCK_NAME (lfname, fn);