r24506: pass $fn down one more layer
authorStefan Metzmacher <metze@samba.org>
Fri, 17 Aug 2007 07:46:34 +0000 (07:46 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 20:02:04 +0000 (15:02 -0500)
metze
(This used to be commit 8cc3fd09ffce6f389d979ec0a49d2ecefda70dd1)

source4/pidl/lib/Parse/Pidl/Samba4/Header.pm

index 3c0a7bc24e25b1bc6ebb4a0b842c025e73abf7ed..e10f647635a7d7c500fdaaae7d28df87732eabcd 100644 (file)
@@ -254,8 +254,10 @@ sub HeaderFunctionInOut($$)
 {
        my($fn,$prop) = @_;
 
-       foreach (@{$fn->{ELEMENTS}}) {
-               HeaderElement($_) if (ElementDirection($_) eq $prop);
+       return unless defined($fn->{ELEMENTS});
+
+       foreach my $e (@{$fn->{ELEMENTS}}) {
+               HeaderElement($e->{ORIGINAL}) if (ElementDirection($e) eq $prop);
        }
 }
 
@@ -265,10 +267,12 @@ sub HeaderFunctionInOut_needed($$)
 {
        my($fn,$prop) = @_;
 
-       return 1 if ($prop eq "out" && $fn->{RETURN_TYPE} ne "void");
+       return 1 if ($prop eq "out" && defined($fn->{RETURN_TYPE}));
+
+       return undef unless defined($fn->{ELEMENTS});
 
-       foreach (@{$fn->{ELEMENTS}}) {
-               return 1 if (ElementDirection($_) eq $prop);
+       foreach my $e (@{$fn->{ELEMENTS}}) {
+               return 1 if (ElementDirection($e) eq $prop);
        }
 
        return undef;
@@ -290,23 +294,23 @@ sub HeaderFunction($)
        $tab_depth++;
        my $needed = 0;
 
-       if (HeaderFunctionInOut_needed($fn->{ORIGINAL}, "in") or
-           HeaderFunctionInOut_needed($fn->{ORIGINAL}, "inout")) {
+       if (HeaderFunctionInOut_needed($fn, "in") or
+           HeaderFunctionInOut_needed($fn, "inout")) {
                pidl tabs()."struct {\n";
                $tab_depth++;
-               HeaderFunctionInOut($fn->{ORIGINAL}, "in");
-               HeaderFunctionInOut($fn->{ORIGINAL}, "inout");
+               HeaderFunctionInOut($fn, "in");
+               HeaderFunctionInOut($fn, "inout");
                $tab_depth--;
                pidl tabs()."} in;\n\n";
                $needed++;
        }
 
-       if (HeaderFunctionInOut_needed($fn->{ORIGINAL}, "out") or
-           HeaderFunctionInOut_needed($fn->{ORIGINAL}, "inout")) {
+       if (HeaderFunctionInOut_needed($fn, "out") or
+           HeaderFunctionInOut_needed($fn, "inout")) {
                pidl tabs()."struct {\n";
                $tab_depth++;
-               HeaderFunctionInOut($fn->{ORIGINAL}, "out");
-               HeaderFunctionInOut($fn->{ORIGINAL}, "inout");
+               HeaderFunctionInOut($fn, "out");
+               HeaderFunctionInOut($fn, "inout");
                if (defined($fn->{RETURN_TYPE})) {
                        pidl tabs().mapTypeName($fn->{RETURN_TYPE}) . " result;\n";
                }