Add an evil cast, because POSIX/SUSv2 define connect(2) require
[oweals/openssl.git] / crypto / err / err.c
index 34320b375a92ba7facf86e5db6af2865ab93ac4a..93c64cbc4f2e096a3346c9a0f3525e5a9db12f4d 100644 (file)
@@ -57,6 +57,7 @@
  */
 
 #include <stdio.h>
+#include <stdarg.h>
 #include <openssl/lhash.h>
 #include <openssl/crypto.h>
 #include "cryptlib.h"
@@ -90,7 +91,7 @@ static ERR_STRING_DATA ERR_str_libraries[]=
 {ERR_PACK(ERR_LIB_PEM,0,0)             ,"PEM routines"},
 {ERR_PACK(ERR_LIB_ASN1,0,0)            ,"asn1 encoding routines"},
 {ERR_PACK(ERR_LIB_X509,0,0)            ,"x509 certificate routines"},
-{ERR_PACK(ERR_LIB_CONF,0,0)            ,"configuation file routines"},
+{ERR_PACK(ERR_LIB_CONF,0,0)            ,"configuration file routines"},
 {ERR_PACK(ERR_LIB_METH,0,0)            ,"X509 lookup 'method' routines"},
 {ERR_PACK(ERR_LIB_SSL,0,0)             ,"SSL routines"},
 {ERR_PACK(ERR_LIB_RSAREF,0,0)          ,"RSAref routines"},
@@ -99,6 +100,7 @@ static ERR_STRING_DATA ERR_str_libraries[]=
 {ERR_PACK(ERR_LIB_PKCS7,0,0)           ,"PKCS7 routines"},
 {ERR_PACK(ERR_LIB_X509V3,0,0)          ,"X509 V3 routines"},
 {ERR_PACK(ERR_LIB_PKCS12,0,0)          ,"PKCS12 routines"},
+{ERR_PACK(ERR_LIB_RAND,0,0)            ,"random number generator"},
 {0,NULL},
        };
 
@@ -115,6 +117,7 @@ static ERR_STRING_DATA ERR_str_functs[]=
 #ifdef WINDOWS
        {ERR_PACK(0,SYS_F_WSASTARTUP,0),        "WSAstartup"},
 #endif
+       {ERR_PACK(0,SYS_F_OPENDIR,0),           "opendir"},
        {0,NULL},
        };
 
@@ -140,7 +143,7 @@ static ERR_STRING_DATA ERR_str_reasons[]=
 {ERR_R_PKCS7_LIB                       ,"PKCS7 lib"},
 {ERR_R_PKCS12_LIB                      ,"PKCS12 lib"},
 {ERR_R_MALLOC_FAILURE                  ,"Malloc failure"},
-{ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED     ,"called a fuction you should not call"},
+{ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED     ,"called a function you should not call"},
 {ERR_R_PASSED_NULL_PARAMETER           ,"passed a null parameter"},
 {ERR_R_NESTED_ASN1_ERROR               ,"nested asn1 error"},
 {ERR_R_BAD_ASN1_OBJECT_HEADER          ,"bad asn1 object header"},
@@ -219,7 +222,7 @@ void ERR_load_strings(int lib, ERR_STRING_DATA *str)
        while (str->error)
                {
                str->error|=ERR_PACK(lib,0,0);
-               lh_insert(error_hash,(char *)str);
+               lh_insert(error_hash,str);
                str++;
                }
        CRYPTO_w_unlock(CRYPTO_LOCK_ERR_HASH);
