From: Ben Collins Date: Sat, 13 Mar 1999 19:25:15 +0000 (+0000) Subject: Functions for using fcntl to lock/unlock files in case lockf is not available X-Git-Tag: OPENLDAP_SLAPD_BACK_LDAP~398 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=615923f0d16b8ad8c56ffa9452acd1105c566a18;p=openldap Functions for using fcntl to lock/unlock files in case lockf is not available --- diff --git a/include/lutil_lockf.h b/include/lutil_lockf.h new file mode 100644 index 0000000000..9a791d8c3a --- /dev/null +++ b/include/lutil_lockf.h @@ -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 +#include +#include + +#ifdef HAVE_FCNTL_H +#include +#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 index 0000000000..7f0d569f81 --- /dev/null +++ b/libraries/liblutil/lockf.c @@ -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 +#include + +#if defined(NEED_FCNTL_LOCKING) && defined(HAVE_FCNTL_H) + +#include + +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 */