New err_code.pl script to retain old error codes. This should allow the use
authorDr. Stephen Henson <steve@openssl.org>
Mon, 18 Jan 1999 22:18:38 +0000 (22:18 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Mon, 18 Jan 1999 22:18:38 +0000 (22:18 +0000)
of 'make errors' without causing huge re-organisations of files when a new
code is added.

20 files changed:
CHANGES
crypto/Makefile.ssl
crypto/asn1/Makefile.ssl
crypto/bio/Makefile.ssl
crypto/bn/Makefile.ssl
crypto/buffer/Makefile.ssl
crypto/comp/Makefile.ssl
crypto/conf/Makefile.ssl
crypto/dh/Makefile.ssl
crypto/dsa/Makefile.ssl
crypto/err/err_code.pl
crypto/evp/Makefile.ssl
crypto/md2/Makefile.ssl
crypto/objects/Makefile.ssl
crypto/pem/Makefile.ssl
crypto/pkcs7/Makefile.ssl
crypto/rsa/Makefile.ssl
crypto/x509/Makefile.ssl
rsaref/Makefile.ssl
ssl/Makefile.ssl

diff --git a/CHANGES b/CHANGES
index 2235c937e3358940dc645e16f4d41fbb86190e45..33afc413b796ccbd230f808be3fec05fda430ccc 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,16 @@
 
  Changes between 0.9.1c and 0.9.2
 
+  *) Changes to the error generation code. The perl script err-code.pl 
+     now reads in the old error codes and retains the old numbers, only
+     adding new ones if necessary. It also only changes the .err files if new
+     codes are added. The makefiles have been modified to only insert errors
+     when needed (to avoid needlessly modifying header files). This is done
+     by only inserting errors if the .err file is newer than the auto generated
+     C file. To rebuild all the error codes from scratch (the old behaviour)
+     either modify crypto/Makefile.ssl to pass the -regen flag to err_code.pl
+     or delete all the .err files.
+
   *) CAST-128 was incorrectly implemented for short keys. The C version has
      been fixed, but is untested. The assembler versions are also fixed, but
      new assembler HAS NOT BEEN GENERATED FOR WIN32 - the Makefile needs fixing
index 3303523e08451035e43fdc464137a16ef6d1dc61..b91baad738efb420680ce51f9ad8ad5147add63f 100644 (file)
@@ -15,10 +15,6 @@ MAKEFILE=       Makefile.ssl
 RM=             /bin/rm -f
 AR=            ar r
 
-MAKE=          make -f Makefile.ssl
-MAKEDEPEND=    makedepend -f Makefile.ssl
-MAKEFILE=      Makefile.ssl
-
 PEX_LIBS=
 EX_LIBS=
  
@@ -148,14 +144,19 @@ dclean:
        $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' dclean ); \
        done;
 
