diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2005-02-21 01:16:47 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:10:49 -0500 |
commit | 7e400d38ecfdbf2b0ba744b182db14fe286da404 (patch) | |
tree | 60117d7f2c282e2959e6d199f96bc445871c42fb /source4/build/pidl/odl.pm | |
parent | e770d5696ee0265661fd6cc2fa24a24b19a0b889 (diff) | |
download | samba-7e400d38ecfdbf2b0ba744b182db14fe286da404.tar.gz samba-7e400d38ecfdbf2b0ba744b182db14fe286da404.tar.bz2 samba-7e400d38ecfdbf2b0ba744b182db14fe286da404.zip |
r5479: Add ODL input support.
The ODL module can convert an ODL structure to an IDL structure so that:
- The COM subsystem can use the ODL structure
- The DCE/RPC subsystem can use the IDL structure
(This used to be commit a339765d99c90c46f29e2bd71a6aa271febb096d)
Diffstat (limited to 'source4/build/pidl/odl.pm')
-rw-r--r-- | source4/build/pidl/odl.pm | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/source4/build/pidl/odl.pm b/source4/build/pidl/odl.pm new file mode 100644 index 0000000000..37c8a5a687 --- /dev/null +++ b/source4/build/pidl/odl.pm @@ -0,0 +1,59 @@ +########################################## +# Converts ODL stuctures to IDL structures +# (C) 2004-2005 Jelmer Vernooij <jelmer@samba.org> + +package ODL; + +use strict; + +sub FunctionAddObjArgs($) +{ + my $e = shift; + + unshift(@{$e->{ELEMENTS}}, { + 'NAME' => 'ORPCthis', + 'POINTERS' => 0, + 'PROPERTIES' => { 'in' => '1' }, + 'TYPE' => 'ORPCTHIS' + }); + unshift(@{$e->{ELEMENTS}}, { + 'NAME' => 'ORPCthat', + 'POINTERS' => 0, + 'PROPERTIES' => { 'out' => '1' }, + 'TYPE' => 'ORPCTHAT' + }); +} + +sub ReplaceInterfacePointers($) +{ + my $e = shift; + + foreach my $x (@{$e->{ELEMENTS}}) { + next unless typelist::hasType($x); + next unless typelist::getType($x)->{DATA}->{TYPE} eq "INTERFACE"; + + $x->{TYPE} = "MInterfacePointer"; + } +} + +# Add ORPC specific bits to an interface. +sub ODL2IDL($) +{ + my $odl = shift; + my @idl = @{$odl}; + + foreach my $x (@idl) { + # Add [in] ORPCTHIS *this, [out] ORPCTHAT *that + # for 'object' interfaces + if (util::has_property($x, "object")) { + foreach my $e (@{$x->{DATA}}) { + ($e->{TYPE} eq "FUNCTION") && FunctionAddObjArgs($e); + ReplaceInterfacePointers($e); + } + } + } + + return \@idl; +} + +1; |