[BACK]Return to mkdefaults CVS log [TXT][DIR] Up to [local] / src / usr.bin / sudo

Annotation of src/usr.bin/sudo/mkdefaults, Revision 1.1.2.1

1.1       millert     1: #!/usr/bin/perl -w
                      2: #
                      3: # Generate sudo_defs_table and associated defines
                      4: #
                      5: # Input should be formatted thusly:
                      6: #
                      7: # var_name
                      8: #      TYPE
                      9: #      description (or NULL)
                     10:
                     11: # Deal with optional -o (output) argument
                     12: if ($#ARGV > 0 && $ARGV[0] eq "-o") {
                     13:     shift;
                     14:     $header = $cfile = shift;
                     15:     $header .= '.h';
                     16:     $cfile .= '.c';
                     17: }
                     18: die "usage: $0 input_file" unless $#ARGV == 0;
                     19:
                     20: $infile = $ARGV[0];
                     21: if (!defined($header)) {
                     22:     $header = $infile;
                     23:     $header =~ s/(\.in)?$/.h/;
                     24: }
                     25: if (!defined($cfile)) {
                     26:     $cfile = $infile;
                     27:     $cfile =~ s/(\.in)?$/.c/;
                     28: }
                     29:
                     30: open(IN, "<$infile") || die "$0: can't open $infile: $!\n";
                     31: open(HEADER, ">$header") || die "$0: can't open $header: $!\n";
                     32: open(CFILE, ">$cfile") || die "$0: can't open $cfile: $!\n";
                     33:
                     34: print CFILE "struct sudo_defs_types sudo_defs_table[] = {\n    {\n";
                     35:
                     36: $count = -1;
                     37: while(<IN>) {
                     38:     chomp;
                     39:     next if /^\s*$/;
                     40:     next if /^\s*#/;
                     41:
                     42:     if (/^\S/) {
                     43:        # Print last record
                     44:        &print_record() if defined($var);
                     45:
                     46:        $var = $_;
                     47:        ($type, $desc) = (undef, undef);
                     48:        $count++;
                     49:     } else {
                     50:        s/^\s+//;
                     51:        s/\s+$//;
                     52:        die "$0: syntax error near line $.\n" if
                     53:            defined($type) && defined($desc);
                     54:        next if /^NULL$/;
                     55:        if (defined($type)) {
                     56:            # Strip leading and trailing double quote and escape the rest
                     57:            s/^"//;
                     58:            s/"$//;
                     59:            s/"/\\"/g;
                     60:            $desc = "\"$_\"";
                     61:        } else {
                     62:            $type = $_;
                     63:        }
                     64:     }
                     65: }
                     66: &print_record();
                     67: print CFILE "\tNULL, 0, NULL\n    }\n};\n";
                     68:
                     69: close(IN);
                     70: close(HEADER);
                     71: close(CFILE);
                     72:
                     73: sub print_record {
                     74:     $defname = "I_" . uc($var);
                     75:     printf HEADER "#define %-24s%d", $defname, $count;
                     76:     #print HEADER "\t/* $desc */" if defined($desc);
                     77:     print HEADER "\n";
                     78:
                     79:     $desc = "NULL" unless defined($desc);
                     80:     print CFILE "\t\"$var\", $type,\n\t$desc\n    }, {\n";
                     81: }