X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Flock.c;h=1a8fc52a5786a9b9f092cc258867c4588d276d95;hb=61312e7989b6b0cf97b859caf4b43fa7e70741c8;hp=ad80443eb93755f78c803c416678309aeccc60b1;hpb=f0688d71a1e176fd17ffe2d70e2f9556b9967ab2;p=openldap diff --git a/servers/slapd/lock.c b/servers/slapd/lock.c index ad80443eb9..1a8fc52a57 100644 --- a/servers/slapd/lock.c +++ b/servers/slapd/lock.c @@ -1,48 +1,68 @@ /* lock.c - routines to open and apply an advisory lock to a file */ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2005 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . + */ +/* Portions Copyright (c) 1995 Regents of the University of Michigan. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that this notice is preserved and that due credit is given + * to the University of Michigan at Ann Arbor. The name of the University + * may not be used to endorse or promote products derived from this + * software without specific prior written permission. This software + * is provided ``as is'' without express or implied warranty. + */ #include "portable.h" #include +#include #include #include #include +#ifdef HAVE_SYS_FILE_H #include -#include +#endif + #include "slap.h" +#include FILE * -lock_fopen( char *fname, char *type, FILE **lfp ) +lock_fopen( const char *fname, const char *type, FILE **lfp ) { FILE *fp; char buf[MAXPATHLEN]; /* open the lock file */ - strcpy( buf, fname ); - strcat( buf, ".lock" ); + snprintf( buf, sizeof buf, "%s.lock", fname ); + if ( (*lfp = fopen( buf, "w" )) == NULL ) { Debug( LDAP_DEBUG_ANY, "could not open \"%s\"\n", buf, 0, 0 ); + return( NULL ); } /* acquire the lock */ -#ifdef HAVE_FLOCK - while ( flock( fileno( *lfp ), LOCK_EX ) != 0 ) { -#else - while ( lockf( fileno( *lfp ), F_LOCK, 0 ) != 0 ) { -#endif - ; /* NULL */ - } + ldap_lockf( fileno(*lfp) ); /* open the log file */ if ( (fp = fopen( fname, type )) == NULL ) { Debug( LDAP_DEBUG_ANY, "could not open \"%s\"\n", fname, 0, 0 ); -#ifdef HAVE_FLOCK - flock( fileno( *lfp ), LOCK_UN ); -#else - lockf( fileno( *lfp ), F_ULOCK, 0 ); -#endif + + ldap_unlockf( fileno(*lfp) ); fclose( *lfp ); *lfp = NULL; return( NULL ); @@ -54,13 +74,10 @@ lock_fopen( char *fname, char *type, FILE **lfp ) int lock_fclose( FILE *fp, FILE *lfp ) { + int rc = fclose( fp ); /* unlock */ -#ifdef HAVE_FLOCK - flock( fileno( lfp ), LOCK_UN ); -#else - lockf( fileno( lfp ), F_ULOCK, 0 ); -#endif + ldap_unlockf( fileno(lfp) ); fclose( lfp ); - return( fclose( fp ) ); + return( rc ); }