r15470: Write header file with prototypes for Samba3-Client-With-Samba4-NDR code.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 6 May 2006 11:44:00 +0000 (11:44 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:05:38 +0000 (14:05 -0500)
(This used to be commit a2bb0b6012b14787825a9cd5f33e2c0e989b65a7)

source4/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
source4/pidl/pidl

index ec3287ffb00df304d4be00c39be5583ad8e1e315..92bb440e7cdcc4e5bcfc141b8a5d1cf5a7490fb0 100644 (file)
@@ -15,13 +15,16 @@ use Parse::Pidl::Samba3::Types qw(DeclLong);
 use vars qw($VERSION);
 $VERSION = '0.01';
 
-my $res = "";
+my $res;
+my $res_hdr;
 my $tabs = "";
 sub indent() { $tabs.="\t"; }
 sub deindent() { $tabs = substr($tabs, 1); }
 sub pidl($) { $res .= $tabs.(shift)."\n"; }
+sub pidl_hdr($) { $res_hdr .= (shift)."\n"; }
 sub fatal($$) { my ($e,$s) = @_; die("$e->{ORIGINAL}->{FILE}:$e->{ORIGINAL}->{LINE}: $s\n"); }
 sub warning($$) { my ($e,$s) = @_; warn("$e->{ORIGINAL}->{FILE}:$e->{ORIGINAL}->{LINE}: $s\n"); }
+sub fn_declare($) { my ($n) = @_; pidl $n; pidl_hdr "$n;"; }
 
 sub CopyLevel($$$$)
 {
@@ -51,12 +54,12 @@ sub ParseFunction($$)
        my $inargs = "";
        my $defargs = "";
        my $uif = uc($if->{NAME});
-       my $ufn = uc($fn->{NAME});
+       my $ufn = "DCERPC_".uc($fn->{NAME});
 
        foreach (@{$fn->{ELEMENTS}}) {
                $defargs .= ", " . DeclLong($_);
        }
-       pidl "NTSTATUS rpccli_$fn->{NAME}(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx$defargs)";
+       fn_declare "NTSTATUS rpccli_$fn->{NAME}(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx$defargs)";
        pidl "{";
        indent;
        pidl "struct $fn->{NAME} r;";
@@ -79,10 +82,7 @@ sub ParseFunction($$)
        foreach my $e (@{$fn->{ELEMENTS}}) {
                next unless (grep(/out/, @{$e->{DIRECTION}}));
 
-               if ($e->{LEVELS}[0]->{TYPE} ne "POINTER") {
-                       warning($e, "First element not a pointer for [out] argument");
-                       next;
-               }
+               fatal($e, "[out] argument is not a pointer") if ($e->{LEVELS}[0]->{TYPE} ne "POINTER");
 
                CopyLevel($e, $e->{LEVELS}[1], $e->{NAME}, "r.out.$e->{NAME}");
        }
@@ -109,7 +109,12 @@ sub ParseInterface($)
 {
        my $if = shift;
 
+       my $uif = uc($if->{NAME});
+
+       pidl_hdr "#ifndef __CLI_$uif\__";
+       pidl_hdr "#define __CLI_$uif\__";
        ParseFunction($if, $_) foreach (@{$if->{FUNCTIONS}});
+       pidl_hdr "#endif /* __CLI_$uif\__ */";
 }
 
 sub Parse($$)
@@ -117,6 +122,7 @@ sub Parse($$)
        my($ndr,$filename) = @_;
 
        $res = "";
+       $res_hdr = "";
 
        pidl "/*";
        pidl " * Unix SMB/CIFS implementation.";
@@ -130,7 +136,7 @@ sub Parse($$)
                ParseInterface($_) if ($_->{TYPE} eq "INTERFACE");
        }
 
-       return $res;
+       return ($res, $res_hdr);
 }
 
 1;
index 5784822f2690cf40a22c822e5720ed7147d00cfa..ef3334f977df00bb51998cada15fe4330b4d1682 100755 (executable)
@@ -808,9 +808,12 @@ $dcom
        }
 
        if (defined($opt_samba3_ndr_client)) {
-               my $header = ($opt_samba3_ndr_client or "$outputdir/cli_$basename.c");
+               my $client = ($opt_samba3_ndr_client or "$outputdir/cli_$basename.c");
+               my $header = $client; $header =~ s/\.c$/\.h/;
                require Parse::Pidl::Samba3::ClientNDR;
-               FileSave($header, Parse::Pidl::Samba3::ClientNDR::Parse($ndr, $basename));
+               my ($c_code,$h_code) = Parse::Pidl::Samba3::ClientNDR::Parse($ndr, $basename);
+               FileSave($client, $c_code);
+               FileSave($header, $h_code);
        }