X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Futil-int.c;h=85f13fcedd72d874bf11f798e329bd8b2b1d1aee;hb=7d13ef7e42f1514dd99878835a13a700da4f4b69;hp=062c892fba32e0f3c3f5b2f265fb4c3df7d650f2;hpb=f3cdcadf89474e7267d9f8f17d2bac46551b2131;p=openldap diff --git a/libraries/libldap/util-int.c b/libraries/libldap/util-int.c index 062c892fba..85f13fcedd 100644 --- a/libraries/libldap/util-int.c +++ b/libraries/libldap/util-int.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2009 The OpenLDAP Foundation. + * Copyright 1998-2012 The OpenLDAP Foundation. * Portions Copyright 1998 A. Hartgers. * All rights reserved. * @@ -68,12 +68,17 @@ extern int h_errno; /* USE_GMTIME_R and USE_LOCALTIME_R defined in ldap_pvt.h */ +#ifdef LDAP_DEVEL + /* to be released with 2.5 */ #if !defined( USE_GMTIME_R ) || !defined( USE_LOCALTIME_R ) /* we use the same mutex for gmtime(3) and localtime(3) * because implementations may use the same buffer * for both functions */ static ldap_pvt_thread_mutex_t ldap_int_gmtime_mutex; #endif +#else /* ! LDAP_DEVEL */ + ldap_pvt_thread_mutex_t ldap_int_gmtime_mutex; +#endif /* ! LDAP_DEVEL */ # if defined(HAVE_GETHOSTBYNAME_R) && \ (GETHOSTBYNAME_R_NARGS < 5) || (6 < GETHOSTBYNAME_R_NARGS) @@ -102,21 +107,15 @@ char *ldap_pvt_ctime( const time_t *tp, char *buf ) #else -# ifdef LDAP_R_COMPILE - ldap_pvt_thread_mutex_lock( &ldap_int_ctime_mutex ); -# endif - + LDAP_MUTEX_LOCK( &ldap_int_ctime_mutex ); AC_MEMCPY( buf, ctime(tp), 26 ); - -# ifdef LDAP_R_COMPILE - ldap_pvt_thread_mutex_unlock( &ldap_int_ctime_mutex ); -# endif + LDAP_MUTEX_UNLOCK( &ldap_int_ctime_mutex ); return buf; #endif } -#ifndef USE_GMTIME_R +#if !defined( USE_GMTIME_R ) || !defined( USE_LOCALTIME_R ) int ldap_pvt_gmtime_lock( void ) { @@ -136,26 +135,25 @@ ldap_pvt_gmtime_unlock( void ) return ldap_pvt_thread_mutex_unlock( &ldap_int_gmtime_mutex ); # endif /* LDAP_R_COMPILE */ } +#endif /* !USE_GMTIME_R || !USE_LOCALTIME_R */ +#ifndef USE_GMTIME_R struct tm * ldap_pvt_gmtime( const time_t *timep, struct tm *result ) { struct tm *tm_ptr; -# ifdef LDAP_R_COMPILE - ldap_pvt_thread_mutex_lock( &ldap_int_gmtime_mutex ); -# endif /* LDAP_R_COMPILE */ - + LDAP_MUTEX_LOCK( &ldap_int_gmtime_mutex ); tm_ptr = gmtime( timep ); - if ( tm_ptr != NULL ) { + if ( tm_ptr == NULL ) { + result = NULL; + + } else { *result = *tm_ptr; } + LDAP_MUTEX_UNLOCK( &ldap_int_gmtime_mutex ); -# ifdef LDAP_R_COMPILE - ldap_pvt_thread_mutex_unlock( &ldap_int_gmtime_mutex ); -# endif /* LDAP_R_COMPILE */ - - return tm_ptr; + return result; } #endif /* !USE_GMTIME_R */ @@ -165,20 +163,17 @@ ldap_pvt_localtime( const time_t *timep, struct tm *result ) { struct tm *tm_ptr; -# ifdef LDAP_R_COMPILE - ldap_pvt_thread_mutex_lock( &ldap_int_gmtime_mutex ); -# endif /* LDAP_R_COMPILE */ - + LDAP_MUTEX_LOCK( &ldap_int_gmtime_mutex ); tm_ptr = localtime( timep ); - if ( tm_ptr != NULL ) { + if ( tm_ptr == NULL ) { + result = NULL; + + } else { *result = *tm_ptr; } + LDAP_MUTEX_UNLOCK( &ldap_int_gmtime_mutex ); -# ifdef LDAP_R_COMPILE - ldap_pvt_thread_mutex_unlock( &ldap_int_gmtime_mutex ); -# endif /* LDAP_R_COMPILE */ - - return tm_ptr; + return result; } #endif /* !USE_LOCALTIME_R */ @@ -276,7 +271,7 @@ ldap_pvt_gettime( struct lutil_tm *ltm ) t = tv.tv_sec; if ( tv.tv_sec < prevTv.tv_sec - || ( tv.tv_sec == prevTv.tv_sec && tv.tv_usec == prevTv.tv_usec )) { + || ( tv.tv_sec == prevTv.tv_sec && tv.tv_usec <= prevTv.tv_usec )) { subs++; } else { subs = 0; @@ -372,7 +367,7 @@ int ldap_pvt_gethostbyname_a( int retval; *buf = NULL; - ldap_pvt_thread_mutex_lock( &ldap_int_resolv_mutex ); + LDAP_MUTEX_LOCK( &ldap_int_resolv_mutex ); he = gethostbyname( name ); @@ -387,7 +382,7 @@ int ldap_pvt_gethostbyname_a( retval = 0; } - ldap_pvt_thread_mutex_unlock( &ldap_int_resolv_mutex ); + LDAP_MUTEX_UNLOCK( &ldap_int_resolv_mutex ); return retval; #else @@ -431,13 +426,9 @@ int ldap_pvt_get_hname( int rc; #if defined( HAVE_GETNAMEINFO ) -#if defined( LDAP_R_COMPILE ) - ldap_pvt_thread_mutex_lock( &ldap_int_resolv_mutex ); -#endif + LDAP_MUTEX_LOCK( &ldap_int_resolv_mutex ); rc = getnameinfo( sa, len, name, namelen, NULL, 0, 0 ); -#if defined( LDAP_R_COMPILE ) - ldap_pvt_thread_mutex_unlock( &ldap_int_resolv_mutex ); -#endif + LDAP_MUTEX_UNLOCK( &ldap_int_resolv_mutex ); if ( rc ) *err = (char *)AC_GAI_STRERROR( rc ); return rc; @@ -501,9 +492,7 @@ int ldap_pvt_get_hname( LDAP_FREE(buf); #else /* HAVE_GETHOSTBYADDR_R */ -#if defined( LDAP_R_COMPILE ) - ldap_pvt_thread_mutex_lock( &ldap_int_resolv_mutex ); -#endif + LDAP_MUTEX_LOCK( &ldap_int_resolv_mutex ); hp = gethostbyaddr( addr, alen, sa->sa_family ); if (hp) { strncpy( name, hp->h_name, namelen ); @@ -512,9 +501,7 @@ int ldap_pvt_get_hname( rc = h_errno; *err = (char *)HSTRERROR( h_errno ); } -#if defined( LDAP_R_COMPILE ) - ldap_pvt_thread_mutex_unlock( &ldap_int_resolv_mutex ); -#endif + LDAP_MUTEX_UNLOCK( &ldap_int_resolv_mutex ); #endif /* !HAVE_GETHOSTBYADDR_R */ return rc; @@ -569,8 +556,7 @@ int ldap_pvt_gethostbyaddr_a( int retval; *buf = NULL; - ldap_pvt_thread_mutex_lock( &ldap_int_resolv_mutex ); - + LDAP_MUTEX_LOCK( &ldap_int_resolv_mutex ); he = gethostbyaddr( addr, len, type ); if (he==NULL) { @@ -583,8 +569,7 @@ int ldap_pvt_gethostbyaddr_a( *result = resbuf; retval = 0; } - - ldap_pvt_thread_mutex_unlock( &ldap_int_resolv_mutex ); + LDAP_MUTEX_UNLOCK( &ldap_int_resolv_mutex ); return retval;