From: Pauli Date: Wed, 16 Apr 2025 07:12:59 +0000 (+1000) Subject: params: update generation script to support multiple TRIE output X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a10ecd4051152b1eb47376811d8a6e2ef531f9c;p=thirdparty%2Fopenssl.git params: update generation script to support multiple TRIE output Reviewed-by: Dmitry Belyavskiy Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/27392) --- diff --git a/util/perl/OpenSSL/paramnames.pm b/util/perl/OpenSSL/paramnames.pm index f9acf037640..a51642ee4bb 100644 --- a/util/perl/OpenSSL/paramnames.pm +++ b/util/perl/OpenSSL/paramnames.pm @@ -676,32 +676,37 @@ sub generate_internal_macros { } sub generate_trie { + my @keys = @_; my %trie; my $nodes = 0; my $chars = 0; - foreach my $name (sort keys %params) { + foreach my $name (sort @keys) { my $val = $params{$name}; - if (substr($val, 0, 1) ne '*') { - my $cursor = \%trie; - - $chars += length($val); - for my $i (0 .. length($val) - 1) { - my $c = substr($val, $i, 1); - - if (not $case_sensitive) { - $c = '_' if $c eq '-'; - $c = lc $c; - } - - if (not defined $$cursor{$c}) { - $cursor->{$c} = {}; - $nodes++; - } - $cursor = $cursor->{$c}; + die("Unknown parameter name '$name'\n") if !defined $val; + while (substr($val, 0, 1) eq '*') { + $val = $params{substr($val, 1)}; + die("Unknown referenced parameter from '$name'\n") + if !defined $val; + } + my $cursor = \%trie; + + $chars += length($val); + for my $i (0 .. length($val) - 1) { + my $c = substr($val, $i, 1); + + if (not $case_sensitive) { + $c = '_' if $c eq '-'; + $c = lc $c; + } + + if (not defined $$cursor{$c}) { + $cursor->{$c} = {}; + $nodes++; } - $cursor->{'val'} = $name; + $cursor = $cursor->{$c}; } + $cursor->{'val'} = $name; } #print "\n\n/* $nodes nodes for $chars letters*/\n\n"; return %trie; @@ -715,8 +720,6 @@ sub generate_code_from_trie { my $indent1 = $indent0 . $idt; my $strcmp = $case_sensitive ? 'strcmp' : 'strcasecmp'; - print "int ossl_param_find_pidx(const char *s)\n{\n" if $n == 0; - if ($trieref->{'suffix'}) { my $suf = $trieref->{'suffix'}; @@ -750,7 +753,6 @@ sub generate_code_from_trie { } } printf "%s}\n", $indent0; - print " return -1;\n}\n" if $n == 0; return ""; } @@ -781,12 +783,16 @@ sub locate_long_endings { } sub produce_decoder { - my %t = generate_trie(); + my $func_name = shift; + my @keys = @_; + my %t = generate_trie(@keys); my $s; locate_long_endings(\%t); open local *STDOUT, '>', \$s; + printf "int %s(const char *s)\n{\n", $func_name; generate_code_from_trie(0, \%t); + print " return -1;\n}\n"; return $s; }