Skip to content
Snippets Groups Projects
Commit 615923f0 authored by Ben Collins's avatar Ben Collins
Browse files

Functions for using fcntl to lock/unlock files in case lockf is not available

parent 27572b42
No related branches found
No related tags found
No related merge requests found
/*
* 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_ */
/*
* 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 */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment