sub indent($) { my ($self) = @_; $self->{tabs}.="\t"; }
sub deindent($) { my ($self) = @_; $self->{tabs} = substr($self->{tabs}, 1); }
-sub pidl($$) { my ($self,$txt) = @_; $self->{res} .= "$self->{tabs}$txt\n"; }
+sub pidl($$) { my ($self,$txt) = @_; $self->{res} .= $txt ? "$self->{tabs}$txt\n" : "\n"; }
sub pidl_hdr($$) { my ($self, $txt) = @_; $self->{res_hdr} .= "$txt\n"; }
sub fn_declare($$) { my ($self,$n) = @_; $self->pidl($n); $self->pidl_hdr("$n;"); }
foreach (@{$fn->{ELEMENTS}}) {
$defargs .= ", " . DeclLong($_);
}
+
+ if (defined($fn->{RETURN_TYPE}) && ($fn->{RETURN_TYPE} eq "WERROR")) {
+ $defargs .= ", WERROR *werror";
+ }
+
$self->fn_declare("NTSTATUS rpccli_$fn->{NAME}(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx$defargs)");
$self->pidl("{");
$self->indent;
}
$self->pidl("");
- $self->pidl("if (DEBUGLEVEL >= 10)");
- $self->pidl("\tNDR_PRINT_IN_DEBUG($fn->{NAME}, &r);");
+ $self->pidl("if (DEBUGLEVEL >= 10) {");
+ $self->indent;
+ $self->pidl("NDR_PRINT_IN_DEBUG($fn->{NAME}, &r);");
+ $self->deindent;
+ $self->pidl("}");
$self->pidl("");
$self->pidl("status = cli_do_rpc_ndr(cli, mem_ctx, PI_$uif, &ndr_table_$if, $ufn, &r);");
$self->pidl("");
$self->pidl("}");
$self->pidl("");
- $self->pidl("if (DEBUGLEVEL >= 10)");
- $self->pidl("\tNDR_PRINT_OUT_DEBUG($fn->{NAME}, &r);");
+ $self->pidl("if (DEBUGLEVEL >= 10) {");
+ $self->indent;
+ $self->pidl("NDR_PRINT_OUT_DEBUG($fn->{NAME}, &r);");
+ $self->deindent;
+ $self->pidl("}");
$self->pidl("");
$self->pidl("if (NT_STATUS_IS_ERR(status)) {");
- $self->pidl("\treturn status;");
+ $self->indent;
+ $self->pidl("return status;");
+ $self->deindent;
$self->pidl("}");
$self->pidl("");
$self->pidl("/* Return variables */");
if ($e->{LEVELS}[0]->{TYPE} eq "POINTER") {
$level = 1;
if ($e->{LEVELS}[0]->{POINTER_TYPE} ne "ref") {
- $self->pidl("if ( $e->{NAME} ) {");
+ $self->pidl("if ($e->{NAME} && r.out.$e->{NAME}) {");
$self->indent;
}
}
} elsif ($fn->{RETURN_TYPE} eq "NTSTATUS") {
$self->pidl("return r.out.result;");
} elsif ($fn->{RETURN_TYPE} eq "WERROR") {
+ $self->pidl("if (werror) {");
+ $self->indent;
+ $self->pidl("*werror = r.out.result;");
+ $self->deindent;
+ $self->pidl("}");
+ $self->pidl("");
$self->pidl("return werror_to_ntstatus(r.out.result);");
} else {
warning($fn->{ORIGINAL}, "Unable to convert $fn->{RETURN_TYPE} to NTSTATUS");