1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

r15470: Write header file with prototypes for Samba3-Client-With-Samba4-NDR code.

This commit is contained in:
Jelmer Vernooij 2006-05-06 11:44:00 +00:00 committed by Gerald (Jerry) Carter
parent cc2961427f
commit a2bb0b6012
2 changed files with 19 additions and 10 deletions

View 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;

View File

@ -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);
}