|
@@ -60,7 +60,7 @@ my %nsfirst;
|
|
my %nscount;
|
|
my %nscount;
|
|
my @varname = (undef);
|
|
my @varname = (undef);
|
|
my @varenum = ('sysvar_null');
|
|
my @varenum = ('sysvar_null');
|
|
-my @vartype = ("\t[sysvar_null] = SYSVAR_TYPE(nulltype),\n");
|
|
|
|
|
|
+my %vartype = ('sysvar_null' => 'SYSVAR_NULLTYPE');
|
|
my @vardef;
|
|
my @vardef;
|
|
|
|
|
|
my $cnt = 1;
|
|
my $cnt = 1;
|
|
@@ -73,7 +73,7 @@ foreach my $ns (@nslist) {
|
|
my $ename = c_name($ns.'.'.$var);
|
|
my $ename = c_name($ns.'.'.$var);
|
|
push(@varenum, $ename);
|
|
push(@varenum, $ename);
|
|
|
|
|
|
- push(@vartype, "\t[$ename] = SYSVAR_TYPE($type),\n");
|
|
|
|
|
|
+ $vartype{$ename} = "SYSVAR_TYPE(_$type)";
|
|
if (defined($defval)) {
|
|
if (defined($defval)) {
|
|
# Add mangling here if needed
|
|
# Add mangling here if needed
|
|
push(@vardef, "\t[$ename] = { .v_$type = $defval },\n");
|
|
push(@vardef, "\t[$ename] = { .v_$type = $defval },\n");
|
|
@@ -88,8 +88,6 @@ my $htag = c_name(uc(basename($hfile)));
|
|
print $h "#ifndef $htag\n";
|
|
print $h "#ifndef $htag\n";
|
|
print $h "#define $htag\n\n";
|
|
print $h "#define $htag\n\n";
|
|
|
|
|
|
-print $h "#include \"sysvar_common.h\"\n\n";
|
|
|
|
-
|
|
|
|
print $h "enum sysvar_ns_enum {\n";
|
|
print $h "enum sysvar_ns_enum {\n";
|
|
print $h map { "\tsysvar_ns_$_,\n" } @nslist;
|
|
print $h map { "\tsysvar_ns_$_,\n" } @nslist;
|
|
print $h "\tsysvar_nscount\n};\n\n";
|
|
print $h "\tsysvar_nscount\n};\n\n";
|
|
@@ -102,20 +100,39 @@ push(@varenum, 'sysvar_count');
|
|
|
|
|
|
print $h "\n";
|
|
print $h "\n";
|
|
|
|
|
|
-printf $h "extern_c const sysvar_ns_t sysvar_ns[%d];\n", scalar(@nslist);
|
|
|
|
-print $h "extern_c const char * const sysvar_name[$cnt];\n";
|
|
|
|
-print $h "extern_c const sysvar_type_t sysvar_type[$cnt];\n";
|
|
|
|
-print $h "extern_c const sysvar_t sysvar_defval[$cnt];\n";
|
|
|
|
-print $h "extern_c sysvar_t sysvar_val[$cnt];\n";
|
|
|
|
-print $h "extern_c bool sysvar_isset[$cnt];\n";
|
|
|
|
-print $h "extern_c enum sysvars_enum sysvar_changed;\n";
|
|
|
|
|
|
+# Sometimes it is convenient to have this as a preprocessor symbol
|
|
|
|
+print $h "#define SYSVAR_COUNT $cnt\n\n";
|
|
|
|
+
|
|
|
|
+print $h "extern_c const char * const sysvar_name[sysvar_count];\n";
|
|
|
|
+print $h "extern_c const sysvar_type_t sysvar_types[sysvar_count];\n";
|
|
|
|
+print $h "extern_c const sysvar_t sysvar_defval[sysvar_count];\n";
|
|
|
|
+print $h "extern_c sysvar_t sysvar_val[sysvar_count];\n";
|
|
|
|
+print $h "extern_c bool sysvar_isset[sysvar_count];\n\n";
|
|
|
|
+
|
|
|
|
+print $h "static inline sysvar_type_t sysvar_type(size_t var)\n";
|
|
|
|
+print $h "{\n";
|
|
|
|
+print $h "\tif (!__builtin_constant_p(var)) {\n";
|
|
|
|
+print $h "\t\tif(var >= (size_t)sysvar_count)\n";
|
|
|
|
+print $h "\t\t\treturn SYSVAR_NULLTYPE;\n";
|
|
|
|
+print $h "\t\telse\n";
|
|
|
|
+print $h "\t\t\treturn sysvar_types[var];\n";
|
|
|
|
+print $h "\t}\n\n";
|
|
|
|
+print $h "\tswitch(var) {\n";
|
|
|
|
+foreach my $v (@varenum) {
|
|
|
|
+ next unless (defined($vartype{$v}));
|
|
|
|
+ print $h "\t\tcase ", $v, ":\n";
|
|
|
|
+ print $h "\t\t\treturn ", $vartype{$v}, ";\n";
|
|
|
|
+}
|
|
|
|
+print $h "\t\tdefault:\n";
|
|
|
|
+print $h "\t\t\treturn SYSVAR_NULLTYPE;\n";
|
|
|
|
+print $h "\t};\n";
|
|
|
|
+print $h "}\n\n";
|
|
|
|
|
|
-print $h "\n#endif /* $htag */\n";
|
|
|
|
|
|
+print $h "#endif /* $htag */\n";
|
|
close($h);
|
|
close($h);
|
|
|
|
|
|
open(my $c, '>', $cfile) or die "$0:$cfile: $!\n";
|
|
open(my $c, '>', $cfile) or die "$0:$cfile: $!\n";
|
|
-print $c "#include <stddef.h>\n";
|
|
|
|
-print $c "#include \"", basename($hfile), "\"\n\n";
|
|
|
|
|
|
+print $c "#include \"sysvars.h\"\n\n";
|
|
|
|
|
|
printf $c "const sysvar_ns_t sysvar_ns[%d] = {\n", scalar(@nslist);
|
|
printf $c "const sysvar_ns_t sysvar_ns[%d] = {\n", scalar(@nslist);
|
|
foreach my $ns (@nslist) {
|
|
foreach my $ns (@nslist) {
|
|
@@ -134,8 +151,11 @@ foreach my $ns (@nslist) {
|
|
}
|
|
}
|
|
print $c "};\n";
|
|
print $c "};\n";
|
|
|
|
|
|
-print $c "const sysvar_type_t sysvar_type[$cnt] = {\n";
|
|
|
|
-print $c @vartype;
|
|
|
|
|
|
+print $c "const sysvar_type_t sysvar_types[$cnt] = {\n";
|
|
|
|
+foreach my $v (@varenum) {
|
|
|
|
+ next unless (defined($vartype{$v}));
|
|
|
|
+ print $c "\t[$v] = ", $vartype{$v}, ",\n";
|
|
|
|
+}
|
|
print $c "};\n";
|
|
print $c "};\n";
|
|
|
|
|
|
print $c "const sysvar_t sysvar_defval[$cnt] = {\n";
|
|
print $c "const sysvar_t sysvar_defval[$cnt] = {\n";
|