aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm2
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm2
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm32
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/Header.pm4
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm2
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm54
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm2
-rw-r--r--tools/pidl/tests/Util.pm69
-rwxr-xr-xtools/pidl/tests/ndr_align.pl14
-rwxr-xr-xtools/pidl/tests/ndr_alloc.pl8
-rwxr-xr-xtools/pidl/tests/ndr_array.pl2
-rwxr-xr-xtools/pidl/tests/ndr_fullptr.pl2
-rwxr-xr-xtools/pidl/tests/ndr_refptr.pl28
-rw-r--r--tools/pidl/tests/ndr_represent.pl8
-rwxr-xr-xtools/pidl/tests/ndr_simple.pl30
-rwxr-xr-xtools/pidl/tests/ndr_string.pl6
-rwxr-xr-xtools/pidl/tests/ndr_tagtype.pl16
17 files changed, 157 insertions, 124 deletions
diff --git a/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm b/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
index 9c3f01ad93..f6c9a04a8e 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
@@ -91,7 +91,7 @@ sub ParseFunction($$$)
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;
}
}
diff --git a/tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm b/tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm
index b3aa98ee0a..82cadd9bcc 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm
@@ -84,7 +84,7 @@ sub ParseFunction($$)
my $op = "NDR_".uc($fn->{NAME});
- pidl "static BOOL api_$fn->{NAME}(pipes_struct *p)";
+ pidl "static bool api_$fn->{NAME}(pipes_struct *p)";
pidl "{";
indent;
pidl "const struct ndr_interface_call *call;";
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm b/tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm
index 13e38545a7..2e9bc0953c 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/EJS.pm
@@ -128,7 +128,7 @@ sub EjsPullScalar($$$$$$$)
} else {
$t = $e->{TYPE};
}
- $self->pidl("NDR_CHECK(ejs_pull_$t(ejs, v, $name, $var));");
+ $self->pidl("EJS_CHECK(ejs_pull_$t(ejs, v, $name, $var));");
}
}
@@ -164,7 +164,7 @@ sub EjsPullString($$$$$$)
if (defined($pl) and $pl->{TYPE} eq "POINTER") {
$var = get_pointer_to($var);
}
- $self->pidl("NDR_CHECK(ejs_pull_string(ejs, v, $name, $var));");
+ $self->pidl("EJS_CHECK(ejs_pull_string(ejs, v, $name, $var));");
}
###########################
@@ -255,7 +255,7 @@ sub EjsStructPull($$$)
{
my ($self, $d, $varname) = @_;
my $env = GenerateStructEnv($d, $varname);
- $self->pidl("NDR_CHECK(ejs_pull_struct_start(ejs, &v, name));");
+ $self->pidl("EJS_CHECK(ejs_pull_struct_start(ejs, &v, name));");
foreach my $e (@{$d->{ELEMENTS}}) {
$self->EjsPullElementTop($e, $env);
}
@@ -267,7 +267,7 @@ sub EjsUnionPull($$$)
{
my ($self, $d, $varname) = @_;
my $have_default = 0;
- $self->pidl("NDR_CHECK(ejs_pull_struct_start(ejs, &v, name));");
+ $self->pidl("EJS_CHECK(ejs_pull_struct_start(ejs, &v, name));");
$self->pidl("switch (ejs->switch_var) {");
$self->indent;
foreach my $e (@{$d->{ELEMENTS}}) {
@@ -317,7 +317,7 @@ sub EjsEnumPull($$$)
my ($self, $d, $varname) = @_;
$self->EjsEnumConstant($d);
$self->pidl("unsigned e;");
- $self->pidl("NDR_CHECK(ejs_pull_enum(ejs, v, name, &e));");
+ $self->pidl("EJS_CHECK(ejs_pull_enum(ejs, v, name, &e));");
$self->pidl("*$varname = e;");
}
@@ -327,7 +327,7 @@ sub EjsBitmapPull($$$)
{
my ($self, $d, $varname) = @_;
my $type_fn = $d->{BASE_TYPE};
- $self->pidl("NDR_CHECK(ejs_pull_$type_fn(ejs, v, name, $varname));");
+ $self->pidl("EJS_CHECK(ejs_pull_$type_fn(ejs, v, name, $varname));");
}
sub EjsTypePullFunction($$$)
@@ -388,7 +388,7 @@ sub EjsPullFunction($$)
$self->pidl("\nstatic NTSTATUS ejs_pull_$name(struct ejs_rpc *ejs, struct MprVar *v, struct $name *r)");
$self->pidl("{");
$self->indent;
- $self->pidl("NDR_CHECK(ejs_pull_struct_start(ejs, &v, \"input\"));");
+ $self->pidl("EJS_CHECK(ejs_pull_struct_start(ejs, &v, \"input\"));");
# we pull non-array elements before array elements as arrays
# may have length_is() or size_is() properties that depend
@@ -427,7 +427,7 @@ sub EjsPushScalar($$$$$$)
$var = get_pointer_to($var);
}
- $self->pidl("NDR_CHECK(".TypeFunctionName("ejs_push", $e->{TYPE})."(ejs, v, $name, $var));");
+ $self->pidl("EJS_CHECK(".TypeFunctionName("ejs_push", $e->{TYPE})."(ejs, v, $name, $var));");
}
}
@@ -440,7 +440,7 @@ sub EjsPushString($$$$$$)
if (defined($pl) and $pl->{TYPE} eq "POINTER") {
$var = get_pointer_to($var);
}
- $self->pidl("NDR_CHECK(ejs_push_string(ejs, v, $name, $var));");
+ $self->pidl("EJS_CHECK(ejs_push_string(ejs, v, $name, $var));");
}
###########################
@@ -453,7 +453,7 @@ sub EjsPushPointer($$$$$$)
if ($l->{POINTER_TYPE} eq "ref") {
$self->pidl("return NT_STATUS_INVALID_PARAMETER_MIX;");
} else {
- $self->pidl("NDR_CHECK(ejs_push_null(ejs, v, $name));");
+ $self->pidl("EJS_CHECK(ejs_push_null(ejs, v, $name));");
}
$self->deindent;
$self->pidl("} else {");
@@ -543,7 +543,7 @@ sub EjsStructPush($$$)
{
my ($self, $d, $varname) = @_;
my $env = GenerateStructEnv($d, $varname);
- $self->pidl("NDR_CHECK(ejs_push_struct_start(ejs, &v, name));");
+ $self->pidl("EJS_CHECK(ejs_push_struct_start(ejs, &v, name));");
foreach my $e (@{$d->{ELEMENTS}}) {
$self->EjsPushElementTop($e, $env);
}
@@ -555,7 +555,7 @@ sub EjsUnionPush($$$)
{
my ($self, $d, $varname) = @_;
my $have_default = 0;
- $self->pidl("NDR_CHECK(ejs_push_struct_start(ejs, &v, name));");
+ $self->pidl("EJS_CHECK(ejs_push_struct_start(ejs, &v, name));");
$self->pidl("switch (ejs->switch_var) {");
$self->indent;
foreach my $e (@{$d->{ELEMENTS}}) {
@@ -587,7 +587,7 @@ sub EjsEnumPush($$$)
my ($self, $d, $varname) = @_;
$self->EjsEnumConstant($d);
$self->pidl("unsigned e = ".get_value_of($varname).";");
- $self->pidl("NDR_CHECK(ejs_push_enum(ejs, v, name, &e));");
+ $self->pidl("EJS_CHECK(ejs_push_enum(ejs, v, name, &e));");
}
###########################
@@ -604,7 +604,7 @@ sub EjsBitmapPush($$$)
$self->{constants}->{$bname} = $v;
}
}
- $self->pidl("NDR_CHECK(ejs_push_$type_fn(ejs, v, name, $varname));");
+ $self->pidl("EJS_CHECK(ejs_push_$type_fn(ejs, v, name, $varname));");
}
sub EjsTypePushFunction($$$)
@@ -667,7 +667,7 @@ sub EjsPushFunction($$)
$self->pidl("\nstatic NTSTATUS ejs_push_$d->{NAME}(struct ejs_rpc *ejs, struct MprVar *v, const struct $d->{NAME} *r)");
$self->pidl("{");
$self->indent;
- $self->pidl("NDR_CHECK(ejs_push_struct_start(ejs, &v, \"output\"));");
+ $self->pidl("EJS_CHECK(ejs_push_struct_start(ejs, &v, \"output\"));");
foreach my $e (@{$d->{ELEMENTS}}) {
next unless (grep(/out/, @{$e->{DIRECTION}}));
@@ -675,7 +675,7 @@ sub EjsPushFunction($$)
}
if ($d->{RETURN_TYPE}) {
- $self->pidl("NDR_CHECK(".TypeFunctionName("ejs_push", $d->{RETURN_TYPE})."(ejs, v, \"result\", &r->out.result));");
+ $self->pidl("EJS_CHECK(".TypeFunctionName("ejs_push", $d->{RETURN_TYPE})."(ejs, v, \"result\", &r->out.result));");
}
$self->pidl("return NT_STATUS_OK;");
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm b/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm
index 75d4c235cb..7a6ffa46d6 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm
@@ -10,7 +10,7 @@ use strict;
use Parse::Pidl qw(fatal);
use Parse::Pidl::Typelist qw(mapTypeName scalar_is_reference);
use Parse::Pidl::Util qw(has_property is_constant unmake_str);
-use Parse::Pidl::Samba4 qw(is_intree ElementStars ArrayBrackets);
+use Parse::Pidl::Samba4 qw(is_intree ElementStars ArrayBrackets choose_header);
use vars qw($VERSION);
$VERSION = '0.01';
@@ -326,7 +326,7 @@ sub HeaderImport
foreach (@imports) {
s/\.idl\"$//;
s/^\"//;
- pidl "#include \"librpc/gen_ndr/$_\.h\"\n";
+ pidl choose_header("librpc/gen_ndr/$_\.h", "gen_ndr/$_.h") . "\n";
}
}
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm
index cf14b645a9..e9c158e933 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm
@@ -109,7 +109,7 @@ sub Parse($$$$)
$res .= "#include <stdlib.h>\n";
$res .= "#include <stdint.h>\n";
$res .= "#include <stdarg.h>\n";
- $res .= "#include <core/nterr.h>\n";
+ $res .= "#include <core/ntstatus.h>\n";
}
$res .= "#include \"$ndr_header\"\n";
$res .= "#include \"$client_header\"\n";
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index cd3981bb28..3ad9231740 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -423,8 +423,10 @@ sub ParseArrayPullHeader($$$$$$)
} elsif ($l->{IS_ZERO_TERMINATED}) { # Noheader arrays
$length = $size = "ndr_get_string_size($ndr, sizeof(*$var_name))";
} else {
- $length = $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL},
- check_null_pointer($e, $env, sub { $self->pidl(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
+ $length = $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL},
+ check_null_pointer($e, $env, sub { $self->pidl(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for size_is()\");"),
+ check_fully_dereferenced($e, $env));
}
if ((!$l->{IS_SURROUNDING}) and $l->{IS_CONFORMANT}) {
@@ -447,7 +449,10 @@ sub ParseArrayPullHeader($$$$$$)
if ($l->{IS_CONFORMANT} and not $l->{IS_ZERO_TERMINATED}) {
$self->defer("if ($var_name) {");
$self->defer_indent;
- my $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL}, check_null_pointer($e, $env, sub { $self->defer(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
+ my $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL},
+ check_null_pointer($e, $env, sub { $self->defer(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for size_is()\");"),
+ check_fully_dereferenced($e, $env));
$self->defer("NDR_CHECK(ndr_check_array_size(ndr, (void*)" . get_pointer_to($var_name) . ", $size));");
$self->defer_deindent;
$self->defer("}");
@@ -457,7 +462,8 @@ sub ParseArrayPullHeader($$$$$$)
$self->defer("if ($var_name) {");
$self->defer_indent;
my $length = ParseExprExt($l->{LENGTH_IS}, $env, $e->{ORIGINAL},
- check_null_pointer($e, $env, sub { $self->defer(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"),
+ check_null_pointer($e, $env, sub { $self->defer(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for length_is()\");"),
check_fully_dereferenced($e, $env));
$self->defer("NDR_CHECK(ndr_check_array_length(ndr, (void*)" . get_pointer_to($var_name) . ", $length));");
$self->defer_deindent;
@@ -740,7 +746,11 @@ sub ParsePtrPush($$$$)
my ($self,$e,$l,$var_name) = @_;
if ($l->{POINTER_TYPE} eq "ref") {
- $self->pidl("if ($var_name == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;");
+ $self->pidl("if ($var_name == NULL) {");
+ $self->indent;
+ $self->pidl("return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL [ref] pointer\");");
+ $self->deindent;
+ $self->pidl("}");
if ($l->{LEVEL} eq "EMBEDDED") {
$self->pidl("NDR_CHECK(ndr_push_ref_ptr(ndr));");
}
@@ -875,7 +885,9 @@ sub ParseSwitchPull($$$$$$)
{
my($self,$e,$l,$ndr,$var_name,$env) = @_;
my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e->{ORIGINAL},
- check_null_pointer($e, $env, sub { $self->pidl(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
+ check_null_pointer($e, $env, sub { $self->pidl(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for switch_is()\");"),
+ check_fully_dereferenced($e, $env));
$var_name = get_pointer_to($var_name);
$self->pidl("NDR_CHECK(ndr_pull_set_switch_value($ndr, $var_name, $switch_var));");
@@ -887,7 +899,9 @@ sub ParseSwitchPush($$$$$$)
{
my($self,$e,$l,$ndr,$var_name,$env) = @_;
my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e->{ORIGINAL},
- check_null_pointer($e, $env, sub { $self->pidl(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
+ check_null_pointer($e, $env, sub { $self->pidl(shift); },
+ "return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for switch_is()\");"),
+ check_fully_dereferenced($e, $env));
$var_name = get_pointer_to($var_name);
$self->pidl("NDR_CHECK(ndr_push_set_switch_value($ndr, $var_name, $switch_var));");
@@ -2222,9 +2236,10 @@ sub ParseFunctionPull($$)
and $e->{LEVELS}[1]->{IS_ZERO_TERMINATED});
if ($e->{LEVELS}[1]->{TYPE} eq "ARRAY") {
- my $size = ParseExprExt($e->{LEVELS}[1]->{SIZE_IS}, $env, $e->{ORIGINAL}, check_null_pointer($e, $env, sub { $self->pidl(shift); }, "return NT_STATUS_INVALID_PARAMETER_MIX;"),
+ my $size = ParseExprExt($e->{LEVELS}[1]->{SIZE_IS}, $env, $e->{ORIGINAL},
+ check_null_pointer($e, $env, sub { $self->pidl(shift); },
+ "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for size_is()\");"),
check_fully_dereferenced($e, $env));
-
$self->pidl("NDR_PULL_ALLOC_N(ndr, r->out.$e->{NAME}, $size);");
if (grep(/in/, @{$e->{DIRECTION}})) {
@@ -2377,13 +2392,15 @@ sub HeaderInclude
# generate prototypes and defines for the interface definitions
# FIXME: these prototypes are for the DCE/RPC client functions, not the
# NDR parser and so do not belong here, technically speaking
-sub HeaderInterface($$)
+sub HeaderInterface($$$)
{
- my($self,$interface) = @_;
+ my($self,$interface,$needed) = @_;
my $count = 0;
- $self->pidl_hdr(choose_header("librpc/ndr/libndr.h", "ndr.h"));
+ if ($needed->{"compression"}) {
+ $self->pidl(choose_header("librpc/ndr/ndr_compression.h", "ndr/compression.h"));
+ }
if (has_property($interface, "object")) {
$self->pidl(choose_header("librpc/gen_ndr/ndr_orpc.h", "ndr/orpc.h"));
@@ -2544,11 +2561,7 @@ sub ParseInterface($$$)
$self->pidl_hdr("");
- if ($needed->{"compression"}) {
- $self->pidl(choose_header("librpc/ndr/ndr_compression.h", "ndr/compression.h"));
- }
-
- $self->HeaderInterface($interface);
+ $self->HeaderInterface($interface, $needed);
# Typedefs
foreach my $d (@{$interface->{TYPES}}) {
@@ -2594,12 +2607,6 @@ sub GenerateIncludes($)
$self->pidl("#include <stdarg.h>");
$self->pidl("#include <string.h>");
}
-
- # Samba3 has everything in include/includes.h
- if (is_intree() != 3) {
- $self->pidl(choose_header("libcli/util/ntstatus.h", "core/ntstatus.h"));
- $self->pidl(choose_header("librpc/gen_ndr/ndr_misc.h", "gen_ndr/ndr_misc.h"));
- }
}
#####################################################################
@@ -2610,6 +2617,7 @@ sub Parse($$$$)
$self->pidl_hdr("/* header auto-generated by pidl */");
$self->pidl_hdr("");
+ $self->pidl_hdr(choose_header("librpc/ndr/libndr.h", "ndr.h"));
$self->pidl_hdr("#include \"$gen_header\"") if ($gen_header);
$self->pidl_hdr("");
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm b/tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm
index 832a2c5463..568dff5adf 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/TDR.pm
@@ -265,7 +265,7 @@ sub Parser($$$$)
$self->pidl("#include <stdint.h>");
$self->pidl("#include <stdarg.h>");
$self->pidl("#include <string.h>");
- $self->pidl("#include <core/nterr.h>");
+ $self->pidl("#include <core/ntstatus.h>");
}
$self->pidl("#include \"$hdrname\"");
$self->pidl("");
diff --git a/tools/pidl/tests/Util.pm b/tools/pidl/tests/Util.pm
index c7fca95aaa..82ab130e5a 100644
--- a/tools/pidl/tests/Util.pm
+++ b/tools/pidl/tests/Util.pm
@@ -47,6 +47,9 @@ use Parse::Pidl::Samba4::Header;
sub test_samba4_ndr
{
my ($name,$idl,$c,$extra) = @_;
+
+ $extra = "" unless defined($extra);
+
my $pidl = Parse::Pidl::IDL::parse_string("interface echo { $idl }; ", "<$name>");
ok(defined($pidl), "($name) parse idl");
@@ -66,8 +69,49 @@ SKIP: {
skip "no samba environment available, skipping compilation", 3
if (system("pkg-config --exists ndr") != 0);
- my $test_data_prefix = $ENV{TEST_DATA_PREFIX};
+ my $main = "
+#define uint_t unsigned int
+#define _GNU_SOURCE
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdarg.h>
+#include <util/data_blob.h>
+
+/* header start */
+$header
+/* header end */
+
+/* ndrheader start */
+$ndrheader
+/* ndrheader end */
+
+/* extra start */
+$extra
+/* extra end */
+
+/* ndrparser start */
+$ndrparser
+/* ndrparser end */
+
+/* main start */
+int main(int argc, const char **argv)
+{
+ TALLOC_CTX *mem_ctx = talloc_init(NULL);
+
+$c
+
+ talloc_free(mem_ctx);
+ return 0;
+}
+/* main end */
+\n";
+
+ my $main_debug = "# ".join("\n# ", split("\n", $main));
+
+ my $test_data_prefix = $ENV{TEST_DATA_PREFIX};
my $outfile;
if (defined($test_data_prefix)) {
$outfile = "$test_data_prefix/test-$name";
@@ -95,32 +139,13 @@ SKIP: {
my $cmd = "$cc $cflags -x c - -o $outfile $flags $ldflags";
$cmd =~ s/\n//g;
open CC, "|$cmd";
- print CC "#define uint_t unsigned int\n";
- print CC "#define _GNU_SOURCE\n";
- print CC "#include <stdint.h>\n";
- print CC "#include <stdlib.h>\n";
- print CC "#include <stdio.h>\n";
- print CC "#include <stdbool.h>\n";
- print CC "#include <stdarg.h>\n";
- print CC "#include <util/data_blob.h>\n";
- print CC $header;
- print CC $ndrheader;
- print CC $extra if ($extra);
- print CC $ndrparser;
- print CC "int main(int argc, const char **argv)
-{
- TALLOC_CTX *mem_ctx = talloc_init(NULL);
-
- $c
-
- talloc_free(mem_ctx);
-
- return 0; }\n";
+ print CC $main;
close CC;
ok(-f $outfile, "($name) compile");
my $ret = system($outfile, ()) >> 8;
+ print "# code:\n#\n$main_debug\n" if ($ret != 0);
print "# cmd: $cmd\n" if ($ret != 0);
print "# return code: $ret\n" if ($ret != 0);
diff --git a/tools/pidl/tests/ndr_align.pl b/tools/pidl/tests/ndr_align.pl
index 0824acc501..28b29d9196 100755
--- a/tools/pidl/tests/ndr_align.pl
+++ b/tools/pidl/tests/ndr_align.pl
@@ -24,7 +24,7 @@ test_samba4_ndr('align-uint8-uint16',
r.x = 13;
r.y = 0xbeef;
- if (NT_STATUS_IS_ERR(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -49,7 +49,7 @@ test_samba4_ndr('align-uint8-uint32',
r.x = 13;
r.y = 0xbeefbeef;
- if (NT_STATUS_IS_ERR(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -70,13 +70,13 @@ test_samba4_ndr('align-uint8-hyper',
struct ndr_push *ndr = ndr_push_init_ctx(NULL);
struct bla r;
uint8_t expected[] = { 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe };
+ 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe };
DATA_BLOB expected_blob = { expected, 16 };
DATA_BLOB result_blob;
r.x = 13;
- r.y = 0xbeefbeefbeefbeef;
+ r.y = 0xbeefbeefbeefbeefLLU;
- if (NT_STATUS_IS_ERR(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -103,7 +103,7 @@ test_samba4_ndr('noalignflag-uint8-uint16',
r.x = 13;
r.y = 0xbeef;
- if (NT_STATUS_IS_ERR(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -133,7 +133,7 @@ test_samba4_ndr('align-blob-align2',
r.data.data = data;
r.data.length = 2;
- if (NT_STATUS_IS_ERR(ndr_push_blie(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_blie(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
diff --git a/tools/pidl/tests/ndr_alloc.pl b/tools/pidl/tests/ndr_alloc.pl
index 61df1c3548..b1c7ae08c3 100755
--- a/tools/pidl/tests/ndr_alloc.pl
+++ b/tools/pidl/tests/ndr_alloc.pl
@@ -23,7 +23,7 @@ test_samba4_ndr("alloc-scalar",
struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
struct TestAlloc r;
- if (NT_STATUS_IS_ERR(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
return 1;
if (r.in.foo.x == NULL)
@@ -47,7 +47,7 @@ test_samba4_ndr("alloc-buffer",
struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
struct TestAlloc r;
- if (NT_STATUS_IS_ERR(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
return 1;
if (r.in.foo.x == NULL)
@@ -86,7 +86,7 @@ test_samba4_ndr("ref-noalloc",
uint8_t x;
r.in.t = &x;
- if (NT_STATUS_IS_ERR(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
return 1;
if (*r.in.t != 0x03)
@@ -106,7 +106,7 @@ test_samba4_ndr("ref-alloc",
ndr->flags |= LIBNDR_FLAG_REF_ALLOC;
r.in.t = NULL;
- if (NT_STATUS_IS_ERR(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestAlloc(ndr, NDR_IN, &r)))
return 1;
if (r.in.t == NULL)
diff --git a/tools/pidl/tests/ndr_array.pl b/tools/pidl/tests/ndr_array.pl
index 27f42cd391..8e40d36a10 100755
--- a/tools/pidl/tests/ndr_array.pl
+++ b/tools/pidl/tests/ndr_array.pl
@@ -25,7 +25,7 @@ test_samba4_ndr(
b.length = 10;
ndr = ndr_pull_init_blob(&b, mem_ctx);
- if (NT_STATUS_IS_ERR(ndr_pull_Test(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_Test(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 10)
diff --git a/tools/pidl/tests/ndr_fullptr.pl b/tools/pidl/tests/ndr_fullptr.pl
index 482edcf030..2188905b13 100755
--- a/tools/pidl/tests/ndr_fullptr.pl
+++ b/tools/pidl/tests/ndr_fullptr.pl
@@ -23,7 +23,7 @@ test_samba4_ndr("fullptr-push-dup",
r.in.x = &v;
r.in.y = &v;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestFull(ndr, NDR_IN, &r))) {
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestFull(ndr, NDR_IN, &r))) {
fprintf(stderr, "push failed\n");
return 1;
}
diff --git a/tools/pidl/tests/ndr_refptr.pl b/tools/pidl/tests/ndr_refptr.pl
index 4a56e3ca38..d5e73559d9 100755
--- a/tools/pidl/tests/ndr_refptr.pl
+++ b/tools/pidl/tests/ndr_refptr.pl
@@ -23,7 +23,7 @@ test_samba4_ndr("noptr-push",
struct echo_TestRef r;
r.in.foo.x = v;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r))) {
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r))) {
fprintf(stderr, "push failed\n");
return 1;
}
@@ -52,7 +52,7 @@ test_samba4_ndr("ptr-embedded-push",
struct echo_TestRef r;
r.in.foo.x = &v;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -78,7 +78,7 @@ test_samba4_ndr("ptr-embedded-push-null",
struct echo_TestRef r;
r.in.foo.x = NULL;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 4)
@@ -103,7 +103,7 @@ test_samba4_ndr("refptr-embedded-push",
struct echo_TestRef r;
r.in.foo.x = &v;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -150,7 +150,7 @@ test_samba4_ndr("ptr-top-push",
s.x = 13;
r.in.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 2)
@@ -195,7 +195,7 @@ test_samba4_ndr("refptr-top-push",
s.x = 13;
r.in.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 2)
@@ -239,7 +239,7 @@ test_samba4_ndr("uniqueptr-top-push",
s.x = 13;
r.in.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -265,7 +265,7 @@ test_samba4_ndr("uniqueptr-top-push-null",
struct echo_TestRef r;
r.in.foo = NULL;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 4)
@@ -294,7 +294,7 @@ test_samba4_ndr("ptr-top-out-pull",
r.out.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))
return 1;
if (!r.out.foo)
@@ -344,7 +344,7 @@ test_samba4_ndr("refptr-top-out-pull",
r.out.foo = &s;
- if (NT_STATUS_IS_ERR(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_echo_TestRef(ndr, NDR_OUT, &r)))
return 1;
if (!r.out.foo)
@@ -387,7 +387,7 @@ test_samba4_ndr("ptr-top-push-double",
uint16_t *pv = &v;
r.in.foo = &pv;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -413,7 +413,7 @@ test_samba4_ndr("ptr-top-push-double-sndnull",
uint16_t *pv = NULL;
r.in.foo = &pv;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 4)
@@ -451,7 +451,7 @@ test_samba4_ndr("refptr-top-push-double",
uint16_t *pv = &v;
r.in.foo = &pv;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 6)
@@ -478,7 +478,7 @@ test_samba4_ndr("refptr-top-push-double-sndnull",
uint16_t *pv = NULL;
r.in.foo = &pv;
- if (NT_STATUS_IS_ERR(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_echo_TestRef(ndr, NDR_IN, &r)))
return 1;
if (ndr->offset != 4)
diff --git a/tools/pidl/tests/ndr_represent.pl b/tools/pidl/tests/ndr_represent.pl
index 52cd06f817..b5ee312668 100644
--- a/tools/pidl/tests/ndr_represent.pl
+++ b/tools/pidl/tests/ndr_represent.pl
@@ -18,14 +18,14 @@ test_samba4_ndr('represent_as-simple',
struct ndr_pull *ndr = ndr_pull_init_blob(&in_blob, NULL);
struct bla r;
- if (NT_STATUS_IS_ERR(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
if (r.in.x != 13)
return 2;
',
'
-#include <libcli/util/nterr.h>
+#include <libcli/util/ntstatus.h>
NTSTATUS ndr_uint8_to_uint32(uint8_t from, uint32_t *to)
{
@@ -51,14 +51,14 @@ test_samba4_ndr('transmit_as-simple',
struct ndr_pull *ndr = ndr_pull_init_blob(&in_blob, NULL);
struct bla r;
- if (NT_STATUS_IS_ERR(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
if (r.in.x != 13)
return 2;
',
'
-#include <libcli/util/nterr.h>
+#include <libcli/util/ntstatus.h>
NTSTATUS ndr_uint8_to_uint32(uint8_t from, uint32_t *to)
{
diff --git a/tools/pidl/tests/ndr_simple.pl b/tools/pidl/tests/ndr_simple.pl
index 02803ceea9..466a164df4 100755
--- a/tools/pidl/tests/ndr_simple.pl
+++ b/tools/pidl/tests/ndr_simple.pl
@@ -9,20 +9,20 @@ use FindBin qw($RealBin);
use lib "$RealBin";
use Util qw(test_samba4_ndr);
-test_samba4_ndr("simple", "void Test(); ",
+test_samba4_ndr("simple", "void Test(); ",
"
- uint8_t data[] = { 0x02 };
- uint8_t result;
- DATA_BLOB b;
- struct ndr_pull *ndr;
-
- b.data = data;
- b.length = 1;
- ndr = ndr_pull_init_blob(&b, mem_ctx);
-
- if (NT_STATUS_IS_ERR(ndr_pull_uint8(ndr, NDR_SCALARS, &result)))
- return 1;
-
- if (result != 0x02)
- return 2;
+ uint8_t data[] = { 0x02 };
+ uint8_t result;
+ DATA_BLOB b;
+ struct ndr_pull *ndr;
+
+ b.data = data;
+ b.length = 1;
+ ndr = ndr_pull_init_blob(&b, mem_ctx);
+
+ if (!NT_STATUS_IS_OK(ndr_pull_uint8(ndr, NDR_SCALARS, &result)))
+ return 1;
+
+ if (result != 0x02)
+ return 2;
");
diff --git a/tools/pidl/tests/ndr_string.pl b/tools/pidl/tests/ndr_string.pl
index 23d94be640..4568ec89b8 100755
--- a/tools/pidl/tests/ndr_string.pl
+++ b/tools/pidl/tests/ndr_string.pl
@@ -18,7 +18,7 @@ test_samba4_ndr("string-pull-empty",
struct TestString r;
r.in.data = NULL;
- if (NT_STATUS_IS_ERR(ndr_pull_TestString(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestString(ndr, NDR_IN, &r)))
return 1;
if (r.in.data == NULL)
@@ -40,7 +40,7 @@ test_samba4_ndr("string-ascii-pull",
struct TestString r;
r.in.data = NULL;
- if (NT_STATUS_IS_ERR(ndr_pull_TestString(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestString(ndr, NDR_IN, &r)))
return 1;
if (r.in.data == NULL)
@@ -69,7 +69,7 @@ test_samba4_ndr("string-out",
char *str = NULL;
r.out.data = &str;
- if (NT_STATUS_IS_ERR(ndr_pull_TestString(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_pull_TestString(ndr, NDR_IN, &r)))
return 1;
if (r.out.data == NULL)
diff --git a/tools/pidl/tests/ndr_tagtype.pl b/tools/pidl/tests/ndr_tagtype.pl
index f8250a90ef..7f5c24627a 100755
--- a/tools/pidl/tests/ndr_tagtype.pl
+++ b/tools/pidl/tests/ndr_tagtype.pl
@@ -17,7 +17,7 @@ test_samba4_ndr('struct-notypedef', '[public] struct bla { uint8 x; }; ',
DATA_BLOB result_blob;
r.x = 13;
- if (NT_STATUS_IS_ERR(ndr_push_STRUCT_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_STRUCT_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -30,13 +30,13 @@ test_samba4_ndr('struct-notypedef-used', '[public] struct bla { uint8 x; };
[public] void myfn([in] struct bla r); ',
'
struct ndr_push *ndr = ndr_push_init_ctx(NULL);
- struct bla r;
+ struct myfn fn;
uint8_t expected[] = { 0x0D };
DATA_BLOB expected_blob = { expected, 1 };
DATA_BLOB result_blob;
- r.x = 13;
+ fn.in.r.x = 13;
- if (NT_STATUS_IS_ERR(ndr_push_myfn(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_myfn(ndr, NDR_IN, &fn)))
return 1;
result_blob = ndr_push_blob(ndr);
@@ -47,16 +47,16 @@ test_samba4_ndr('struct-notypedef-used', '[public] struct bla { uint8 x; };
test_samba4_ndr('struct-notypedef-embedded', 'struct bla { uint8 x; };
- [public] struct myfn { struct bla r; }; ',
+ [public] struct myst { struct bla r; }; ',
'
struct ndr_push *ndr = ndr_push_init_ctx(NULL);
- struct bla r;
+ struct myst st;
uint8_t expected[] = { 0x0D };
DATA_BLOB expected_blob = { expected, 1 };
DATA_BLOB result_blob;
- r.x = 13;
+ st.r.x = 13;
- if (NT_STATUS_IS_ERR(ndr_push_STRUCT_myfn(ndr, NDR_IN, &r)))
+ if (!NT_STATUS_IS_OK(ndr_push_STRUCT_myst(ndr, NDR_IN, &st)))
return 1;
result_blob = ndr_push_blob(ndr);