add trailer alignment to structures
[ira/wip.git] / pidl / lib / Parse / Pidl / Wireshark / NDR.pm
index e13e14465cae3a9c28a5f9e868a9fb1fd23f19f2..b8adf2dc4eb16d520587a39ae1b93ff1a12560f2 100644 (file)
@@ -545,6 +545,9 @@ sub Struct($$$$)
        $self->indent;
        $self->pidl_code("proto_item *item = NULL;");
        $self->pidl_code("proto_tree *tree = NULL;");
        $self->indent;
        $self->pidl_code("proto_item *item = NULL;");
        $self->pidl_code("proto_tree *tree = NULL;");
+       if ($e->{ALIGN} > 1) {
+               $self->pidl_code("dcerpc_info *di = pinfo->private_data;");
+       }
        $self->pidl_code("int old_offset;");
        $self->pidl_code("");
 
        $self->pidl_code("int old_offset;");
        $self->pidl_code("");
 
@@ -565,6 +568,15 @@ sub Struct($$$$)
        $self->pidl_code("\n$res");
 
        $self->pidl_code("proto_item_set_len(item, offset-old_offset);\n");
        $self->pidl_code("\n$res");
 
        $self->pidl_code("proto_item_set_len(item, offset-old_offset);\n");
+       if ($e->{ALIGN} > 1) {
+               $self->pidl_code("");
+               $self->pidl_code("if (di->call_data->flags & DCERPC_IS_NDR64) {");
+               $self->indent;
+               $self->pidl_code("ALIGN_TO_$e->{ALIGN}_BYTES;");
+               $self->deindent;
+               $self->pidl_code("}");
+       }
+       $self->pidl_code("");
        $self->pidl_code("return offset;");
        $self->deindent;
        $self->pidl_code("}\n");
        $self->pidl_code("return offset;");
        $self->deindent;
        $self->pidl_code("}\n");
@@ -634,6 +646,8 @@ sub Union($$$$)
 
        $self->pidl_code("switch(level) {$res\t}");
        $self->pidl_code("proto_item_set_len(item, offset-old_offset);\n");
 
        $self->pidl_code("switch(level) {$res\t}");
        $self->pidl_code("proto_item_set_len(item, offset-old_offset);\n");
+       $self->pidl_code("");
+
        $self->pidl_code("return offset;");
        $self->deindent;
        $self->pidl_code("}");
        $self->pidl_code("return offset;");
        $self->deindent;
        $self->pidl_code("}");