From 5bbe51ee46d5c6bd858d1fb66191ec04af47fb92 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Sat, 7 Feb 2004 15:36:33 +0000 Subject: [PATCH] portability: don't rely on struct flock layout --- src/dotlock.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/dotlock.c b/src/dotlock.c index ea82b96..b2a50b9 100644 --- a/src/dotlock.c +++ b/src/dotlock.c @@ -28,20 +28,27 @@ #include "dotlock.h" #include +#include #include #include #if TESTING #include #endif -static struct flock lck = { 0, SEEK_SET, 0, 0, 0 }; - int dotlock_lock (const char *path, int *fd) { + struct flock lck; + *fd = open (path, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); if (*fd == -1) return -1; + memset (&lck, 0, sizeof(lck)); +#if SEEK_SET != 0 + lck.l_whence = SEEK_SET; +#endif +#if F_WRLCK != 0 lck.l_type = F_WRLCK; +#endif if (fcntl (*fd, F_SETLK, &lck)) { close (*fd); @@ -54,10 +61,17 @@ int dotlock_lock (const char *path, int *fd) int dotlock_unlock (int *fd) { int r = 0; + struct flock lck; if (*fd != -1) { + memset (&lck, 0, sizeof(lck)); +#if SEEK_SET != 0 + lck.l_whence = SEEK_SET; +#endif +#if F_UNLCK != 0 lck.l_type = F_UNLCK; +#endif if (fcntl (*fd, F_SETLK, &lck)) r = -1; close (*fd);