summaryrefslogtreecommitdiffstats
path: root/liblock/locklockf.c
diff options
context:
space:
mode:
authorSam Varshavchik2013-08-19 16:39:41 -0400
committerSam Varshavchik2013-08-25 14:43:51 -0400
commit9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch)
tree7a81a04cb51efb078ee350859a64be2ebc6b8813 /liblock/locklockf.c
parenta9520698b770168d1f33d6301463bb70a19655ec (diff)
downloadcourier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2
Initial checkin
Imported from subversion report, converted to git. Updated all paths in scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'liblock/locklockf.c')
-rw-r--r--liblock/locklockf.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/liblock/locklockf.c b/liblock/locklockf.c
new file mode 100644
index 0000000..63c0a98
--- /dev/null
+++ b/liblock/locklockf.c
@@ -0,0 +1,45 @@
+/*
+** 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
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#include "liblock.h"
+
+int ll_lockfd(int fd, int ltype, LL_OFFSET_TYPE start, LL_OFFSET_TYPE len)
+{
+off_t p;
+
+ if (ltype & ll_whence_curpos)
+ p=lseek(fd, start, SEEK_CUR);
+ else if (ltype && ll_whence_end)
+ p=lseek(fd, start, SEEK_END);
+ else p=lseek(fd, start, SEEK_SET);
+
+ if (p < 0) return (-1);
+
+ if (lockf(fd, ltype & ll_unlock ? F_ULOCK:
+ ltype & ll_wait ? F_LOCK:F_TLOCK, len))
+ {
+ lseek(fd, p, SEEK_SET);
+ return (-1);
+ }
+ lseek(fd, SEEK_SET, p);
+ return (0);
+}