]> git.sur5r.net Git - openldap/commitdiff
Rework <ac/errno.h> to provide a STRERROR. Prefers errlist over
authorKurt Zeilenga <kurt@openldap.org>
Thu, 6 Jul 2000 01:24:52 +0000 (01:24 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Thu, 6 Jul 2000 01:24:52 +0000 (01:24 +0000)
strerror() as strerror() may not be thread safe.  Likely should
be used by SLAPD.

include/ac/errno.h
libraries/liblber/sockbuf.c
libraries/libldap/os-local.c
libraries/libldbm/ldbm.c

index 7e6abae9c062b38a0b577b03c1d797176ada7252..ec9169911f00fd86588f9f2fb164ccaeffe3b36c 100644 (file)
 #      define          sys_errlist     ((char **)0)
 #elif DECL_SYS_ERRLIST 
        /* have sys_errlist but need declaration */
-       LDAP_LIBC_V (int)      sys_nerr;
-       LDAP_LIBC_V (char)    *sys_errlist[];
+       LDAP_LIBC_V(int)      sys_nerr;
+       LDAP_LIBC_V(char)    *sys_errlist[];
 #endif
 
-#ifdef HAVE_STRERROR
-#define        STRERROR(err)   strerror(err)
+#undef _AC_ERRNO_UNKNOWN
+#define _AC_ERRNO_UNKNOWN "unknown error"
+
+#ifdef HAVE_SYS_ERRLIST
+       /* this is thread safe */
+#      define  STRERROR(e) ( (e) > -1 && (e) < sys_nerr \
+                       ? sys_errlist[(e)] : _AC_ERRNO_UNKNOWN )
+
+#elif defined( HAVE_STRERROR )
+       /* this may not be thread safe */
+       /* and, yes, some implementations of strerror may return NULL */
+#      define  STRERROR(e) ( strerror(e) \
+               ? strerror(e) : _AC_ERRNO_UNKNOWN )
+
 #else
-#define        STRERROR(err) \
-       ((err) > -1 && (err) < sys_nerr ? sys_errlist[(err)] : "unknown")
+       /* this is thread safe */
+#      define  STRERROR(e) ( _AC_ERRNO_UNKNOWN )
 #endif
 
 #endif /* _AC_ERRNO_H */
index e3ddbcd44a8833bcb0db1c830ef52797629e5fdf..5c133e65400f77714c6090ec5befed23dff301b9 100644 (file)
@@ -914,7 +914,7 @@ sb_debug_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len )
        if ( ret < 0 ) {
                ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug,
                        "%sread: want=%ld error=%s\n", (char *)sbiod->sbiod_pvt,
-                       (long)len, strerror( errno ) );
+                       (long)len, STRERROR( errno ) );
        }
        else {
                ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug,
@@ -936,7 +936,7 @@ sb_debug_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len )
                ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug,
                        "%swrite: want=%ld error=%s\n",
                        (char *)sbiod->sbiod_pvt, (long)len,
-                       strerror( errno ) );
+                       STRERROR( errno ) );
        }
        else {
                ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug,
index a2cd8343083c3eb5c76f43160b399f1f7b90769c..89d4278e185693a4ff8a97bf883f139f569d9e69 100644 (file)
@@ -83,7 +83,7 @@ ldap_pvt_close_socket(LDAP *ld, int s)
                "ldap_is_socket_ready: errror on socket %d: errno: %d (%s)\n", \
                s, \
                errno, \
-               strerror(errno) ); \
+               STRERROR(errno) ); \
 } while( 0 )
 
 /*
index 2560fd8727f568c7a80ecd9291043b89c40f386c..3e6825ac0a065263ce4ddf20a145c0a64f3420d9 100644 (file)
@@ -135,11 +135,8 @@ int ldbm_initialize( void )
        if ( err ) {
                char error[BUFSIZ];
 
-               if ( err < 0 ) {
-                       sprintf( error, "%ld\n", (long) err );
-               } else {
-                       sprintf( error, "%s\n", strerror( err ));
-               }
+               sprintf( error, "%s (%d)\n", STRERROR( err ), err );
+
 #ifdef LDAP_SYSLOG
                syslog( LOG_INFO,
                        "ldbm_initialize(): FATAL error in db_appinit() : %s\n",
@@ -158,11 +155,8 @@ int ldbm_initialize( void )
         {
             char error[BUFSIZ];
 
-            if ( err < 0 ) {
-                sprintf( error, "%ld\n", (long) err );
-            } else {
-                sprintf( error, "%s\n", strerror( err ));
-            }
+            sprintf( error, "%s (%d)\n", STRERROR( err ), err );
+
 #ifdef LDAP_SYSLOG
             syslog( LOG_INFO,
                     "ldbm_initialize(): FATAL error in db_appinit() : %s\n",
@@ -233,11 +227,8 @@ ldbm_open( char *name, int rw, int mode, int dbcachesize )
        {
            char error[BUFSIZ];
 
-           if ( err < 0 ) {
-               sprintf( error, "%ld\n", (long) err );
-           } else {
-               sprintf( error, "%s\n", strerror( err ));
-           }
+           sprintf( error, "%s (%d)\n", STRERROR( err ), err );
+
            (void)ret->close(ret, 0);
            return NULL;
        }
@@ -251,11 +242,8 @@ ldbm_open( char *name, int rw, int mode, int dbcachesize )
        {
            char error[BUFSIZ];
 
-           if ( err < 0 ) {
-               sprintf( error, "%ld\n", (long) err );
-           } else {
-               sprintf( error, "%s\n", strerror( err ));
-           }
+           sprintf( error, "%s (%d)\n", STRERROR( err ), err );
+
            (void)ret->close(ret, 0);
            return NULL;
        }
@@ -383,13 +371,9 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
        {
            char error[BUFSIZ];
 
-           if ( rc < 0 ) {
-               sprintf( error, "%ld\n", (long) rc );
-           } else {
-               sprintf( error, "%s\n", strerror( rc ));
-           }
+           sprintf( error, "%s (%d)\n", STRERROR( rc ), rc );
        }
-        rc = (-1) * rc;
+       rc = (-1) * rc;
 
 #elif DB_VERSION_MAJOR >= 2
        rc = (*ldbm->put)( ldbm, NULL, &key, &data, flags & ~LDBM_SYNC );