summaryrefslogtreecommitdiffstats
path: root/src/libbbsutil/lock.c
diff options
context:
space:
mode:
authorkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2007-12-12 09:42:23 +0800
committerkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2007-12-12 09:42:23 +0800
commit9a12adf6d29cdefc98afe2566a9e5479489f111b (patch)
tree6e2b911398cb6dcb08b183ab645817e098182968 /src/libbbsutil/lock.c
parent3d16ea67c380607528e7c8df0b2cc5a2f2636b9f (diff)
downloadpttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.gz
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.bz2
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.lz
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.xz
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.zst
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.zip
* extract common functions as library.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3673 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'src/libbbsutil/lock.c')
-rw-r--r--src/libbbsutil/lock.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libbbsutil/lock.c b/src/libbbsutil/lock.c
new file mode 100644
index 00000000..4b28bab1
--- /dev/null
+++ b/src/libbbsutil/lock.c
@@ -0,0 +1,23 @@
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+/**
+ * lock fd
+ * @param mode F_WRLCK, F_UNLCK
+ */
+void
+PttLock(int fd, int start, int size, int mode)
+{
+ static struct flock lock_it;
+ int ret;
+
+ lock_it.l_whence = SEEK_CUR;/* from current point */
+ lock_it.l_start = start; /* -"- */
+ lock_it.l_len = size; /* length of data */
+ lock_it.l_type = mode; /* set exclusive/write lock */
+ lock_it.l_pid = 0; /* pid not actually interesting */
+ while ((ret = fcntl(fd, F_SETLKW, &lock_it)) < 0 && errno == EINTR)
+ sleep(1);
+}
+