summaryrefslogtreecommitdiffstats
path: root/liblock/lockfcntl.c
diff options
context:
space:
mode:
Diffstat (limited to 'liblock/lockfcntl.c')
-rw-r--r--liblock/lockfcntl.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/liblock/lockfcntl.c b/liblock/lockfcntl.c
new file mode 100644
index 0000000..23be7aa
--- /dev/null
+++ b/liblock/lockfcntl.c
@@ -0,0 +1,35 @@
+/*
+** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
+** distribution information.
+*/
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <sys/types.h>
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#if HAVE_SYS_FCNTL_H
+#include <sys/fcntl.h>
+#endif
+#include "liblock.h"
+
+int ll_lockfd(int fd, int ltype, LL_OFFSET_TYPE start, LL_OFFSET_TYPE len)
+{
+#if HAS_FLOCK_T
+flock_t ft;
+#else
+struct flock ft;
+#endif
+
+ ft.l_type=ltype & ll_unlock ? F_UNLCK:
+ ltype & ll_writelock ? F_WRLCK:F_RDLCK;
+ ft.l_whence=ltype & ll_whence_curpos ? 1:
+ ltype & ll_whence_end ? 2:0;
+ ft.l_start=start;
+ ft.l_len=len;
+
+ return (fcntl(fd, (ltype & ll_unlock) == 0 && (ltype & ll_wait)
+ ? F_SETLKW:F_SETLK, &ft));
+}