Include error library value in C error source files instead of fixing up
authorDr. Stephen Henson <steve@openssl.org>
Tue, 12 Apr 2005 13:30:45 +0000 (13:30 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Tue, 12 Apr 2005 13:30:45 +0000 (13:30 +0000)
at runtime.

CHANGES
crypto/err/err.c
util/mkerr.pl

diff --git a/CHANGES b/CHANGES
index 3c10f10738a7a5bc8cb403d9047d5df056842f73..5644f50166ecdea97ca6e8a304e141ffdab72b0f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,7 +4,10 @@
 
  Changes between 0.9.7g and 0.9.7h  [XX xxx XXXX]
 
-  *)
+  *) Include the fixed error library code in the C error file definitions
+     instead of fixing them up at runtime. This keeps the error code
+     structures constant.
+     [Steve Henson]
 
  Changes between 0.9.7f and 0.9.7g  [11 Apr 2005]
 
index c78790a54ccfe485148788e7b3b8678260a3bcf6..53687d79ab6f4c98d2ba9509bcb2ab766caf777f 100644 (file)
@@ -621,7 +621,8 @@ static void err_load_strings(int lib, ERR_STRING_DATA *str)
        {
        while (str->error)
                {
-               str->error|=ERR_PACK(lib,0,0);
+               if (lib)
+                       str->error|=ERR_PACK(lib,0,0);
                ERRFN(err_set_item)(str);
                str++;
                }
@@ -637,7 +638,8 @@ void ERR_unload_strings(int lib, ERR_STRING_DATA *str)
        {
        while (str->error)
                {
-               str->error|=ERR_PACK(lib,0,0);
+               if (lib)
+                       str->error|=ERR_PACK(lib,0,0);
                ERRFN(err_del_item)(str);
                str++;
                }
index 60e534807eb381b554866fb70a854a7c61426e30..2fb64e522cf0442cd6c6c82963ba4aa597594e3b 100644 (file)
@@ -9,6 +9,9 @@ my $reindex = 0;
 my $dowrite = 0;
 my $staticloader = "";
 
+my $pack_errcode;
+my $load_errcode;
+
 while (@ARGV) {
        my $arg = $ARGV[0];
        if($arg eq "-conf") {
@@ -399,6 +402,20 @@ EOF
                $hincf = "\"$hfile\"";
        }
 
+       # If static we know the error code at compile time so use it
+       # in error definitions.
+
+       if ($static)
+               {
+               $pack_errcode = "ERR_LIB_${lib}";
+               $load_errcode = "0";
+               }
+       else
+               {
+               $pack_errcode = "0";
+               $load_errcode = "ERR_LIB_${lib}";
+               }
+
 
        open (OUT,">$cfile") || die "Can't open $cfile for writing";
 
@@ -469,6 +486,10 @@ EOF
 
 /* BEGIN ERROR CODES */
 #ifndef OPENSSL_NO_ERR
+
+#define ERR_FUNC(func) ERR_PACK($pack_errcode,func,0)
+#define ERR_REASON(reason) ERR_PACK($pack_errcode,0,reason)
+
 static ERR_STRING_DATA ${lib}_str_functs[]=
        {
 EOF
@@ -480,7 +501,8 @@ EOF
                if(exists $ftrans{$fn}) {
                        $fn = $ftrans{$fn};
                }
-               print OUT "{ERR_PACK(0,$i,0),\t\"$fn\"},\n";
+#              print OUT "{ERR_PACK($pack_errcode,$i,0),\t\"$fn\"},\n";
+               print OUT "{ERR_FUNC($i),\t\"$fn\"},\n";
        }
        print OUT <<"EOF";
 {0,NULL}
@@ -492,6 +514,7 @@ EOF
        # Add each reason code.
        foreach $i (@reasons) {
                my $rn;
+               my $rstr = "ERR_REASON($i)";
                my $nspc = 0;
                if (exists $err_reason_strings{$i}) {
                        $rn = $err_reason_strings{$i};
@@ -500,9 +523,9 @@ EOF
                        $rn = $1;
                        $rn =~ tr/_[A-Z]/ [a-z]/;
                }
-               $nspc = 40 - length($i) unless length($i) > 40;
+               $nspc = 40 - length($rstr) unless length($rstr) > 40;
                $nspc = " " x $nspc;
-               print OUT "{${i}${nspc},\"$rn\"},\n";
+               print OUT "{${rstr}${nspc},\"$rn\"},\n";
        }
 if($static) {
        print OUT <<"EOF";
@@ -519,8 +542,8 @@ ${staticloader}void ERR_load_${lib}_strings(void)
                {
                init=0;
 #ifndef OPENSSL_NO_ERR
-               ERR_load_strings(ERR_LIB_${lib},${lib}_str_functs);
-               ERR_load_strings(ERR_LIB_${lib},${lib}_str_reasons);
+               ERR_load_strings($load_errcode,${lib}_str_functs);
+               ERR_load_strings($load_errcode,${lib}_str_reasons);
 #endif
 
                }