[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

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: }