Commit 267a1927 authored by Richard Levitte's avatar Richard Levitte
Browse files

Do not insert things in syms{} and kind{} when parsing the header

files.  Instead, insert proper information in the $def string, which
will be properly munged later on.
parent b0c86386
Loading
Loading
Loading
Loading
+70 −86
Original line number Diff line number Diff line
@@ -324,6 +324,9 @@ sub do_defs
			TRUE		=> 1,
		);
		my $symhacking = $file eq $symhacksfile;
		my @current_platforms = ();
		my @current_algorithms = ();

		while(<IN>) {
			last if (/BEGIN ERROR CODES/);
			if ($line ne '') {
@@ -402,57 +405,56 @@ sub do_defs
				$rename{$s} = $a;
			}
			if (/^\#/) {
				my @p = grep(!/^$/,
				@current_platforms =
				    grep(!/^$/,
					 map { $tag{$_} == 1 ? $_ :
						   $tag{$_} == -1 ? "!".$_  : "" }
					 @known_platforms);
				my @a = grep(!/^$/,
				@current_algorithms =
				    grep(!/^$/,
					 map { $tag{"NO_".$_} == -1 ? $_ : "" }
					 @known_algorithms);
				$def .= "#INFO:".join(',',@p).":".join(',',@a).";";
				$def .=
				    "#INFO:"
					.join(',',@current_platforms).":"
					    .join(',',@current_algorithms).";";
				next;
			}
			if (/^\s*DECLARE_STACK_OF\s*\(\s*(\w*)\s*\)/) {
				next;
			} elsif (/^\s*DECLARE_ASN1_ENCODE_FUNCTIONS\s*\(\s*(\w*)\s*,\s*(\w*)\s*,\s*(\w*)\s*\)/) {
				$syms{"d2i_$3"} = 1;
				$syms{"i2d_$3"} = 1;
				$syms{"$2_it"} = 1;
				$kind{"$2_it"} = "VARIABLE";
				$def .= "int d2i_$3(void);";
				$def .= "int i2d_$3(void);";
				$def .= "OPENSSL_EXTERN int $2_it;";
				next;
			} elsif (/^\s*DECLARE_ASN1_FUNCTIONS_fname\s*\(\s*(\w*)\s*,\s*(\w*)\s*,\s*(\w*)\s*\)/) {
				$syms{"d2i_$3"} = 1;
				$syms{"i2d_$3"} = 1;
				$syms{"$3_new"} = 1;
				$syms{"$3_free"} = 1;
				$syms{"$2_it"} = 1;
				$kind{"$2_it"} = "VARIABLE";
				$def .= "int d2i_$3(void);";
				$def .= "int i2d_$3(void);";
				$def .= "int $3_free(void);";
				$def .= "int $3_new(void);";
				$def .= "OPENSSL_EXTERN int $2_it;";
			} elsif (/^\s*DECLARE_ASN1_FUNCTIONS\s*\(\s*(\w*)\s*\)/ ||
				/^\s*DECLARE_ASN1_FUNCTIONS_const\s*\(\s*(\w*)\s*\)/) {
				$syms{"d2i_$1"} = 1;
				$syms{"i2d_$1"} = 1;
				$syms{"$1_new"} = 1;
				$syms{"$1_free"} = 1;
				$syms{"$1_it"} = 1;
				$kind{"$1_it"} = "VARIABLE";
				$def .= "int d2i_$1(void);";
				$def .= "int i2d_$1(void);";
				$def .= "int $1_free(void);";
				$def .= "int $1_new(void);";
				$def .= "OPENSSL_EXTERN int $1_it;";
				next;
			} elsif (/^\s*DECLARE_ASN1_ENCODE_FUNCTIONS_const\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) {
				$syms{"d2i_$2"} = 1;
				$syms{"i2d_$2"} = 1;
				$syms{"$2_it"} = 1;
				$kind{"$2_it"} = "VARIABLE";
				$def .= "int d2i_$2(void);";
				$def .= "int i2d_$2(void);";
				$def .= "OPENSSL_EXTERN int $2_it;";
				next;
			} elsif (/^\s*DECLARE_ASN1_FUNCTIONS_name\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) {
				$syms{"d2i_$2"} = 1;
				$syms{"i2d_$2"} = 1;
				$syms{"$2_new"} = 1;
				$syms{"$2_free"} = 1;
				$syms{"$2_it"} = 1;
				$kind{"$2_it"} = "VARIABLE";
				$def .= "int d2i_$2(void);";
				$def .= "int i2d_$2(void);";
				$def .= "int $2_free(void);";
				$def .= "int $2_new(void);";
				$def .= "OPENSSL_EXTERN int $2_it;";
				next;
			} elsif (/^\s*DECLARE_ASN1_ITEM\s*\(\s*(\w*)\s*,(\w*)\s*\)/) {
				$syms{"$1_it"} = 1;
				$kind{"$1_it"} = "VARIABLE";
				$def .= "OPENSSL_EXTERN int $1_it;";
				next;
			} elsif (/^\s*DECLARE_PKCS12_STACK_OF\s*\(\s*(\w*)\s*\)/) {
				next;
@@ -461,65 +463,47 @@ sub do_defs
			} elsif (/^DECLARE_PEM_rw\s*\(\s*(\w*)\s*,/ ||
				 /^DECLARE_PEM_rw_cb\s*\(\s*(\w*)\s*,/ ) {
				# Things not in Win16
				$syms{"PEM_read_${1}"} = 1;
				$platform{"PEM_read_${1}"} = "!WIN16";
				$syms{"PEM_write_${1}"} = 1;
				$platform{"PEM_write_${1}"} = "!WIN16";
				$def .=
				    "#INFO:"
					.join(',',"!WIN16",@current_platforms).":"
					    .join(',',@current_algorithms).";";
				$def .= "int PEM_read_$1(void);";
				$def .= "int PEM_write_$1(void);";
				$def .=
				    "#INFO:"
					.join(',',@current_platforms).":"
					    .join(',',@current_algorithms).";";
				# Things that are everywhere
				$syms{"PEM_read_bio_${1}"} = 1;
				$syms{"PEM_write_bio_${1}"} = 1;
				if ($1 eq "RSAPrivateKey" ||
				    $1 eq "RSAPublicKey" ||
				    $1 eq "RSA_PUBKEY") {
					$algorithm{"PEM_read_${1}"} = "RSA";
					$algorithm{"PEM_write_${1}"} = "RSA";
					$algorithm{"PEM_read_bio_${1}"} = "RSA";
					$algorithm{"PEM_write_bio_${1}"} = "RSA";
				}
				elsif ($1 eq "DSAPrivateKey" ||
				       $1 eq "DSAparams" ||
				       $1 eq "RSA_PUBKEY") {
					$algorithm{"PEM_read_${1}"} = "DSA";
					$algorithm{"PEM_write_${1}"} = "DSA";
					$algorithm{"PEM_read_bio_${1}"} = "DSA";
					$algorithm{"PEM_write_bio_${1}"} = "DSA";
				}
				elsif ($1 eq "DHparams") {
					$algorithm{"PEM_read_${1}"} = "DH";
					$algorithm{"PEM_write_${1}"} = "DH";
					$algorithm{"PEM_read_bio_${1}"} = "DH";
					$algorithm{"PEM_write_bio_${1}"} = "DH";
				}
				$def .= "int PEM_read_bio_$1(void);";
				$def .= "int PEM_write_bio_$1(void);";
			} elsif (/^DECLARE_PEM_write\s*\(\s*(\w*)\s*,/ ||
				     /^DECLARE_PEM_write_cb\s*\(\s*(\w*)\s*,/ ) {
				# Things not in Win16
				$syms{"PEM_write_${1}"} = 1;
				$platform{"PEM_write_${1}"} .= ",!WIN16";
				$def .=
				    "#INFO:"
					.join(',',"!WIN16",@current_platforms).":"
					    .join(',',@current_algorithms).";";
				$def .= "int PEM_write_$1(void);";
				$def .=
				    "#INFO:"
					.join(',',@current_platforms).":"
					    .join(',',@current_algorithms).";";
				# Things that are everywhere
				$syms{"PEM_write_bio_${1}"} = 1;
				if ($1 eq "RSAPrivateKey" ||
				    $1 eq "RSAPublicKey" ||
				    $1 eq "RSA_PUBKEY") {
					$algorithm{"PEM_write_${1}"} = "RSA";
					$algorithm{"PEM_write_bio_${1}"} = "RSA";
				}
				elsif ($1 eq "DSAPrivateKey" ||
				       $1 eq "DSAparams" ||
				       $1 eq "RSA_PUBKEY") {
					$algorithm{"PEM_write_${1}"} = "DSA";
					$algorithm{"PEM_write_bio_${1}"} = "DSA";
				}
				elsif ($1 eq "DHparams") {
					$algorithm{"PEM_write_${1}"} = "DH";
					$algorithm{"PEM_write_bio_${1}"} = "DH";
				}
				$def .= "int PEM_write_bio_$1(void);";
			} elsif (/^DECLARE_PEM_read\s*\(\s*(\w*)\s*,/ ||
				     /^DECLARE_PEM_read_cb\s*\(\s*(\w*)\s*,/ ) {
				# Things not in Win16
				$syms{"PEM_read_${1}"} = 1;
				$platform{"PEM_read_${1}"} .= ",!WIN16";
				$def .=
				    "#INFO:"
					.join(',',"!WIN16",@current_platforms).":"
					    .join(',',@current_algorithms).";";
				$def .= "int PEM_read_$1(void);";
				$def .=
				    "#INFO:"
					.join(',',@current_platforms).":"
					    .join(',',@current_algorithms).";";
				# Things that are everywhere
				$syms{"PEM_read_bio_${1}"} = 1;
				$def .= "int PEM_read_bio_$1(void);";
			} elsif (
				($tag{'TRUE'} != -1)
				&& ($tag{'CONST_STRICT'} != 1)