diff options
author | Tim Potter <tpot@samba.org> | 2004-06-08 12:33:47 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:56:37 -0500 |
commit | eaae8b6f5f21c758db90a1008e91967fcfbc3513 (patch) | |
tree | 06117ae9967cc6b7dca20a5da8b9e24ef18f432b /source4 | |
parent | f3826432fb14b1e10516afe9f6525aab7c1b720f (diff) | |
download | samba-eaae8b6f5f21c758db90a1008e91967fcfbc3513.tar.gz samba-eaae8b6f5f21c758db90a1008e91967fcfbc3513.tar.bz2 samba-eaae8b6f5f21c758db90a1008e91967fcfbc3513.zip |
r1083: Generate prototypes for structs and unions marked "public" in the idl.
Delete various hacks to work around not doing this before.
(This used to be commit 5c3c3d3e72d8dd5d995a5bc5b2c7d7217b7c0432)
Diffstat (limited to 'source4')
-rw-r--r-- | source4/build/pidl/eparser.pm | 52 | ||||
-rw-r--r-- | source4/build/pidl/packet-dcerpc-eparser.c | 13 | ||||
-rw-r--r-- | source4/build/pidl/packet-dcerpc-eparser.h | 9 | ||||
-rwxr-xr-x | source4/build/pidl/pidl.pl | 6 |
4 files changed, 43 insertions, 37 deletions
diff --git a/source4/build/pidl/eparser.pm b/source4/build/pidl/eparser.pm index fb8d0e39ca..fd2f721f36 100644 --- a/source4/build/pidl/eparser.pm +++ b/source4/build/pidl/eparser.pm @@ -785,7 +785,7 @@ sub ParseInterface($) my($data) = $interface->{DATA}; foreach my $d (@{$data}) { - if ($d->{TYPE} eq "TYPEDEF") { + if ($d->{TYPE} eq "TYPEDEF") { $structs{$d->{NAME}} = $d; } } @@ -827,8 +827,6 @@ sub NeededFunction($) 'ft' => type2ft($e->{TYPE}), 'base' => type2base($e->{TYPE}) }; - $needed{"proto_$e->{TYPE}"} = 1, - if !util::is_builtin_type($e->{TYPE}); $e->{PARENT} = $fn; } } @@ -851,9 +849,6 @@ sub NeededTypedef($) 'base' => type2base($e->{TYPE}) }; - $needed{"proto_$e->{TYPE}"} = 1, - if !util::is_builtin_type($e->{TYPE}); - $e->{PARENT} = $t->{DATA}; if ($needed{"pull_$t->{NAME}"}) { $needed{"pull_$e->{TYPE}"} = 1; @@ -861,11 +856,9 @@ sub NeededTypedef($) } } if ($t->{DATA}->{TYPE} eq "UNION") { - $needed{"proto_$t->{NAME}"} = "union"; for my $e (@{$t->{DATA}->{DATA}}) { $e->{PARENT} = $t->{DATA}; if ($e->{TYPE} eq "UNION_ELEMENT") { - $needed{"proto_$e->{DATA}->{TYPE}"} = 1; if ($needed{"pull_$t->{NAME}"}) { $needed{"pull_$e->{DATA}->{TYPE}"} = 1; } @@ -901,6 +894,36 @@ sub ModuleHeader($) $if_endpoints = $h->{PROPERTIES}->{endpoints}; } +sub ParseHeader($$) +{ + my($idl) = shift; + my($filename) = shift; + + open(OUT, ">$filename") || die "can't open $filename"; + + pidl "/* parser auto-generated by pidl */\n\n"; + + foreach my $x (@{$idl}) { + if ($x->{TYPE} eq "INTERFACE") { + foreach my $d (@{$x->{DATA}}) { + if ($d->{TYPE} eq "TYPEDEF" and + util::has_property($d->{DATA}, "public")) { + + if ($d->{DATA}{TYPE} eq "STRUCT") { + pidl "void ndr_pull_$d->{NAME}(struct e_ndr_pull *ndr, int ndr_flags);\n"; + } + + if ($d->{DATA}{TYPE} eq "UNION") { + pidl "void ndr_pull_$d->{NAME}(struct e_ndr_pull *ndr, int ndr_flags, int level);\n"; + } + } + } + } + } + + close(OUT); +} + ##################################################################### # parse a parsed IDL structure back into an IDL file sub Parse($$) @@ -944,19 +967,6 @@ sub Parse($$) pidl "static int $y = -1;\n", if $y =~ /^hf_/; } - # Function prototypes - - foreach my $x (keys(%needed)) { - next, if !($x =~ /^proto_/); - my $name = $x; - $name =~ s/^proto_//; - pidl "void ndr_pull_$name(struct e_ndr_pull *ndr, int ndr_flags"; - - pidl ", int level", if $needed{$x} eq "union"; - - pidl ");\n"; - } - ParseInterface($x); } } diff --git a/source4/build/pidl/packet-dcerpc-eparser.c b/source4/build/pidl/packet-dcerpc-eparser.c index ae559e878a..8b828da38e 100644 --- a/source4/build/pidl/packet-dcerpc-eparser.c +++ b/source4/build/pidl/packet-dcerpc-eparser.c @@ -162,16 +162,3 @@ void ndr_pull_subcontext_header(struct e_ndr_pull *ndr, struct e_ndr_pull *ndr2) { } - -void ndr_pull_lsa_SidArray(struct e_ndr_pull *ndr, int ndr_flags) -{ -} - -void ndr_pull_samr_LogonHours(struct e_ndr_pull *ndr, int ndr_flags) -{ -} - -void ndr_pull_samr_Password(struct e_ndr_pull *ndr, int ndr_flags) -{ -} - diff --git a/source4/build/pidl/packet-dcerpc-eparser.h b/source4/build/pidl/packet-dcerpc-eparser.h index e8b89e6600..5c26a40b3d 100644 --- a/source4/build/pidl/packet-dcerpc-eparser.h +++ b/source4/build/pidl/packet-dcerpc-eparser.h @@ -1,3 +1,6 @@ +#ifndef _packet_dcerpc_eparser_h +#define _packet_dcerpc_eparser_h + #define NDR_SCALARS 1 #define NDR_BUFFERS 2 @@ -45,6 +48,8 @@ struct ndr_ofs_list { struct ndr_ofs_list *next; }; +#include "packet-dcerpc-proto.h" + /* Create a ndr_pull structure from data stored in a tvb at a given offset. */ struct e_ndr_pull *ndr_pull_init(tvbuff_t *tvb, int offset, packet_info *pinfo, @@ -75,6 +80,4 @@ void ndr_pull_string(struct e_ndr_pull *e_ndr, int hf); void ndr_pull_dom_sid2(struct e_ndr_pull *e_ndr, int hf); void ndr_pull_security_descriptor(struct e_ndr_pull *e_ndr, int hf); -void ndr_pull_lsa_SidArray(struct e_ndr_pull *ndr, int ndr_flags); -void ndr_pull_samr_LogonHours(struct e_ndr_pull *ndr, int ndr_flags); -void ndr_pull_samr_Password(struct e_ndr_pull *ndr, int ndr_flags); +#endif /* _packet_dcerpc_eparser_h */ diff --git a/source4/build/pidl/pidl.pl b/source4/build/pidl/pidl.pl index 1c122932ba..cebd545297 100755 --- a/source4/build/pidl/pidl.pl +++ b/source4/build/pidl/pidl.pl @@ -146,6 +146,12 @@ sub process_file($) if ($opt_eparser) { my($parser) = dirname($output) . "/packet-dcerpc-$basename.c"; IdlEParser::Parse($pidl, $parser); + $parser = dirname($output) . "/packet-dcerpc-proto-$basename.h"; + IdlEParser::ParseHeader($pidl, $parser); + my($header) = dirname($output) . "/packet-dcerpc-proto.h"; + open(OUT, ">>$header") || die "can't open $header"; + print OUT "#include \"packet-dcerpc-proto-$basename.h\"\n"; + close(OUT); } if ($opt_diff) { |