** Ruud de Rooij <ruud@debian.org> Sun, 28 Mar 1999 15:34:03 +0200
*/
+#include <unistd.h>
#include <h/mh.h>
#include <h/signals.h>
#include <h/utils.h>
+#include <sys/stat.h>
-#ifdef TIME_WITH_SYS_TIME
+#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
-# include <time.h>
-#else
-# ifdef TM_IN_SYS_TIME
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
#endif
+#include <time.h>
-#ifdef HAVE_ERRNO_H
-# include <errno.h>
-#endif
+#include <errno.h>
#ifdef HAVE_FCNTL_H
# include <fcntl.h>
#include <lockfile.h>
#endif
-#ifdef LOCKDIR
+#ifdef DOT_LOCKING
+# ifdef LOCKDIR
char *lockdir = LOCKDIR;
+# endif
#endif
/* Are we using any kernel locking? */
static void lockname(char *, struct lockinfo *, int);
static void timerON(char *, int);
static void timerOFF(int);
-static RETSIGTYPE alrmser(int);
-#endif
+static void alrmser(int);
#if !defined(HAVE_LIBLOCKFILE)
static int lockit(struct lockinfo *);
#endif
+#endif
/*
** Base routine to open and lock a file,
j = errno;
close(fd);
- sleep(5);
+ sleep(1);
}
close(fd);
if (stat(lkinfo.curlock, &st) == -1) {
if (i++ > 5)
return -1;
- sleep(5);
+ sleep(1);
} else {
time_t curtime;
i = 0;
if (curtime > st.st_ctime + RSECS)
unlink(lkinfo.curlock);
else
- sleep(5);
+ sleep(1);
}
lockname(file, &lkinfo, 1);
}
curlock = li->curlock;
tmplock = li->tmplock;
-#ifdef HAVE_MKSTEMP
- if ((fd = mkstemp(tmplock)) == -1)
- return -1;
-#else
- if (mktemp(tmplock) == NULL)
- return -1;
- if (unlink(tmplock) == -1 && errno != ENOENT)
+ if ((fd = mkstemp(tmplock)) == -1) {
+ advise(NULL, "unable to create temporary file in %s", tmplock);
return -1;
- /* create the temporary lock file */
- if ((fd = creat(tmplock, 0600)) == -1)
- return -1;
-#endif
+ }
#if 0
/* write our process id into lock file */
int bplen, tmplen;
char *bp, *cp;
-#if 0
- struct stat st;
-#endif
-
if ((cp = strrchr(file, '/')) == NULL || *++cp == 0)
cp = file;
}
#endif
-#if 0
- /*
- ** mmdf style dot locking. Currently not supported.
- ** If we start supporting mmdf style dot locking,
- ** we will need to change the return value of lockname
- */
- if (stat(file, &st) == -1)
- return -1;
-
- snprintf(bp, sizeof(li->curlock) - bplen, "LCK%05d.%05d",
- st.st_dev, st.st_ino);
-#endif
-
snprintf(bp, sizeof(li->curlock) - bplen, "%s.lock", cp);
#if !defined(HAVE_LIBLOCKFILE)
** lockfiles, so another command doesn't remove them.
*/
-static RETSIGTYPE
+static void
alrmser(int sig)
{
char *lockfile;
struct lock *lp;
-#ifndef RELIABLE_SIGNALS
- SIGNAL(SIGALRM, alrmser);
-#endif
-
/* update the ctime of all the lock files */
for (lp = l_top; lp; lp = lp->l_next) {
lockfile = lp->l_lock;