isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit 5bbe51ee46d5c6bd858d1fb66191ec04af47fb92
parent 851d12411da856af913dd752b461027a1deb9908
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Sat,  7 Feb 2004 15:36:33 +0000

portability: don't rely on struct flock layout

Diffstat:
Msrc/dotlock.c | 18++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/dotlock.c b/src/dotlock.c @@ -28,20 +28,27 @@ #include "dotlock.h" #include <unistd.h> +#include <string.h> #include <fcntl.h> #include <sys/stat.h> #if TESTING #include <stdio.h> #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);