]> git.sur5r.net Git - openldap/commitdiff
Functions for using fcntl to lock/unlock files in case lockf is not available
authorBen Collins <bcollins@openldap.org>
Sat, 13 Mar 1999 19:25:15 +0000 (19:25 +0000)
committerBen Collins <bcollins@openldap.org>
Sat, 13 Mar 1999 19:25:15 +0000 (19:25 +0000)
include/lutil_lockf.h [new file with mode: 0644]
libraries/liblutil/lockf.c [new file with mode: 0644]

diff --git a/include/lutil_lockf.h b/include/lutil_lockf.h
new file mode 100644 (file)
index 0000000..9a791d8
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted only
+ * as authorized by the OpenLDAP Public License.  A copy of this
+ * license is available at http://www.OpenLDAP.org/license.html or
+ * in file LICENSE in the top-level directory of the distribution.
+ */
+/* File locking methods */
+
+#ifndef _LUTIL_LOCKF_H_
+#define _LUTIL_LOCKF_H_
+
+#include <stdio.h>
+#include <ldap_cdefs.h>
+#include <ac/bytes.h>
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef NEED_FCNTL_LOCKING
+LDAP_BEGIN_DECL
+
+LDAP_F int lutil_ldap_lockf LDAP_P(( FILE *fs ));
+LDAP_F int lutil_ldap_unlockf LDAP_P(( FILE *fs ));
+
+LDAP_END_DECL
+#endif /* NEED_FCNTL_LOCKING */
+
+#endif /* _LUTIL_LOCKF_H_ */
diff --git a/libraries/liblutil/lockf.c b/libraries/liblutil/lockf.c
new file mode 100644 (file)
index 0000000..7f0d569
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted only
+ * as authorized by the OpenLDAP Public License.  A copy of this
+ * license is available at http://www.OpenLDAP.org/license.html or
+ * in file LICENSE in the top-level directory of the distribution.
+ */
+/* File locking methods */
+
+#include "portable.h"
+
+#include <stdio.h>
+#include <ac/unistd.h>
+
+#if defined(NEED_FCNTL_LOCKING) && defined(HAVE_FCNTL_H)
+
+#include <fcntl.h>
+
+int lutil_ldap_lockf ( FILE *fs ) {
+       struct flock file_lock;
+       memset( &file_lock, 0, sizeof( file_lock ) );
+       file_lock.l_type = F_WRLCK;
+       file_lock.l_whence = SEEK_SET;
+       file_lock.l_start = 0;
+       file_lock.l_len = 0;
+       return( fcntl( fileno( fs ), F_SETLKW, &file_lock ) );
+}
+
+int lutil_ldap_unlockf ( FILE *fs ) {
+       struct flock file_lock;
+       memset( &file_lock, 0, sizeof( file_lock ) );
+       file_lock.l_type = F_UNLCK;
+       file_lock.l_whence = SEEK_SET;
+       file_lock.l_start = 0;
+       file_lock.l_len = 0;
+       return ( fcntl( fileno( fs ), F_SETLK, &file_lock ) );
+}
+
+#endif /* !HAVE_FILE_LOCKING */