aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/pidl/lib/Parse/Pidl/Wireshark/Conformance.pm52
-rw-r--r--tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm10
2 files changed, 57 insertions, 5 deletions
diff --git a/tools/pidl/lib/Parse/Pidl/Wireshark/Conformance.pm b/tools/pidl/lib/Parse/Pidl/Wireshark/Conformance.pm
index fbdaa9ab19..d2d99f0158 100644
--- a/tools/pidl/lib/Parse/Pidl/Wireshark/Conformance.pm
+++ b/tools/pidl/lib/Parse/Pidl/Wireshark/Conformance.pm
@@ -396,6 +396,7 @@ sub ReadConformanceFH($$$)
my ($fh,$data,$f) = @_;
my $incodeblock = 0;
+ my $inheaderblock = 0;
my $ln = 0;
@@ -407,9 +408,27 @@ sub ReadConformanceFH($$$)
s/[\r\n]//g;
if ($_ eq "CODE START") {
+ if ($incodeblock) {
+ warning({ FILE => $f, LINE => $ln },
+ "CODE START inside CODE section");
+ }
+ if ($inheaderblock) {
+ error({ FILE => $f, LINE => $ln },
+ "CODE START inside HEADER section");
+ return undef;
+ }
$incodeblock = 1;
next;
- } elsif ($incodeblock and $_ eq "CODE END") {
+ } elsif ($_ eq "CODE END") {
+ if (!$incodeblock) {
+ warning({ FILE => $f, LINE => $ln },
+ "CODE END outside CODE section");
+ }
+ if ($inheaderblock) {
+ error({ FILE => $f, LINE => $ln },
+ "CODE END inside HEADER section");
+ return undef;
+ }
$incodeblock = 0;
next;
} elsif ($incodeblock) {
@@ -419,6 +438,37 @@ sub ReadConformanceFH($$$)
$data->{override} = "$_\n";
}
next;
+ } elsif ($_ eq "HEADER START") {
+ if ($inheaderblock) {
+ warning({ FILE => $f, LINE => $ln },
+ "HEADER START inside HEADER section");
+ }
+ if ($incodeblock) {
+ error({ FILE => $f, LINE => $ln },
+ "HEADER START inside CODE section");
+ return undef;
+ }
+ $inheaderblock = 1;
+ next;
+ } elsif ($_ eq "HEADER END") {
+ if (!$inheaderblock) {
+ warning({ FILE => $f, LINE => $ln },
+ "HEADER END outside HEADER section");
+ }
+ if ($incodeblock) {
+ error({ FILE => $f, LINE => $ln },
+ "CODE END inside HEADER section");
+ return undef;
+ }
+ $inheaderblock = 0;
+ next;
+ } elsif ($inheaderblock) {
+ if (exists $data->{header}) {
+ $data->{header}.="$_\n";
+ } else {
+ $data->{header} = "$_\n";
+ }
+ next;
}
my @fields = /([^ "]+|"[^"]+")/g;
diff --git a/tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm b/tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm
index ff1bf77aeb..f443069e0c 100644
--- a/tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm
+++ b/tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm
@@ -930,6 +930,10 @@ sub ProcessInterface($$)
$self->RegisterInterface($x);
$self->RegisterInterfaceHandoff($x);
+ if (exists ($self->{conformance}->{header})) {
+ $self->pidl_hdr($self->{conformance}->{header});
+ }
+
$self->pidl_hdr("#endif /* $define */");
}
@@ -1012,7 +1016,7 @@ sub Parse($$$$$)
my $notice =
"/* DO NOT EDIT
- This filter was automatically generated
+ This file was automatically generated by Pidl
from $idl_file and $cnf_file.
Pidl is a perl based IDL compiler for DCE/RPC idl files.
@@ -1025,8 +1029,6 @@ sub Parse($$$$$)
";
- $self->pidl_hdr($notice);
-
$self->{res}->{headers} = "\n";
$self->{res}->{headers} .= "#include \"config.h\"\n";
@@ -1075,7 +1077,7 @@ sub Parse($$$$$)
}
$parser.=$self->{res}->{code};
- my $header = "/* autogenerated by pidl */\n\n";
+ my $header = $notice;
$header.=$self->{res}->{hdr};
$self->CheckUsed($self->{conformance});