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:
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);