-errors:
-       perl ./err/err_code.pl -conf err/ssleay.ec *.c */*.c ../ssl/*.c ../rsaref/*.c
+errors: errgen $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl err/err_genc.pl -s $(ERR).h $(ERRC).c
+
+errgen:
+       perl ./err/err_code.pl -conf err/ssleay.ec *.c */*.c ../ssl/*.c ../rsaref/*.c
        @for i in $(SDIRS) ;\
        do \
        (cd $$i; echo "making errors in $$i..."; \
        $(MAKE) errors ); \
        done;
 
+
 # DO NOT DELETE THIS LINE -- make depend depends on it.
index fb2c7f36bc9755b628cef72f4b41a2293f1d5465..84a4b04d8f77539847a60490b14adf6bf1b7c8b4 100644 (file)
@@ -113,7 +113,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index 42e11e1c94f2b29981be2c3b5a84bc7112600911..3cb667047a6d6a96fe39953820e214d39702d979 100644 (file)
@@ -85,7 +85,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index 0a365fca6a9e9605c5fdf834b52ba6abb4dcd079..bf3423415bff7717fbbbe0825641a9fa4977c8b3 100644 (file)
@@ -149,7 +149,9 @@ dclean:
 clean:
        /bin/rm -f *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff bn_asm.s
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).org # special case .org
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
index a5f150e523129802d978e8d0d20b588d5191b561..756e8b1e2dc5535ad295b071b9d90707c43933fa 100644 (file)
@@ -77,7 +77,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index 8673626c94a39c09272f07719d1da9c16b1357a4..401651d142c3685257e757ffd8acf97a996e0d55 100644 (file)
@@ -80,7 +80,15 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+# This is a dummy to create comp.err: remove if we add any real errors to this
+# stuff.
+
+comp.err:
+       touch comp.err
+
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index 00e917aa4476c1f7533d133f9eb57d2874630142..720ac43c5d357112f95a56bd36424c9c04a0238e 100644 (file)
@@ -78,7 +78,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index dfa7e4525d002801266e25c6245c49f0dcb7b7a4..e634731aa37a652f774c6873fe0a639083183bc4 100644 (file)
@@ -77,7 +77,9 @@ dclean:
 clean:
        /bin/rm -f *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index 2cc4ddb39e9360ce578bb6127c4b2cb0e4d851c1..3482f6d65228e86afebace22fc736de089972707 100644 (file)
@@ -77,7 +77,9 @@ dclean:
 clean:
        /bin/rm -f *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index 7f4cd7c21699f00f2032bb48024e221a79e20855..8b510c96fcf88135aad20a222d1e754ab0e881c3 100644 (file)
@@ -1,4 +1,16 @@
-#!/usr/local/bin/perl
+#!/usr/local/bin/perl -w
+
+# Modified by Steve Henson. It should now read in the .err
+# file and only add new error codes, retaining the old
+# numbers. 
+
+# Before it re-sorted new codes and re-ordered the whole thing. 
+# This is the motivation for the change: the re numbering caused large
+# patch files even if only one error or reason code was added.
+# To force regeneration of all error codes (the old behaviour) use the
+# -regen flag.
+
+$regen = 0;
 
 while (@ARGV)
        {
@@ -23,6 +35,11 @@ while (@ARGV)
                close(IN);
                next;
                }
+       elsif ($in =~ /^-regen/)
+               {
+               $regen = 1;
+               next;
+       }
 
        open(IN,"<$in") || die "unable to open '$in'\n";
        $last="";
@@ -30,13 +47,14 @@ while (@ARGV)
                {
                if (/err\(([A-Z0-9]+_F_[0-9A-Z_]+)\s*,\s*([0-9A-Z]+_R_[0-9A-Z_]+)\s*\)/)
                        {
-                       if ($1 != $last)
-                               {
-                               if ($function{$1} == 0)
-                                       {
-                                       printf STDERR "$. $1 is bad\n";
-                                       }
-                               }
+# Not sure what this was supposed to be for: it's broken anyway [steve]
+#                      if ($1 != $last)
+#                              {
+#                              if ($function{$1} == 0)
+#                                      {
+#                                      printf STDERR "$. $1 is bad\n";
+#                                      }
+#                              }
                        $function{$1}++;
                        $last=$1;
                        $reason{$2}++;
@@ -55,47 +73,74 @@ foreach (keys %function,keys %reason)
 @R=sort keys %reason;
 foreach $j (sort keys %prefix)
        {
+       next if !defined $errfile{$j};
        next if $errfile{$j} eq "NONE";
        printf STDERR "doing %-6s - ",$j;
+       @f=grep(/^${j}_/,@F);
+       @r=grep(/^${j}_/,@R);
        if (defined($errfile{$j}))
                {
+               read_errcodes($errfile{$j});
+               # Check to see if any new codes: if not ignore.
+               $new_codes = 0;
+               foreach (@f) {
+                       if(!exists $func_codes{$_}) {
+                               $new_codes = 1;
+                               last;
+                       }
+               }
+               if(!$new_codes) {
+                       foreach (@r) {
+                               if(!exists $reason_codes{$_}) {
+                                       $new_codes = 1;
+                                       last;
+                               }
+                       }
+               }
+               if(!$new_codes) {
+                       print STDERR "No New Codes\n";
+                       next;
+               }
                open(OUT,">$errfile{$j}") ||
                        die "unable to open '$errfile{$j}':$!\n";
                $close_file=1;
                }
        else
                {
+               $min_func = 100;
+               $min_reason = 100;
                *OUT=*STDOUT;
-               $close=0;
+               $close_file=0;
                }
-       @f=grep(/^${j}_/,@F);
-       @r=grep(/^${j}_/,@R);
-       $num=100;
+       $num=$min_func;
        print OUT "/* Error codes for the $j functions. */\n\n";
        print OUT "/* Function codes. */\n";
        $f_count=0;
        foreach $i (@f)
                {
                $z=6-int(length($i)/8);
-               printf OUT "#define $i%s $num\n","\t" x $z;
-               $num++;
+               if(exists $func_codes{$i}) {
+                       printf OUT "#define $i%s $func_codes{$i}\n","\t" x $z;
+               } else {
+                       printf OUT "#define $i%s $num\n","\t" x $z;
+                       $num++;
+               }
                $f_count++;
                }
