summaryrefslogtreecommitdiff
path: root/source4/script/mkproto.pl
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2003-11-23 02:33:46 +0000
committerAndrew Tridgell <tridge@samba.org>2003-11-23 02:33:46 +0000
commit5577992f256f6fa7721872e9cd410f8814865109 (patch)
tree236ccff49ab10d9ed62de2bb8571ec4bc7c1a7e2 /source4/script/mkproto.pl
parentb9dd8d34a05cae001b7e05df606d6ad040fa6f06 (diff)
downloadsamba-5577992f256f6fa7721872e9cd410f8814865109.tar.gz
samba-5577992f256f6fa7721872e9cd410f8814865109.tar.bz2
samba-5577992f256f6fa7721872e9cd410f8814865109.zip
much faster inner loop and neater code
(This used to be commit 9ea02c51d449095b7f17edb3fb82d3722cdd9c20)
Diffstat (limited to 'source4/script/mkproto.pl')
-rw-r--r--source4/script/mkproto.pl112
1 files changed, 54 insertions, 58 deletions
diff --git a/source4/script/mkproto.pl b/source4/script/mkproto.pl
index 662fda1f41..de8a8c3a19 100644
--- a/source4/script/mkproto.pl
+++ b/source4/script/mkproto.pl
@@ -25,7 +25,7 @@ sub print_footer {
sub handle_loadparm {
my $line = shift;
- if ($line =~ /^FN_(GLOBAL|LOCAL)_(CONST_STRING|STRING|BOOL|CHAR|INTEGER|LIST)\((\w+),.*\)/) {
+ if ($line =~ /^FN_(GLOBAL|LOCAL)_(CONST_STRING|STRING|BOOL|CHAR|INTEGER|LIST)\((\w+),.*\)/o) {
my $scope = $1;
my $type = $2;
my $name = $3;
@@ -49,79 +49,75 @@ sub handle_loadparm {
}
-sub process_files {
+sub process_file($)
+{
+ my $filename = shift;
my $line;
my $inheader;
my $gotstart;
- FILE: foreach my $filename (@ARGV) {
- next FILE unless (open(FH, "< $filename")); # skip over file unless it can be opened
- print "\n/* The following definitions come from $filename */\n\n";
-
- $inheader = 0;
- $gotstart = 0;
- LINE: while (defined($line = <FH>)) {
-
- if ($inheader) {
- # this chomp is somewhat expensive, so don't do it unless we know
- # that we probably want to use it
- chomp $line;
- if ($line =~ /\)\s*$/o) {
- $inheader = 0;
- print "$line;\n";
- } else {
- print "$line\n";
- }
- next LINE;
- }
-
- $gotstart = 0;
+ open(FH, "< $filename") || die "Failed to open $filename";
- # ignore static and extern declarations
- if ($line =~ /^static|^extern/o ||
- $line !~ /^[a-zA-Z]/o ||
- $line =~ /[;]/o) {
- next LINE;
- }
+ $inheader = 0;
+ $gotstart = 0;
+ print "\n/* The following definitions come from $filename */\n\n";
- if ($line =~ /^FN_/) {
- handle_loadparm($line);
- }
-
-
- # I'm going to leave these as is for now - perl can probably handle larger regex, though -- vance
- # I've also sort of put these in approximate order of most commonly called
-
- if ( $line =~ /
- ^void|^BOOL|^int|^struct|^char|^const|^\w+_[tT]\s|^uint|^unsigned|^long|
- ^NTSTATUS|^ADS_STATUS|^enum\s.*\(|^DATA_BLOB|^WERROR|^XFILE|^FILE|^DIR|
- ^double|^TDB_CONTEXT|^TDB_DATA|^TALLOC_CTX|^NTTIME
- /x) {
- $gotstart = 1;
- }
+ while ($line = <FH>) {
+ # this ignores most lines
+ next if ($line =~ /^\s/);
+
+ $gotstart = 0;
+
+ if ($line =~ /^static|^extern/o ||
+ $line !~ /^[a-zA-Z]/o ||
+ $line =~ /[;]/o) {
+ next;
+ }
+
+ if ($line =~ /^FN_/) {
+ handle_loadparm($line);
+ }
+ next unless ($line =~ /\(/);
+
+ if ( $line =~ /
+ ^void|^BOOL|^int|^struct|^char|^const|^\w+_[tT]\s|^uint|^unsigned|^long|
+ ^NTSTATUS|^ADS_STATUS|^enum\s.*\(|^DATA_BLOB|^WERROR|^XFILE|^FILE|^DIR|
+ ^double|^TDB_CONTEXT|^TDB_DATA|^TALLOC_CTX|^NTTIME
+ /xo) {
+ $gotstart = 1;
+ }
+
+
+ # goto next line if we don't have a start
+ next unless $gotstart;
+
+ if ( $line =~ /\(.*\)\s*$/o ) {
+ chomp $line;
+ print "$line;\n";
+ next;
+ }
- # goto next line if we don't have a start
- next LINE unless $gotstart;
+ print $line;
- if ( $line =~ /\(.*\)\s*$/o ) {
- # now that we're here, we know we
- chomp $line;
+ while ($line = <FH>) {
+ chomp $line;
+ if ($line =~ /\)\s*$/o) {
print "$line;\n";
- next LINE;
- }
- elsif ( $line =~ /\(/o ) {
-
- $inheader = 1;
- # line hasn't been chomped, so we can assume it already has the \n
- print $line;
- next LINE;
+ last;
}
+ print "$line\n";
}
}
}
+sub process_files {
+ foreach my $filename (@ARGV) {
+ process_file($filename);
+ }
+}
+
print_header();
process_files();
print_footer();