Annotation of /trunk/mkinitrd-magellan/klibc/usr/klibc/makeerrlist.pl
Parent Directory | 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)
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 | } |