]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/util-int.c
Added the functions ldap_rename2() and ldap_rename2_s() to support LDAP
[openldap] / libraries / libldap / util-int.c
index bd034a2a3fbf2c0261f0dc66df7df9c6a9f867e3..1308eb621d5507d2e711c18e3c2d9c0d869d6986 100644 (file)
@@ -4,8 +4,8 @@
  */
 /*
  * util-int.c  Various functions to replace missing threadsafe ones.
- *                               Without the real *_r funcs, things will work, but won't be
- *                               threadsafe. 
+ *                               Without the real *_r funcs, things will
+ *                               work, but might not be threadsafe. 
  * 
  * Written by Bart Hartgers.
  *
@@ -19,6 +19,7 @@
  * in file LICENSE in the top-level directory of the distribution.
  */ 
 
+
 #include "portable.h"
 
 #include <stdlib.h>
 #      define USE_CTIME_R
 #endif
 
-#ifdef LDAP_COMPILING_R
+#if defined(HAVE_GETHOSTBYNAME_R) && \
+    (GETHOSTBYNAME_R_NARGS > 6 || GETHOSTBYNAME_R_NARGS < 5)
+       /* Don't know how to handle this version, pretend it's not there */
+#      undef HAVE_GETHOSTBYNAME_R
+#endif
+#if defined(HAVE_GETHOSTBYADDR_R) && \
+    (GETHOSTBYADDR_R_NARGS > 8 || GETHOSTBYADDR_R_NARGS < 7)
+       /* Don't know how to handle this version, pretend it's not there */
+#      undef HAVE_GETHOSTBYADDR_R
+#endif
+
+#ifdef LDAP_R_COMPILE
 # ifndef USE_CTIME_R
        static ldap_pvt_thread_mutex_t ldap_int_ctime_mutex;
 # endif
@@ -65,11 +77,11 @@ char *ldap_pvt_ctime( const time_t *tp, char *buf )
 # endif          
 
 #else
-# ifdef LDAP_COMPILNG_R
+# ifdef LDAP_R_COMPILE
        ldap_pvt_thread_mutex_lock( &ldap_int_ctime_mutex );
 # endif
        memcpy( buf, ctime(tp), 26 );
-# ifdef LDAP_COMPILNG_R
+# ifdef LDAP_R_COMPILE
        ldap_pvt_thread_mutex_unlock( &ldap_int_ctime_mutex );
 # endif
        return buf;
@@ -90,6 +102,7 @@ int ldap_pvt_gethostbyname_a(
        int *herrno_ptr )
 {
 #if defined( HAVE_GETHOSTBYNAME_R )
+
 # define NEED_SAFE_REALLOC 1   
        int r=-1;
        int buflen=BUFSTART;
@@ -97,8 +110,19 @@ int ldap_pvt_gethostbyname_a(
        for(;buflen<BUFMAX;) {
                if (safe_realloc( buf, buflen )==NULL)
                        return r;
+
+#if (GETHOSTBYNAME_R_NARGS < 6)
+               r = ((*result=gethostbyname_r( name, resbuf, *buf,\
+                                              buflen, herrno_ptr ))== NULL) ?\
+                   -1 : 0;
+#else
                r = gethostbyname_r( name, resbuf, *buf,
                        buflen, result, herrno_ptr );
+#endif
+
+               Debug( LDAP_DEBUG_TRACE, "ldap_pvt_gethostbyname_a: host=%s, r=%d\n",\
+                      name, r, 0 );
+
 #ifdef NETDB_INTERNAL
                if ((r<0) &&
                        (*herrno_ptr==NETDB_INTERNAL) &&
@@ -111,7 +135,7 @@ int ldap_pvt_gethostbyname_a(
                return r;
        }
        return -1;
-#elif defined( LDAP_COMPILING_R )
+#elif defined( LDAP_R_COMPILE )
 # define NEED_COPY_HOSTENT   
        struct hostent *he;
        int     retval;
@@ -157,6 +181,7 @@ int ldap_pvt_gethostbyaddr_a(
        int *herrno_ptr )
 {
 #if defined( HAVE_GETHOSTBYADDR_R )
+
 # undef NEED_SAFE_REALLOC
 # define NEED_SAFE_REALLOC   
        int r=-1;
@@ -165,9 +190,17 @@ int ldap_pvt_gethostbyaddr_a(
        for(;buflen<BUFMAX;) {
                if (safe_realloc( buf, buflen )==NULL)
                        return r;
+#if (GETHOSTBYADDR_R_NARGS < 8)
+               r = ((*result=gethostbyaddr_r( addr, len, type,
+                                              resbuf, *buf, buflen, 
+                                              herrno_ptr )) == NULL) ?\
+                   -1 : 0;
+#else
                r = gethostbyaddr_r( addr, len, type,
                        resbuf, *buf, buflen, 
                        result, herrno_ptr );
+#endif
+
 #ifdef NETDB_INTERNAL
                if ((r<0) &&
                        (*herrno_ptr==NETDB_INTERNAL) &&
@@ -180,7 +213,7 @@ int ldap_pvt_gethostbyaddr_a(
                return r;
        }
        return -1;
-#elif defined( LDAP_COMPILING_R )
+#elif defined( LDAP_R_COMPILE )
 # undef NEED_COPY_HOSTENT
 # define NEED_COPY_HOSTENT   
        struct hostent *he;
@@ -224,18 +257,18 @@ void ldap_pvt_init_utils( void )
          return;
        done=1;
 
-#ifdef LDAP_COMPILING_R
+#ifdef LDAP_R_COMPILE
 
 #if !defined( USE_CTIME_R ) && !defined( HAVE_REENTRANT_FUNCTIONS )
-       ldap_pvt_thread_mutex_init( &ldap_int_ctime_mutex, NULL );
+       ldap_pvt_thread_mutex_init( &ldap_int_ctime_mutex );
 #endif
 
 #if !defined( HAVE_GETHOSTBYNAME_R )
-       ldap_pvt_thread_mutex_init( &ldap_int_gethostbyname_mutex, NULL );
+       ldap_pvt_thread_mutex_init( &ldap_int_gethostbyname_mutex );
 #endif
 
 #if !defined( HAVE_GETHOSTBYADDR_R )
-       ldap_pvt_thread_mutex_init( &ldap_int_gethostbyaddr_mutex, NULL );
+       ldap_pvt_thread_mutex_init( &ldap_int_gethostbyaddr_mutex );
 #endif
 
        /* call other module init functions here... */
@@ -289,7 +322,7 @@ static int copy_hostent( struct hostent *res, char **buf, struct hostent * src )
        
        for( n_alias=total_alias_len=0, p=src->h_aliases; (*p) ; p++ ) {
                total_alias_len += strlen( *p ) + 1;
-               n_alias++;
+               n_alias++; 
        }
 
        for( n_addr=0, p=src->h_addr_list; (*p) ; p++ ) {