params: update generation script to support multiple TRIE output

Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/27392)
This commit is contained in:
Pauli 2025-04-16 17:12:59 +10:00 committed by Tomas Mraz
parent b747a48bb1
commit 7a10ecd405
1 changed files with 30 additions and 24 deletions

View File

@ -676,13 +676,19 @@ sub generate_internal_macros {
} }
sub generate_trie { sub generate_trie {
my @keys = @_;
my %trie; my %trie;
my $nodes = 0; my $nodes = 0;
my $chars = 0; my $chars = 0;
foreach my $name (sort keys %params) { foreach my $name (sort @keys) {
my $val = $params{$name}; my $val = $params{$name};
if (substr($val, 0, 1) ne '*') { 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; my $cursor = \%trie;
$chars += length($val); $chars += length($val);
@ -702,7 +708,6 @@ sub generate_trie {
} }
$cursor->{'val'} = $name; $cursor->{'val'} = $name;
} }
}
#print "\n\n/* $nodes nodes for $chars letters*/\n\n"; #print "\n\n/* $nodes nodes for $chars letters*/\n\n";
return %trie; return %trie;
} }
@ -715,8 +720,6 @@ sub generate_code_from_trie {
my $indent1 = $indent0 . $idt; my $indent1 = $indent0 . $idt;
my $strcmp = $case_sensitive ? 'strcmp' : 'strcasecmp'; my $strcmp = $case_sensitive ? 'strcmp' : 'strcasecmp';
print "int ossl_param_find_pidx(const char *s)\n{\n" if $n == 0;
if ($trieref->{'suffix'}) { if ($trieref->{'suffix'}) {
my $suf = $trieref->{'suffix'}; my $suf = $trieref->{'suffix'};
@ -750,7 +753,6 @@ sub generate_code_from_trie {
} }
} }
printf "%s}\n", $indent0; printf "%s}\n", $indent0;
print " return -1;\n}\n" if $n == 0;
return ""; return "";
} }
@ -781,12 +783,16 @@ sub locate_long_endings {
} }
sub produce_decoder { sub produce_decoder {
my %t = generate_trie(); my $func_name = shift;
my @keys = @_;
my %t = generate_trie(@keys);
my $s; my $s;
locate_long_endings(\%t); locate_long_endings(\%t);
open local *STDOUT, '>', \$s; open local *STDOUT, '>', \$s;
printf "int %s(const char *s)\n{\n", $func_name;
generate_code_from_trie(0, \%t); generate_code_from_trie(0, \%t);
print " return -1;\n}\n";
return $s; return $s;
} }