r15327: Support 'nosize'. Also write prototypes for print and size functions that...
authorJelmer Vernooij <jelmer@samba.org>
Sat, 29 Apr 2006 17:33:32 +0000 (17:33 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:05:17 +0000 (14:05 -0500)
source/pidl/lib/Parse/Pidl/NDR.pm
source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm

index 1efd0694e589b6ae64bed0ac572407f4bdd01fdb..a4008a1545619c1f8c597554128a2540d317c9f5 100644 (file)
@@ -787,6 +787,7 @@ my %property_list = (
        "public"                => ["FUNCTION", "TYPEDEF"],
        "nopush"                => ["FUNCTION", "TYPEDEF"],
        "nopull"                => ["FUNCTION", "TYPEDEF"],
+       "nosize"                => ["FUNCTION", "TYPEDEF"],
        "noprint"               => ["FUNCTION", "TYPEDEF"],
        "noejs"                 => ["FUNCTION", "TYPEDEF"],
 
index 4d40699435447eda95f66a719acf3473c27bc7a9..b7ae526e68b914bf7f268de128e6f2d1b0ea8567 100644 (file)
@@ -198,12 +198,19 @@ sub fn_declare($$$)
 {
        my ($type,$fn,$decl) = @_;
 
-       if (has_property($fn, "no$type") or has_property($fn, "public")) {
+       if (has_property($fn, "no$type")) {
                pidl_hdr "$decl;";
-               pidl "_PUBLIC_ $decl" unless (has_property($fn, "no$type"));
+               return 0;
+       }
+
+       if (has_property($fn, "public")) {
+               pidl_hdr "$decl;";
+               pidl "_PUBLIC_ $decl";
        } else {
                pidl "static $decl";
        }
+
+       return 1;
 }
 
 ###################################################################
@@ -1814,7 +1821,7 @@ sub ParseTypedefPush($)
        my($e) = shift;
 
        my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"push");
-       fn_declare("push", $e, "NTSTATUS ndr_push_$e->{NAME}(struct ndr_push *ndr, int ndr_flags, $args)");
+       fn_declare("push", $e, "NTSTATUS ndr_push_$e->{NAME}(struct ndr_push *ndr, int ndr_flags, $args)") or return;
 
        pidl "{";
        indent;
@@ -1833,7 +1840,7 @@ sub ParseTypedefPull($)
 
        my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"pull");
 
-       fn_declare("pull", $e, "NTSTATUS ndr_pull_$e->{NAME}(struct ndr_pull *ndr, int ndr_flags, $args)");
+       fn_declare("pull", $e, "NTSTATUS ndr_pull_$e->{NAME}(struct ndr_pull *ndr, int ndr_flags, $args)") or return;
 
        pidl "{";
        indent;
@@ -1852,8 +1859,11 @@ sub ParseTypedefPrint($)
 
        my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"print");
 
-       pidl "_PUBLIC_ void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args)";
        pidl_hdr "void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args);";
+
+       return if (has_property($e, "noprint"));
+
+       pidl "_PUBLIC_ void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args)";
        pidl "{";
        indent;
        $typefamily{$e->{DATA}->{TYPE}}->{PRINT_FN_BODY}->($e->{DATA}, $e->{NAME});
@@ -1871,7 +1881,7 @@ sub ParseTypedefNdrSize($)
        my $tf = $typefamily{$t->{DATA}->{TYPE}};
        my $args = $tf->{SIZE_FN_ARGS}->($t);
 
-       fn_declare("size", $t, "size_t ndr_size_$t->{NAME}($args)");
+       fn_declare("size", $t, "size_t ndr_size_$t->{NAME}($args)") or return;
 
        pidl "{";
        indent;
@@ -1887,10 +1897,11 @@ sub ParseFunctionPrint($)
 {
        my($fn) = shift;
 
+       pidl_hdr "void ndr_print_$fn->{NAME}(struct ndr_print *ndr, const char *name, int flags, const struct $fn->{NAME} *r);";
+
        return if has_property($fn, "noprint");
 
        pidl "_PUBLIC_ void ndr_print_$fn->{NAME}(struct ndr_print *ndr, const char *name, int flags, const struct $fn->{NAME} *r)";
-       pidl_hdr "void ndr_print_$fn->{NAME}(struct ndr_print *ndr, const char *name, int flags, const struct $fn->{NAME} *r);";
        pidl "{";
        indent;
 
@@ -1952,7 +1963,7 @@ sub ParseFunctionPush($)
 { 
        my($fn) = shift;
 
-       fn_declare("push", $fn, "NTSTATUS ndr_push_$fn->{NAME}(struct ndr_push *ndr, int flags, const struct $fn->{NAME} *r)");
+       fn_declare("push", $fn, "NTSTATUS ndr_push_$fn->{NAME}(struct ndr_push *ndr, int flags, const struct $fn->{NAME} *r)") or return;
 
        return if has_property($fn, "nopush");
 
@@ -2033,9 +2044,7 @@ sub ParseFunctionPull($)
        my($fn) = shift;
 
        # pull function args
-       fn_declare("pull", $fn, "NTSTATUS ndr_pull_$fn->{NAME}(struct ndr_pull *ndr, int flags, struct $fn->{NAME} *r)");
-
-       return if has_property($fn, "nopull");
+       fn_declare("pull", $fn, "NTSTATUS ndr_pull_$fn->{NAME}(struct ndr_pull *ndr, int flags, struct $fn->{NAME} *r)") or return;
 
        pidl "{";
        indent;
@@ -2405,9 +2414,9 @@ sub NeededTypedef($$)
 {
        my ($t,$needed) = @_;
        if (has_property($t, "public")) {
-               $needed->{"pull_$t->{NAME}"} = not has_property($t, "nopull");
-               $needed->{"push_$t->{NAME}"} = not has_property($t, "nopush");
-               $needed->{"print_$t->{NAME}"} = not has_property($t, "noprint");
+               $needed->{"pull_$t->{NAME}"} = 1;
+               $needed->{"push_$t->{NAME}"} = 1;
+               $needed->{"print_$t->{NAME}"} = 1;
        }
 
        if ($t->{DATA}->{TYPE} eq "STRUCT" or $t->{DATA}->{TYPE} eq "UNION") {