Magellan Linux

Annotation of /trunk/mkinitrd-magellan/klibc/usr/klibc/makeerrlist.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (hide annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (17 years ago) by niro
File MIME type: text/plain
File size: 2402 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 niro 532 #!/usr/bin/perl
2     #
3     # This creates sys_errlist from <asm/errno.h> through somewhat
4     # heuristic matching. It presumes the relevant entries are of the form
5     # #define Exxxx <integer> /* comment */
6     #
7    
8     use FileHandle;
9    
10     %errors = ();
11     %errmsg = ();
12     $maxerr = -1;
13     @includelist = (); # Include directories
14    
15     sub parse_file($) {
16     my($file) = @_;
17     my($fh) = new FileHandle;
18     my($line, $error, $msg);
19     my($kernelonly) = 0;
20     my($root);
21    
22     print STDERR "opening $file\n" unless ( $quiet );
23    
24     $ok = 0;
25     foreach $root ( @includelist ) {
26     if ( $fh->open($root.'//'.$file, '<') ) {
27     $ok = 1;
28     last;
29     }
30     }
31    
32     if ( ! $ok ) {
33     die "$0: Cannot find file $file\n";
34     }
35    
36     while ( defined($line = <$fh>) ) {
37     if ( $kernelonly ) {
38     if ( $line =~ /^\#\s*endif/ ) {
39     $kernelonly--;
40     } elsif ( $line =~ /^\#\sif/ ) {
41     $kernelonly++;
42     }
43     } else {
44     if ( $line =~ /^\#\s*define\s+([A-Z0-9_]+)\s+([0-9]+)\s*\/\*\s*(.*\S)\s*\*\// ) {
45     $error = $1;
46     $errno = $2+0;
47     $msg = $3;
48     print STDERR "$error ($errno) => \"$msg\"\n" unless ( $quiet );
49     $errors{$errno} = $error;
50     $errmsg{$errno} = $msg;
51     $maxerr = $errno if ( $errno > $maxerr );
52     } elsif ( $line =~ /^\#\s*include\s+[\<\"](.*)[\>\"]/ ) {
53     parse_file($1);
54     } elsif ( $line =~ /^\#\s*ifdef\s+__KERNEL__/ ) {
55     $kernelonly++;
56     }
57     }
58     }
59     close($fh);
60     print STDERR "closing $file\n" unless ( $quiet );
61     }
62    
63     $v = $ENV{'KBUILD_VERBOSE'};
64     $quiet = defined($v) ? !$v : 0;
65    
66     foreach $arg ( @ARGV ) {
67     if ( $arg eq '-q' ) {
68     $quiet = 1;
69     } elsif ( $arg =~ /^-(errlist|errnos|maxerr)$/ ) {
70     $type = $arg;
71     } elsif ( $arg =~ '^\-I' ) {
72     push(@includelist, "$'");
73     } else {
74     # Ignore
75     }
76     }
77    
78     parse_file('linux/errno.h');
79    
80     if ( $type eq '-errlist' ) {
81     print "#include <errno.h>\n";
82     printf "const int sys_nerr = %d;\n", $maxerr+1;
83     printf "const char * const sys_errlist[%d] = {\n", $maxerr+1;
84     foreach $e ( sort(keys(%errors)) ) {
85     printf " [%s] = \"%s\",\n", $errors{$e}, $errmsg{$e};
86     }
87     print "};\n";
88     } elsif ( $type eq '-errnos' ) {
89     print "#include <errno.h>\n";
90     printf "const int sys_nerr = %d;\n", $maxerr+1;
91     printf "const char * const sys_errlist[%d] = {\n", $maxerr+1;
92     foreach $e ( sort(keys(%errors)) ) {
93     printf " [%s] = \"%s\",\n", $errors{$e}, $errors{$e};
94     }
95     print "};\n";
96     } elsif ( $type eq '-maxerr' ) {
97     print $maxerr, "\n";
98     }