X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/8a14191c0a0ad15bb8f35b49748c75c1e0a8c2f4..2fc70e8bf64ead869fce76abb74f04bf1af94923:/sbr/lock_file.c diff --git a/sbr/lock_file.c b/sbr/lock_file.c index cac80c1b..8b0a1215 100644 --- a/sbr/lock_file.c +++ b/sbr/lock_file.c @@ -1,6 +1,4 @@ - -/* - * lock.c -- routines to lock/unlock files +/* lock_file.c -- routines to lock/unlock files * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -19,6 +17,8 @@ #include #include #include +#include "lock_file.h" +#include "m_mktemp.h" #ifdef HAVE_SYS_TIME_H # include @@ -73,15 +73,9 @@ struct lock { enum locktype { FCNTL_LOCKING, FLOCK_LOCKING, LOCKF_LOCKING, DOT_LOCKING }; -/* - * Flags to indicate whether we've initialized the lock types, and - * our saved lock types - */ -static int datalockinit = 0; -static int spoollockinit = 0; +/* Our saved lock types. */ static enum locktype datalocktype, spoollocktype; - /* top of list containing all open locks */ static struct lock *l_top = NULL; @@ -117,17 +111,18 @@ static int lockit (struct lockinfo *); int lkopendata(const char *file, int access, mode_t mode, int *failed_to_lock) { - if (! datalockinit) { - char *cp = context_find("datalocking"); + static bool deja_vu; - if (cp) { - datalocktype = init_locktype(cp); + if (!deja_vu) { + char *dl; + + deja_vu = true; + if ((dl = context_find("datalocking"))) { + datalocktype = init_locktype(dl); } else { /* We default to fcntl locking for data files */ datalocktype = FCNTL_LOCKING; } - - datalockinit = 1; } return lkopen(file, access, mode, datalocktype, failed_to_lock); @@ -140,10 +135,11 @@ lkopendata(const char *file, int access, mode_t mode, int *failed_to_lock) int lkopenspool(const char *file, int access, mode_t mode, int *failed_to_lock) { - if (! spoollockinit) { - spoollocktype = init_locktype(spoollocking); + static bool deja_vu; - spoollockinit = 1; + if (!deja_vu) { + deja_vu = true; + spoollocktype = init_locktype(spoollocking); } return lkopen(file, access, mode, spoollocktype, failed_to_lock); @@ -632,7 +628,9 @@ lockname (const char *file, struct lockinfo *li, int isnewlock) snprintf (bp, sizeof(li->curlock) - bplen, "%s.lock", cp); -#if !defined(HAVE_LIBLOCKFILE) +#if defined(HAVE_LIBLOCKFILE) + NMH_UNUSED(isnewlock); +#else /* * If this is for a new lock, create a name for * the temporary lock file for lockit()