r8200: - added stub functions for union pull/push
authorAndrew Tridgell <tridge@samba.org>
Thu, 7 Jul 2005 08:32:35 +0000 (08:32 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:19:19 +0000 (13:19 -0500)
- kill the js interpreter with an exception on internal errors
(This used to be commit 5f062d71481a0aa2d8c89099abb2d171b789879e)

source4/build/pidl/ejs.pm
source4/scripting/ejs/smbcalls_rpc.c

index bd35078abdf80fa167877cdd96ed036e0e79498a..8c35da4f2eed5b000d873a77973ae6846a61e78c 100644 (file)
@@ -158,6 +158,18 @@ sub EjsStructPull($$)
        pidl "}\n\n";
 }
 
+###########################
+# pull a union
+sub EjsUnionPull($$)
+{
+       my $name = shift;
+       my $d = shift;
+       my $env = GenerateStructEnv($d);
+       pidl "\nstatic NTSTATUS ejs_pull_$name(struct ejs_rpc *ejs, struct MprVar *v, const char *name, union $name *r)\n{\n";
+       pidl "return ejs_panic(ejs, \"union pull not handled\");\n";
+       pidl "}\n\n";
+}
+
 ###########################
 # pull a enum
 sub EjsEnumPull($$)
@@ -178,8 +190,15 @@ sub EjsEnumPull($$)
 sub EjsTypedefPull($)
 {
        my $d = shift;
-       $d->{DATA}->{TYPE} eq 'STRUCT' && EjsStructPull($d->{NAME}, $d->{DATA});
-       $d->{DATA}->{TYPE} eq 'ENUM' && EjsEnumPull($d->{NAME}, $d->{DATA});
+       if ($d->{DATA}->{TYPE} eq 'STRUCT') {
+               EjsStructPull($d->{NAME}, $d->{DATA});
+       } elsif ($d->{DATA}->{TYPE} eq 'UNION') {
+               EjsUnionPull($d->{NAME}, $d->{DATA});
+       } elsif ($d->{DATA}->{TYPE} eq 'ENUM') {
+               EjsEnumPull($d->{NAME}, $d->{DATA});
+       } else {
+               die "Unhandled pull typedef $d->{NAME} of type $d->{TYPE}\n";
+       }
 }
 
 #####################
@@ -306,7 +325,7 @@ sub EjsUnionPush($$)
        my $name = shift;
        my $d = shift;
        pidl "\nstatic NTSTATUS ejs_push_$name(struct ejs_rpc *ejs, struct MprVar *v, const char *name, const union $name *r)\n{\n";
-       pidl "\treturn NT_STATUS_OK;\n";
+       pidl "return ejs_panic(ejs, \"union push not handled\");\n";
        pidl "}\n\n";
 }
 
@@ -329,9 +348,15 @@ sub EjsEnumPush($$)
 sub EjsTypedefPush($)
 {
        my $d = shift;
-       $d->{DATA}->{TYPE} eq 'STRUCT' && EjsStructPush($d->{NAME}, $d->{DATA});
-       $d->{DATA}->{TYPE} eq 'UNION' && EjsUnionPush($d->{NAME}, $d->{DATA});
-       $d->{DATA}->{TYPE} eq 'ENUM' && EjsEnumPush($d->{NAME}, $d->{DATA});
+       if ($d->{DATA}->{TYPE} eq 'STRUCT') {
+               EjsStructPush($d->{NAME}, $d->{DATA});
+       } elsif ($d->{DATA}->{TYPE} eq 'UNION') {
+               EjsUnionPush($d->{NAME}, $d->{DATA});
+       } elsif ($d->{DATA}->{TYPE} eq 'ENUM') {
+               EjsEnumPush($d->{NAME}, $d->{DATA});
+       } else {
+               die "Unhandled push typedef $d->{NAME} of type $d->{TYPE}\n";
+       }
 }
 
 
index 00675165ea251be16e01bfd3f2fdeade108a97c1..6ec3e29e506a3ed82b4c1255b0578c8a51f84c39 100644 (file)
@@ -157,6 +157,9 @@ done:
        talloc_free(ptr);
 done:
        ejsSetReturnValue(eid, mprNTSTATUS(status));
+       if (NT_STATUS_EQUAL(status, NT_STATUS_INTERNAL_ERROR)) {
+               return -1;
+       }
        return 0;
 }