Avoid writing structs for inherited functions.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 14 Sep 2008 13:40:19 +0000 (15:40 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 15 Sep 2008 15:40:22 +0000 (17:40 +0200)
source4/pidl/lib/Parse/Pidl/ODL.pm
source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm

index 95c4ee1672986cf0621e2943804cf60213651e9b..f6df34afa8937caf50c550ad77793819018b25d5 100644 (file)
@@ -96,8 +96,7 @@ sub ODL2IDL
                                } else {
                                        foreach my $fn (reverse @{$base->{DATA}}) {
                                                next unless ($fn->{TYPE} eq "FUNCTION");
                                } else {
                                        foreach my $fn (reverse @{$base->{DATA}}) {
                                                next unless ($fn->{TYPE} eq "FUNCTION");
-                                               unshift (@{$x->{DATA}}, $fn);
-                                               push (@{$x->{INHERITED_FUNCTIONS}}, $fn->{NAME});
+                                               push (@{$x->{INHERITED_FUNCTIONS}}, $fn);
                                        }
                                }
                        }
                                        }
                                }
                        }
index 7b4234e7d77c7cf171785e8613ae6b777374224c..0a6360f8ac50c7ab2e355373e71d00088fbb3a2a 100644 (file)
@@ -2225,6 +2225,20 @@ sub AuthServiceStruct($$$)
        $self->pidl("");
 }
 
        $self->pidl("");
 }
 
+sub FunctionCallEntry($$)
+{
+       my ($self, $d) = @_;
+       next if not defined($d->{OPNUM});
+       $self->pidl("\t{");
+       $self->pidl("\t\t\"$d->{NAME}\",");
+       $self->pidl("\t\tsizeof(struct $d->{NAME}),");
+       $self->pidl("\t\t(ndr_push_flags_fn_t) ndr_push_$d->{NAME},");
+       $self->pidl("\t\t(ndr_pull_flags_fn_t) ndr_pull_$d->{NAME},");
+       $self->pidl("\t\t(ndr_print_function_t) ndr_print_$d->{NAME},");
+       $self->pidl("\t\t".($d->{ASYNC}?"true":"false").",");
+       $self->pidl("\t},");
+}
+
 #####################################################################
 # produce a function call table
 sub FunctionTable($$)
 #####################################################################
 # produce a function call table
 sub FunctionTable($$)
@@ -2237,16 +2251,9 @@ sub FunctionTable($$)
        return unless defined ($interface->{PROPERTIES}->{uuid});
 
        $self->pidl("static const struct ndr_interface_call $interface->{NAME}\_calls[] = {");
        return unless defined ($interface->{PROPERTIES}->{uuid});
 
        $self->pidl("static const struct ndr_interface_call $interface->{NAME}\_calls[] = {");
-       foreach my $d (@{$interface->{FUNCTIONS}}) {
-               next if not defined($d->{OPNUM});
-               $self->pidl("\t{");
-               $self->pidl("\t\t\"$d->{NAME}\",");
-               $self->pidl("\t\tsizeof(struct $d->{NAME}),");
-               $self->pidl("\t\t(ndr_push_flags_fn_t) ndr_push_$d->{NAME},");
-               $self->pidl("\t\t(ndr_pull_flags_fn_t) ndr_pull_$d->{NAME},");
-               $self->pidl("\t\t(ndr_print_function_t) ndr_print_$d->{NAME},");
-               $self->pidl("\t\t".($d->{ASYNC}?"true":"false").",");
-               $self->pidl("\t},");
+
+       foreach my $d (@{$interface->{INHERITED_FUNCTIONS}},@{$interface->{FUNCTIONS}}) {
+               $self->FunctionCallEntry($d);
                $count++;
        }
        $self->pidl("\t{ NULL, 0, NULL, NULL, NULL, false }");
                $count++;
        }
        $self->pidl("\t{ NULL, 0, NULL, NULL, NULL, false }");
@@ -2355,7 +2362,7 @@ sub HeaderInterface($$$)
 
        foreach (@{$interface->{FUNCTIONS}}) {
                next if has_property($_, "noopnum");
 
        foreach (@{$interface->{FUNCTIONS}}) {
                next if has_property($_, "noopnum");
-               next if grep(/$_->{NAME}/,@{$interface->{INHERITED_FUNCTIONS}});
+               next if grep(/^$_->{NAME}$/,@{$interface->{INHERITED_FUNCTIONS}});
                my $u_name = uc $_->{NAME};
        
                my $val = sprintf("0x%02x", $count);
                my $u_name = uc $_->{NAME};
        
                my $val = sprintf("0x%02x", $count);