mirror of https://github.com/openssl/openssl.git
				
				
				
			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:
		
							parent
							
								
									b747a48bb1
								
							
						
					
					
						commit
						7a10ecd405
					
				|  | @ -676,32 +676,37 @@ 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; | ||||||
|             my $cursor = \%trie; |         while (substr($val, 0, 1) eq '*') { | ||||||
| 
 |             $val = $params{substr($val, 1)}; | ||||||
|             $chars += length($val); |             die("Unknown referenced parameter from '$name'\n") | ||||||
|             for my $i (0 .. length($val) - 1) { |                 if !defined $val; | ||||||
|                 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}; |  | ||||||
|             } |  | ||||||
|             $cursor->{'val'} = $name; |  | ||||||
|         } |         } | ||||||
|  |         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}; | ||||||
|  |         } | ||||||
|  |         $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; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue