X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslurpd%2Flock.c;h=3ce58367d7ff9d4f201567875c1be80b7e32b272;hb=8687dace5b3a5a8d2b44c087c8f0091ad0cbc298;hp=048c42529c61df8b99c0cd812e14c7d9a30fa575;hpb=6c6d3d8f0c1288ed37981b8b30b18a6f9429b9fa;p=openldap diff --git a/servers/slurpd/lock.c b/servers/slurpd/lock.c index 048c42529c..3ce58367d7 100644 --- a/servers/slurpd/lock.c +++ b/servers/slurpd/lock.c @@ -1,5 +1,18 @@ -/* - * Copyright (c) 1996 Regents of the University of Michigan. +/* $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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . + */ +/* Portions Copyright (c) 1996 Regents of the University of Michigan. * All rights reserved. * * Redistribution and use in source and binary forms are permitted @@ -9,6 +22,10 @@ * software without specific prior written permission. This software * is provided ``as is'' without express or implied warranty. */ +/* ACKNOWLEDGEMENTS: + * This work was originally developed by the University of Michigan + * (as part of U-MICH LDAP). + */ /* * lock.c - routines to open and apply an advisory lock to a file @@ -18,21 +35,23 @@ #include +#include +#include #include #include #include +#ifdef HAVE_SYS_FILE_H #include -#include - -#include "../slapd/slap.h" +#endif +#include "slurp.h" FILE * lock_fopen( - char *fname, - char *type, + const char *fname, + const char *type, FILE **lfp ) { @@ -40,8 +59,8 @@ lock_fopen( 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, "Error: could not open \"%s\"\n", buf, 0, 0 ); @@ -49,24 +68,15 @@ lock_fopen( } /* 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, "Error: 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 ); } @@ -81,15 +91,13 @@ lock_fclose( 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 ); } @@ -99,15 +107,15 @@ lock_fclose( */ int acquire_lock( - char *file, + const char *file, FILE **rfp, FILE **lfp ) { if (( *rfp = lock_fopen( file, "r+", lfp )) == NULL ) { Debug( LDAP_DEBUG_ANY, - "Error: acquire_lock(%d): Could not acquire lock on \"%s\"\n", - getpid(), file, 0); + "Error: acquire_lock(%ld): Could not acquire lock on \"%s\"\n", + (long) getpid(), file, 0); return( -1 ); } return( 0 ); @@ -121,15 +129,15 @@ acquire_lock( */ int relinquish_lock( - char *file, + const char *file, FILE *rfp, FILE *lfp ) { if ( lock_fclose( rfp, lfp ) == EOF ) { Debug( LDAP_DEBUG_ANY, - "Error: relinquish_lock (%d): Error closing \"%s\"\n", - getpid(), file, 0 ); + "Error: relinquish_lock (%ld): Error closing \"%s\"\n", + (long) getpid(), file, 0 ); return( -1 ); } return( 0 );