@@ -245,6 +248,25 @@ void ERR_put_error(int lib, int func, int reason, const char *file,
        {
        ERR_STATE *es;
 
+#ifdef _OSD_POSIX
+       /* In the BS2000-OSD POSIX subsystem, the compiler generates
+        * path names in the form "*POSIX(/etc/passwd)".
+        * This dirty hack strips them to something sensible.
+        * @@@ We shouldn't modify a const string, though.
+        */
+       if (strncmp(file,"*POSIX(", sizeof("*POSIX(")-1) == 0) {
+               char *end;
+
+               /* Skip the "*POSIX(" prefix */
+               file += sizeof("*POSIX(")-1;
+               end = &file[strlen(file)-1];
+               if (*end == ')')
+                       *end = '\0';
+               /* Optional: use the basename of the path only. */
+               if ((end = strrchr(file, '/')) != NULL)
+                       file = &end[1];
+       }
+#endif
        es=ERR_get_state();
 
        es->top=(es->top+1)%ERR_NUM_ERRORS;
@@ -406,7 +428,7 @@ const char *ERR_lib_error_string(unsigned long e)
        if (error_hash != NULL)
                {
                d.error=ERR_PACK(l,0,0);
-               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,(char *)&d);
+               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);
                }
 
        CRYPTO_r_unlock(CRYPTO_LOCK_ERR_HASH);
@@ -427,7 +449,7 @@ const char *ERR_func_error_string(unsigned long e)
        if (error_hash != NULL)
                {
                d.error=ERR_PACK(l,f,0);
-               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,(char *)&d);
+               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);
                }
 
        CRYPTO_r_unlock(CRYPTO_LOCK_ERR_HASH);
@@ -448,12 +470,11 @@ const char *ERR_reason_error_string(unsigned long e)
        if (error_hash != NULL)
                {
                d.error=ERR_PACK(l,0,r);
-               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,(char *)&d);
+               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);
                if (p == NULL)
                        {
                        d.error=ERR_PACK(0,0,r);
-                       p=(ERR_STRING_DATA *)lh_retrieve(error_hash,
-                               (char *)&d);
+                       p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);
                        }
                }
 
@@ -496,7 +517,7 @@ void ERR_remove_state(unsigned long pid)
                pid=(unsigned long)CRYPTO_thread_id();
        tmp.pid=pid;
        CRYPTO_w_lock(CRYPTO_LOCK_ERR);
-       p=(ERR_STATE *)lh_delete(thread_hash,(char *)&tmp);
+       p=(ERR_STATE *)lh_delete(thread_hash,&tmp);
        CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
 
        if (p != NULL) ERR_STATE_free(p);
@@ -530,7 +551,7 @@ ERR_STATE *ERR_get_state(void)
        else
                {
                tmp.pid=pid;
-               ret=(ERR_STATE *)lh_retrieve(thread_hash,(char *)&tmp);
+               ret=(ERR_STATE *)lh_retrieve(thread_hash,&tmp);
                CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
                }
 
@@ -548,7 +569,7 @@ ERR_STATE *ERR_get_state(void)
                        ret->err_data_flags[i]=0;
                        }
                CRYPTO_w_lock(CRYPTO_LOCK_ERR);
-               tmpp=(ERR_STATE *)lh_insert(thread_hash,(char *)ret);
+               tmpp=(ERR_STATE *)lh_insert(thread_hash,ret);
                CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
                if (tmpp != NULL) /* old entry - should not happen */
                        {
@@ -580,10 +601,9 @@ void ERR_set_error_data(char *data, int flags)
        es->err_data_flags[es->top]=flags;
        }
 
-void ERR_add_error_data( VAR_PLIST(int , num))
-VAR_ALIST
-        {
-        VAR_BDEFN(args, int, num);
+void ERR_add_error_data(int num, ...)
+       {
+       va_list args;
        int i,n,s;
        char *str,*p,*a;
 
@@ -592,11 +612,11 @@ VAR_ALIST
        if (str == NULL) return;
        str[0]='\0';
 
-       VAR_INIT(args,int,num);
+       va_start(args, num);
        n=0;
        for (i=0; i<num; i++)
                {
-               VAR_ARG(args,char *,a);
+               a=va_arg(args, char*);
                /* ignore NULLs, thanks to Bob Beck <beck@obtuse.com> */
                if (a != NULL)
                        {
@@ -618,6 +638,6 @@ VAR_ALIST
                }
        ERR_set_error_data(str,ERR_TXT_MALLOCED|ERR_TXT_STRING);
 
-       VAR_END( args );
+       va_end(args);
        }