Re-add --with-lockdir=DIR configure option
[mmh] / sbr / lock_file.c
index e065c93..7309c86 100644 (file)
 ** 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? */
@@ -106,12 +102,12 @@ static int lkopen_dot(char *, int, mode_t);
 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,
@@ -336,7 +332,7 @@ lkopen_kernel(char *file, int access, mode_t mode)
 
                j = errno;
                close(fd);
-               sleep(5);
+               sleep(1);
        }
 
        close(fd);
@@ -388,7 +384,7 @@ lkopen_dot(char *file, int access, mode_t mode)
                                if (stat(lkinfo.curlock, &st) == -1) {
                                        if (i++ > 5)
                                                return -1;
-                                       sleep(5);
+                                       sleep(1);
                                } else {
                                        time_t curtime;
                                        i = 0;
@@ -401,7 +397,7 @@ lkopen_dot(char *file, int access, mode_t mode)
                                        if (curtime > st.st_ctime + RSECS)
                                                unlink(lkinfo.curlock);
                                        else
-                                               sleep(5);
+                                               sleep(1);
                                }
                                lockname(file, &lkinfo, 1);
                        }
@@ -437,18 +433,10 @@ lockit(struct lockinfo *li)
        curlock = li->curlock;
        tmplock = li->tmplock;
 
-#ifdef HAVE_MKSTEMP
-       if ((fd = mkstemp(tmplock)) == -1)
+       if ((fd = mkstemp(tmplock)) == -1) {
+               advise(NULL, "unable to create temporary file in %s", tmplock);
                return -1;
-#else
-       if (mktemp(tmplock) == NULL)
-               return -1;
-       if (unlink(tmplock) == -1 && errno != ENOENT)
-               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 */
@@ -585,16 +573,12 @@ timerOFF(int fd)
 ** 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;