0e53aa3aaf50dc45acc65df1318a0f96e5cd2df2 vs 0000000000000000000000000000000000000000
[hcoop/debian/courier-authlib.git] / libs / liblock / lockflock.c
diff --git a/libs/liblock/lockflock.c b/libs/liblock/lockflock.c
new file mode 100644 (file)
index 0000000..0e53aa3
--- /dev/null
@@ -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
+#if    HAVE_SYS_FILE_H
+#include       <sys/file.h>
+#endif
+#include       <errno.h>
+#include       "liblock.h"
+
+int    ll_lockfd(int fd, int ltype, LL_OFFSET_TYPE start, LL_OFFSET_TYPE len)
+{
+       if (start || len
+               || (ltype & ll_whence_curpos)
+               || (ltype & ll_whence_end))
+       {
+               errno=EINVAL;
+               return (-1);
+       }
+
+       return (flock(fd, ltype & ll_unlock ? LOCK_UN:
+               (ltype & ll_writelock ? LOCK_EX:LOCK_SH) |
+               (ltype & ll_wait ? 0:LOCK_NB)));
+}