/* Lock files for editing.
Copyright (C) 1985, 1986, 1987, 1993, 1994, 1996, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
This file is part of GNU Emacs.
#endif
#include <sys/file.h>
-#ifdef HAVE_FCNTL_H
#include <fcntl.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#endif
#ifdef __FreeBSD__
#include <sys/sysctl.h>
#endif /* __FreeBSD__ */
#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
#include "lisp.h"
#include "buffer.h"
#include "coding.h"
#include "systime.h"
-/* The directory for writing temporary files. */
-
-Lisp_Object Vtemporary_file_directory;
-
#ifdef CLASH_DETECTION
#ifdef HAVE_UTMP_H
static time_t boot_time;
static int boot_time_initialized;
-extern Lisp_Object Vshell_file_name;
-
#ifdef BOOT_TIME
-static void get_boot_time_1 P_ ((char *, int));
+static void get_boot_time_1 (const char *, int);
#endif
static time_t
-get_boot_time ()
+get_boot_time (void)
{
#if defined (BOOT_TIME)
int counter;
Success is indicated by setting BOOT_TIME to a larger value. */
void
-get_boot_time_1 (filename, newest)
- char *filename;
- int newest;
+get_boot_time_1 (const char *filename, int newest)
{
struct utmp ut, *utp;
int desc;
fill_in_lock_file_name (lock, (file)))
static void
-fill_in_lock_file_name (lockfile, fn)
- register char *lockfile;
- register Lisp_Object fn;
+fill_in_lock_file_name (register char *lockfile, register Lisp_Object fn)
{
register char *p;
struct stat st;
Return 1 if successful, 0 if not. */
static int
-lock_file_1 (lfname, force)
- char *lfname;
- int force;
+lock_file_1 (char *lfname, int force)
{
register int err;
time_t boot_time;
- char *user_name;
- char *host_name;
+ const char *user_name;
+ const char *host_name;
char *lock_info_str;
/* Call this first because it can GC. */
boot_time = get_boot_time ();
if (STRINGP (Fuser_login_name (Qnil)))
- user_name = (char *)SDATA (Fuser_login_name (Qnil));
+ user_name = SSDATA (Fuser_login_name (Qnil));
else
user_name = "";
if (STRINGP (Fsystem_name ()))
- host_name = (char *)SDATA (Fsystem_name ());
+ host_name = SSDATA (Fsystem_name ());
else
host_name = "";
lock_info_str = (char *)alloca (strlen (user_name) + strlen (host_name)
/* Return 1 if times A and B are no more than one second apart. */
int
-within_one_second (a, b)
- time_t a, b;
+within_one_second (time_t a, time_t b)
{
return (a - b >= -1 && a - b <= 1);
}
or -1 if something is wrong with the locking mechanism. */
static int
-current_lock_owner (owner, lfname)
- lock_info_type *owner;
- char *lfname;
+current_lock_owner (lock_info_type *owner, char *lfname)
{
-#ifndef index
- extern char *rindex (), *index ();
-#endif
int len, ret;
int local_owner = 0;
char *at, *dot, *colon;
/* Parse USER@HOST.PID:BOOT_TIME. If can't parse, return -1. */
/* The USER is everything before the last @. */
- at = rindex (lfinfo, '@');
- dot = rindex (lfinfo, '.');
+ at = strrchr (lfinfo, '@');
+ dot = strrchr (lfinfo, '.');
if (!at || !dot)
{
xfree (lfinfo);
Return -1 if cannot lock for any other reason. */
static int
-lock_if_free (clasher, lfname)
- lock_info_type *clasher;
- register char *lfname;
+lock_if_free (lock_info_type *clasher, register char *lfname)
{
while (lock_file_1 (lfname, 0) == 0)
{
take away the lock, or return nil meaning ignore the lock. */
void
-lock_file (fn)
- Lisp_Object fn;
+lock_file (Lisp_Object fn)
{
register Lisp_Object attack, orig_fn, encoded_fn;
register char *lfname, *locker;
}
void
-unlock_file (fn)
- register Lisp_Object fn;
+unlock_file (register Lisp_Object fn)
{
register char *lfname;
}
void
-unlock_all_files ()
+unlock_all_files (void)
{
register Lisp_Object tail;
register struct buffer *b;
doc: /* Lock FILE, if current buffer is modified.
FILE defaults to current buffer's visited file,
or else nothing is done if current buffer isn't visiting a file. */)
- (file)
- Lisp_Object file;
+ (Lisp_Object file)
{
if (NILP (file))
file = current_buffer->file_truename;
doc: /* Unlock the file visited in the current buffer.
If the buffer is not modified, this does nothing because the file
should not be locked in that case. */)
- ()
+ (void)
{
if (SAVE_MODIFF < MODIFF
&& STRINGP (current_buffer->file_truename))
/* Unlock the file visited in buffer BUFFER. */
void
-unlock_buffer (buffer)
- struct buffer *buffer;
+unlock_buffer (struct buffer *buffer)
{
if (BUF_SAVE_MODIFF (buffer) < BUF_MODIFF (buffer)
&& STRINGP (buffer->file_truename))
doc: /* Return a value indicating whether FILENAME is locked.
The value is nil if the FILENAME is not locked,
t if it is locked by you, else a string saying which user has locked it. */)
- (filename)
- Lisp_Object filename;
+ (Lisp_Object filename)
{
Lisp_Object ret;
register char *lfname;
/* Initialization functions. */
void
-init_filelock ()
+init_filelock (void)
{
boot_time = 0;
boot_time_initialized = 0;
}
+#endif /* CLASH_DETECTION */
+
void
-syms_of_filelock ()
+syms_of_filelock (void)
{
- DEFVAR_LISP ("temporary-file-directory", &Vtemporary_file_directory,
+ DEFVAR_LISP ("temporary-file-directory", Vtemporary_file_directory,
doc: /* The directory for writing temporary files. */);
Vtemporary_file_directory = Qnil;
+#ifdef CLASH_DETECTION
defsubr (&Sunlock_buffer);
defsubr (&Slock_buffer);
defsubr (&Sfile_locked_p);
+#endif
}
-
-#endif /* CLASH_DETECTION */
-
-/* arch-tag: e062676d-50b2-4be0-ab96-197c81b181a1
- (do not change this comment) */