TODO: pidl:NDR/Parser: for ndr64 the union alignment comes before the switch_type
authorStefan Metzmacher <metze@samba.org>
Sat, 8 May 2010 07:44:09 +0000 (09:44 +0200)
committerKamen Mazdrashki <kamenim@samba.org>
Thu, 10 Jun 2010 22:22:11 +0000 (01:22 +0300)
metze

pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm

index 83bca288edee8bc760cb82b5943cd48849031382..701118a1b0236a869998d02135e34e3b328acf9d 100644 (file)
@@ -1664,14 +1664,14 @@ sub ParseUnionPushPrimitives($$$$)
 
        $self->pidl("int level = ndr_push_get_switch_value($ndr, $varname);");
 
-       if (defined($e->{SWITCH_TYPE})) {
-               $self->pidl("NDR_CHECK(ndr_push_$e->{SWITCH_TYPE}($ndr, NDR_SCALARS, level));");
-       }
-
        if (defined($e->{ALIGN})) {
                $self->pidl("NDR_CHECK(ndr_push_union_align($ndr, $e->{ALIGN}));");
        }
 
+       if (defined($e->{SWITCH_TYPE})) {
+               $self->pidl("NDR_CHECK(ndr_push_$e->{SWITCH_TYPE}($ndr, NDR_SCALARS, level));");
+       }
+
        $self->pidl("switch (level) {");
        $self->indent;
        foreach my $el (@{$e->{ELEMENTS}}) {
@@ -1809,6 +1809,10 @@ sub ParseUnionPullPrimitives($$$$$)
        my ($self,$e,$ndr,$varname,$switch_type) = @_;
        my $have_default = 0;
 
+       if (defined($e->{ALIGN})) {
+               $self->pidl("NDR_CHECK(ndr_pull_union_align($ndr, $e->{ALIGN}));");
+       }
+
        if (defined($switch_type)) {
                $self->pidl("NDR_CHECK(ndr_pull_$switch_type($ndr, NDR_SCALARS, &_level));");
                $self->pidl("if (_level != level) {"); 
@@ -1816,10 +1820,6 @@ sub ParseUnionPullPrimitives($$$$$)
                $self->pidl("}");
        }
 
-       if (defined($e->{ALIGN})) {
-               $self->pidl("NDR_CHECK(ndr_pull_union_align($ndr, $e->{ALIGN}));");
-       }
-
        $self->pidl("switch (level) {");
        $self->indent;
        foreach my $el (@{$e->{ELEMENTS}}) {