-       $num=100;
+       $num=$min_reason;
        print OUT "\n/* Reason codes. */\n";
        $r_count=0;
        foreach $i (@r)
                {
                $z=6-int(length($i)/8);
-               if (defined($r_value{$i}))
-                       {
+               if (exists $reason_codes{$i}) {
+                       printf OUT "#define $i%s $reason_codes{$i}\n","\t" x $z;
+               } elsif (exists $r_value{$i}) {
                        printf OUT "#define $i%s $r_value{$i}\n","\t" x $z;
-                       }
-               else
-                       {
+               } else {
                        printf OUT "#define $i%s $num\n","\t" x $z;
                        $num++;
-                       }
+               }
                $r_count++;
                }
        close(OUT) if $close_file;
@@ -103,3 +148,33 @@ foreach $j (sort keys %prefix)
        printf STDERR "%3d functions, %3d reasons\n",$f_count,$r_count;
        }
 
+# Read in the error codes and populate %function and %reason with the
+# old codes. Also define $min_func and $min_reason with the smallest
+# unused function and reason codes. Care is needed because the
+# config file can define larger reason codes and these should be
+# ignored.
+
+sub read_errcodes {
+$file = $_[0];
+$min_func = 100;
+$min_reason = 100;
+undef %func_codes;
+undef %reason_codes;
+return if ($regen);
+if (open IN, $file) {
+       while(<IN>) {
+               if(/^#define\s*(\S*)\s*(\S*)/) {
+                       if (exists $function{$1} ) {
+                               if($2 >= $min_func) {$min_func = $2 + 1;}
+                               $func_codes{$1} = $2;
+                       } elsif ((defined %reason) && exists $reason{$1}) {
+                               $reason_codes{$1} = $2;
+                               if( !(exists $r_value{$1})  &&
+                                                ($2 >= $min_reason))
+                                                        {$min_reason = $2 + 1;}
+                       }
+               }
+       }
+       close IN;
+}
+}
index 8bf25164584fcf9a50229469a44dd9110b89c3e7..902d6fba0dbb3c8b08899dc26d75bfe080898bb5 100644 (file)
@@ -104,7 +104,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index d8e7200c8309d75cb9bfc7862f8928bc5585c0ee..5ea3149438fe207bfea76eafec88094e10f86a6c 100644 (file)
@@ -20,7 +20,7 @@ TEST=md2test.c
 APPS=
 
 LIB=$(TOP)/libcrypto.a
-LIBSRC=md2_dgst.c md5_one.c
+LIBSRC=md2_dgst.c md2_one.c
 LIBOBJ=md2_dgst.o md2_one.o
 
 SRC= $(LIBSRC)
index 4fa4a7dbf499a314527da59812ccfea769d4d134..a61cde7fecb3c55e8fbc82bb47964bb62734a9d6 100644 (file)
@@ -80,7 +80,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index fc04a88fd924b0b31867d4de6db88f23d69ce40a..cbc2d982104ad67898c27033ceab19910f020254 100644 (file)
@@ -56,7 +56,7 @@ lib:  $(LIBOBJ)
 files:
        perl $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
 
-links:
+links: $(EXHEADER)
        /bin/rm -f Makefile
        $(TOP)/util/point.sh Makefile.ssl Makefile ;
        $(TOP)/util/mklink.sh ../../include $(EXHEADER)
@@ -88,7 +88,9 @@ dclean:
 clean:
        /bin/rm -f $(CTX_SIZE) *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).org # SPECIAL CASE .org
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
index a88359b32027ef65a6815a6ee3f1f6910eb64f29..7cffde48efa9262a28716670196aafd45bf30170 100644 (file)
@@ -79,7 +79,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index d52f2e609e233e0e0f5fac40f5385917dbd3b334..f706c41880e49c1d61571df6f923d7de373ff2fb 100644 (file)
@@ -79,7 +79,9 @@ dclean:
 clean:
        /bin/rm -f *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index 1c1ca2ffa07f33584034be9e8aafbfede0ef72a0..63c0e214bfb339987978f14a7ebc96f16d4fdf5a 100644 (file)
@@ -89,7 +89,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index f75f0eac327daddd1cf32ae01558c75e64c20ac8..5f5e742ce16576470c2b1aab76845f1ea4e9f9a1 100644 (file)
@@ -78,7 +78,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../crypto/err/err_genc.pl -s $(ERR).h $(ERRC).c
 
index f4b13bf83b8a985f5ee1fc7fb567a9fce8e7bca1..50b4d6aa4571acd362f758af2af64700d089eb60 100644 (file)
@@ -93,7 +93,9 @@ dclean:
 clean:
        /bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 
-errors:
+errors: $(ERRC).c
+
+$(ERRC).c: $(ERR).err
        perl $(TOP)/util/err-ins.pl $(ERR).err $(ERR).h
        perl ../crypto/err/err_genc.pl -s $(ERR).h $(ERRC).c