X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/6e66744d4c4bd94bb7e34f4243de0213334a31c5..c23c965bb9d0a4bcc1b6158833ff99aa20fd53e9:/src/filelock.c?ds=sidebyside
diff --git a/src/filelock.c b/src/filelock.c
index f857c48814..bc3a6209a8 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -1,7 +1,7 @@
/* Lock files for editing.
-Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2014
- Free Software Foundation, Inc.
+Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2016 Free Software
+Foundation, Inc.
Author: Richard King
(according to authors.el)
@@ -10,8 +10,8 @@ This file is part of GNU Emacs.
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -45,10 +45,8 @@ along with GNU Emacs. If not, see . */
#include
#include "lisp.h"
-#include "character.h"
#include "buffer.h"
#include "coding.h"
-#include "systime.h"
#ifdef WINDOWSNT
#include
#include /* for fcntl */
@@ -209,8 +207,6 @@ get_boot_time (void)
WTMP_FILE, counter);
if (! NILP (Ffile_exists_p (tempname)))
{
- Lisp_Object args[6];
-
/* The utmp functions on mescaline.gnu.org accept only
file names up to 8 characters long. Choose a 2
character long prefix, and call make_temp_file with
@@ -219,13 +215,9 @@ get_boot_time (void)
filename = Fexpand_file_name (build_string ("wt"),
Vtemporary_file_directory);
filename = make_temp_name (filename, 1);
- args[0] = build_string ("gzip");
- args[1] = Qnil;
- args[2] = list2 (QCfile, filename);
- args[3] = Qnil;
- args[4] = build_string ("-cd");
- args[5] = tempname;
- Fcall_process (6, args);
+ CALLN (Fcall_process, build_string ("gzip"), Qnil,
+ list2 (QCfile, filename), Qnil,
+ build_string ("-cd"), tempname);
delete_flag = 1;
}
}
@@ -592,9 +584,10 @@ current_lock_owner (lock_info_type *owner, char *lfname)
return -1;
/* On current host? */
- if (STRINGP (Vsystem_name)
- && dot - (at + 1) == SBYTES (Vsystem_name)
- && memcmp (at + 1, SSDATA (Vsystem_name), SBYTES (Vsystem_name)) == 0)
+ Lisp_Object system_name = Fsystem_name ();
+ if (STRINGP (system_name)
+ && dot - (at + 1) == SBYTES (system_name)
+ && memcmp (at + 1, SSDATA (system_name), SBYTES (system_name)) == 0)
{
if (pid == getpid ())
ret = 2; /* We own it. */
@@ -671,13 +664,8 @@ lock_file (Lisp_Object fn)
Lisp_Object orig_fn, encoded_fn;
char *lfname;
lock_info_type lock_info;
- struct gcpro gcpro1;
USE_SAFE_ALLOCA;
- /* Don't do locking if the user has opted out. */
- if (! create_lockfiles)
- return;
-
/* Don't do locking while dumping Emacs.
Uncompressing wtmp files uses call-process, which does not work
in an uninitialized Emacs. */
@@ -685,7 +673,6 @@ lock_file (Lisp_Object fn)
return;
orig_fn = fn;
- GCPRO1 (fn);
fn = Fexpand_file_name (fn, Qnil);
#ifdef WINDOWSNT
/* Ensure we have only '/' separators, to avoid problems with
@@ -695,9 +682,6 @@ lock_file (Lisp_Object fn)
#endif
encoded_fn = ENCODE_FILE (fn);
- /* Create the name of the lock-file for file fn */
- MAKE_LOCK_NAME (lfname, encoded_fn);
-
/* See if this file is visited and has changed on disk since it was
visited. */
{
@@ -712,27 +696,33 @@ lock_file (Lisp_Object fn)
}
- /* Try to lock the lock. */
- if (0 < lock_if_free (&lock_info, lfname))
+ /* Don't do locking if the user has opted out. */
+ if (create_lockfiles)
{
- /* Someone else has the lock. Consider breaking it. */
- Lisp_Object attack;
- char *dot = lock_info.dot;
- ptrdiff_t pidlen = lock_info.colon - (dot + 1);
- static char const replacement[] = " (pid ";
- int replacementlen = sizeof replacement - 1;
- memmove (dot + replacementlen, dot + 1, pidlen);
- strcpy (dot + replacementlen + pidlen, ")");
- memcpy (dot, replacement, replacementlen);
- attack = call2 (intern ("ask-user-about-lock"), fn,
- build_string (lock_info.user));
- /* Take the lock if the user said so. */
- if (!NILP (attack))
- lock_file_1 (lfname, 1);
- }
- UNGCPRO;
- SAFE_FREE ();
+ /* Create the name of the lock-file for file fn */
+ MAKE_LOCK_NAME (lfname, encoded_fn);
+
+ /* Try to lock the lock. */
+ if (0 < lock_if_free (&lock_info, lfname))
+ {
+ /* Someone else has the lock. Consider breaking it. */
+ Lisp_Object attack;
+ char *dot = lock_info.dot;
+ ptrdiff_t pidlen = lock_info.colon - (dot + 1);
+ static char const replacement[] = " (pid ";
+ int replacementlen = sizeof replacement - 1;
+ memmove (dot + replacementlen, dot + 1, pidlen);
+ strcpy (dot + replacementlen + pidlen, ")");
+ memcpy (dot, replacement, replacementlen);
+ attack = call2 (intern ("ask-user-about-lock"), fn,
+ build_string (lock_info.user));
+ /* Take the lock if the user said so. */
+ if (!NILP (attack))
+ lock_file_1 (lfname, 1);
+ }
+ SAFE_FREE ();
+ }
}
void