diff options
Diffstat (limited to 'src/lock.c')
-rw-r--r-- | src/lock.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -7,17 +7,20 @@ #include <signal.h> #include <stdlib.h> #include <string.h> +#include <inttypes.h> #include <libdaemon/dlog.h> #include "lock.h" +#include "util.h" +#include "main.h" /* Where do lockfiles reside? */ #define LOCK_PATH "/var/lock" static const char *lockfile(const char *dev) { static char lockfile[PATH_MAX]; - snprintf(lockfile, sizeof(lockfile), "%s/LCK..%s", LOCK_PATH, basename(dev)); + snprintf(lockfile, sizeof(lockfile), "%s/LCK..%s", LOCK_PATH, basename((char*) dev)); return lockfile; } @@ -30,7 +33,7 @@ static const char *tempfile(const char *path) { int device_lock(const char *dev) { struct stat st; int fd; - char *path, *temp; + const char *path, *temp; char buf[100]; if (stat(LOCK_PATH, &st) != 0 || !S_ISDIR(st.st_mode)) { @@ -57,7 +60,7 @@ int device_lock(const char *dev) { close(fd); if (n < 0) { - close(fd) + close(fd); daemon_log(LOG_ERR, "Failed to read from lock file: %s", strerror(errno)); return -1; } @@ -68,13 +71,15 @@ int device_lock(const char *dev) { if (n == 4) pid = (pid_t) *((uint32_t*) buf); else { + unsigned long v; buf[n] = 0; - sscanf(buf, "%lu", &pid); + sscanf(buf, "%lu", &v); + pid = (pid_t) v; } if (pid > 0) { if (kill(pid, 0) < 0 && errno == ESRCH) { - daemon_log(LOG_WARN, "Lockfile is stale. Overriding it."); + daemon_log(LOG_WARNING, "Lockfile is stale. Overriding it."); /* Yes, here is a race condition */ unlink(path); } else @@ -90,7 +95,7 @@ int device_lock(const char *dev) { snprintf(buf, sizeof(buf), "%10lu %s %.20s\n", (unsigned long) getpid(), appname, username); if (loop_write(fd, buf, strlen(buf)) < 0) { - daemon_log(LOG_ERR, "Failed to write to temporary lock file: %s", sterror(errno)); + daemon_log(LOG_ERR, "Failed to write to temporary lock file: %s", strerror(errno)); close(fd); return -1; } @@ -104,6 +109,7 @@ int device_lock(const char *dev) { daemon_log(LOG_ERR, "Failed to link temporary lock file: %s", strerror(errno)); } + unlink(temp); return 0; } |