예제 #1
0
FILE *
lock_fopen( const char *fname, const char *type, FILE **lfp )
{
    FILE	*fp;
    char	buf[MAXPATHLEN];

    /* open the lock file */
    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 */
    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 );

        ldap_unlockf( fileno(*lfp) );
        fclose( *lfp );
        *lfp = NULL;
        return( NULL );
    }

    return( fp );
}
예제 #2
0
FILE *
lock_fopen( const char *fname, const char *type, FILE **lfp )
{
    FILE	*fp;
    char	buf[MAXPATHLEN];

    /* open the lock file */
    snprintf( buf, sizeof buf, "%s.lock", fname );

    if ( (*lfp = fopen( buf, "w" )) == NULL ) {
#ifdef NEW_LOGGING
        LDAP_LOG( OPERATION, ERR,
                  "lock_fopen: could not open lock file \"%s\".\n", buf, 0, 0);
#else
        Debug( LDAP_DEBUG_ANY, "could not open \"%s\"\n", buf, 0, 0 );
#endif

        return( NULL );
    }

    /* acquire the lock */
    ldap_lockf( fileno(*lfp) );

    /* open the log file */
    if ( (fp = fopen( fname, type )) == NULL ) {
#ifdef NEW_LOGGING
        LDAP_LOG( OPERATION, ERR,
                  "lock_fopen: could not open log file \"%s\".\n", buf, 0, 0);
#else
        Debug( LDAP_DEBUG_ANY, "could not open \"%s\"\n", fname, 0, 0 );
#endif

        ldap_unlockf( fileno(*lfp) );
        fclose( *lfp );
        *lfp = NULL;
        return( NULL );
    }

    return( fp );
}