From e912f36dc827d7ad38994b93967fe48aade27b2b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 18 Feb 2005 11:45:26 +0000 Subject: [PATCH] r5442: Use argument list generator functions from NdrParser in NdrHeader --- source/build/pidl/header.pm | 40 +++++++++------------------------------- source/build/pidl/ndr.pm | 6 ++++++ 2 files changed, 15 insertions(+), 31 deletions(-) diff --git a/source/build/pidl/header.pm b/source/build/pidl/header.pm index 00321fef934..57689c61658 100644 --- a/source/build/pidl/header.pm +++ b/source/build/pidl/header.pm @@ -239,37 +239,15 @@ sub HeaderTypedefProto($) return; } - if ($d->{DATA}{TYPE} eq "STRUCT") { - pidl "NTSTATUS ndr_push_$d->{NAME}(struct ndr_push *ndr, int ndr_flags, struct $d->{NAME} *r);\n"; - pidl "NTSTATUS ndr_pull_$d->{NAME}(struct ndr_pull *ndr, int ndr_flags, struct $d->{NAME} *r);\n"; - if (!util::has_property($d, "noprint")) { - pidl "void ndr_print_$d->{NAME}(struct ndr_print *ndr, const char *name, struct $d->{NAME} *r);\n"; - } - - } - if ($d->{DATA}{TYPE} eq "UNION") { - pidl "NTSTATUS ndr_push_$d->{NAME}(struct ndr_push *ndr, int ndr_flags, int level, union $d->{NAME} *r);\n"; - pidl "NTSTATUS ndr_pull_$d->{NAME}(struct ndr_pull *ndr, int ndr_flags, int level, union $d->{NAME} *r);\n"; - if (!util::has_property($d, "noprint")) { - pidl "void ndr_print_$d->{NAME}(struct ndr_print *ndr, const char *name, int level, union $d->{NAME} *r);\n"; - } - } - - if ($d->{DATA}{TYPE} eq "ENUM") { - pidl "NTSTATUS ndr_push_$d->{NAME}(struct ndr_push *ndr, int ndr_flags, enum $d->{NAME} r);\n"; - pidl "NTSTATUS ndr_pull_$d->{NAME}(struct ndr_pull *ndr, int ndr_flags, enum $d->{NAME} *r);\n"; - if (!util::has_property($d, "noprint")) { - pidl "void ndr_print_$d->{NAME}(struct ndr_print *ndr, const char *name, enum $d->{NAME} r);\n"; - } - } - - if ($d->{DATA}{TYPE} eq "BITMAP") { - my $type_decl = util::bitmap_type_decl($d->{DATA}); - pidl "NTSTATUS ndr_push_$d->{NAME}(struct ndr_push *ndr, int ndr_flags, $type_decl r);\n"; - pidl "NTSTATUS ndr_pull_$d->{NAME}(struct ndr_pull *ndr, int ndr_flags, $type_decl *r);\n"; - if (!util::has_property($d, "noprint")) { - pidl "void ndr_print_$d->{NAME}(struct ndr_print *ndr, const char *name, $type_decl r);\n"; - } + my $tf = NdrParser::get_typefamily($d->{DATA}{TYPE}); + + my $pull_args = $tf->{PULL_FN_ARGS}->($d); + my $push_args = $tf->{PUSH_FN_ARGS}->($d); + my $print_args = $tf->{PRINT_FN_ARGS}->($d); + pidl "NTSTATUS ndr_push_$d->{NAME}($push_args);\n"; + pidl "NTSTATUS ndr_pull_$d->{NAME}($pull_args);\n"; + if (!util::has_property($d, "noprint")) { + pidl "void ndr_print_$d->{NAME}($print_args);\n"; } } diff --git a/source/build/pidl/ndr.pm b/source/build/pidl/ndr.pm index effaaf49954..d63af9202ca 100644 --- a/source/build/pidl/ndr.pm +++ b/source/build/pidl/ndr.pm @@ -20,6 +20,12 @@ sub get_typedef($) return $typedefs{$n}; } +sub get_typefamily($) +{ + my $n = shift; + return $typefamily{$n}; +} + sub RegisterPrimitives() { my %type_alignments = -- 2.11.4.GIT