diff options
author | Tim Potter <tpot@samba.org> | 2004-09-08 12:56:57 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:58:35 -0500 |
commit | ec952cde0501b15c5e14a3c06333f97dc77dc1f0 (patch) | |
tree | eb55c6640ee002c34d9edec499e48a0be5ebbb86 /source4/build/pidl | |
parent | ff19c6ac0d4a966022e59986ced52857f75f94df (diff) | |
download | samba-ec952cde0501b15c5e14a3c06333f97dc77dc1f0.tar.gz samba-ec952cde0501b15c5e14a3c06333f97dc77dc1f0.tar.bz2 samba-ec952cde0501b15c5e14a3c06333f97dc77dc1f0.zip |
r2256: Include autogenerated interfaces for lsa and samr pipes. Typemaps are currently
not working though.
(This used to be commit 55bd2dc02de13ee3da1cde20694f452df0899a9f)
Diffstat (limited to 'source4/build/pidl')
-rw-r--r-- | source4/build/pidl/swig.pm | 73 |
1 files changed, 69 insertions, 4 deletions
diff --git a/source4/build/pidl/swig.pm b/source4/build/pidl/swig.pm index 124b6e593e..71b28ccfb7 100644 --- a/source4/build/pidl/swig.pm +++ b/source4/build/pidl/swig.pm @@ -6,16 +6,81 @@ package IdlSwig; use strict; +use Data::Dumper; + +my($res); +my($name); + +sub ParseFunction($) +{ + my($fn) = shift; + +# print Dumper($fn); + + # Input typemap + + $res .= "%typemap(in) struct $fn->{NAME} * (struct $fn->{NAME} temp) {\n"; + $res .= "\tif (!PyDict_Check(\$input)) {\n"; + $res .= "\t\tPyErr_SetString(PyExc_TypeError, \"dict arg expected\");\n"; + $res .= "\t\treturn NULL;\n"; + $res .= "\t}\n\n"; + $res .= "\tmemset(&temp, 0, sizeof(temp));\n\n"; + $res .= "\t/* store input params in dict */\n\n"; + $res .= "\t\$1 = &temp;\n"; + $res .= "}\n\n"; + + # Output typemap + + $res .= "%typemap(argout) struct $fn->{NAME} * {\n"; + $res .= "\tlong status = PyLong_AsLong(resultobj);\n"; + $res .= "\tPyObject *dict;\n"; + $res .= "\n"; + $res .= "\tif (status != 0) {\n"; + $res .= "\t\tset_ntstatus_exception(status);\n"; + $res .= "\t\treturn NULL;\n"; + $res .= "\t}\n"; + $res .= "\n"; + $res .= "\tdict = PyDict_New();\n\n"; + $res .= "\t/* store output params in dict */\n\n"; + $res .= "\tresultobj = dict;\n"; + $res .= "}\n\n"; + + # Function definitions + + $res .= "%rename($fn->{NAME}) dcerpc_$fn->{NAME};\n"; + $res .= "$fn->{RETURN_TYPE} dcerpc_$fn->{NAME}(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $fn->{NAME} *r);\n\n"; +} + +sub ParseInheritedData($) +{ + my($data) = shift; + + foreach my $e (@{$data}) { + ($e->{TYPE} eq "FUNCTION") && ParseFunction($e); + } +} + +sub ParseHeader($) +{ + my($hdr) = shift; + + $name = $hdr->{NAME}; + $res .= "#define DCERPC_" . uc($name) . "_UUID \"$hdr->{PROPERTIES}->{uuid}\"\n"; + $res .= "const int DCERPC_" . uc($name) . "_VERSION = " . $hdr->{PROPERTIES}->{version} . ";\n"; + $res .= "#define DCERPC_" . uc($name) . "_NAME \"" . $name . "\"\n"; + $res .= "\n"; + + ParseInheritedData($hdr->{INHERITED_DATA}); +} sub Parse($) { my($idl) = shift; - my($res) = ""; - - $res = "/* header auto-generated by pidl */\n\n"; + + $res = "/* auto-generated by pidl */\n\n"; foreach my $x (@{$idl}) { -# ($x->{TYPE} eq "INTERFACE") && HeaderInterface($x); + ($x->{TYPE} eq "INTERFACE") && ParseHeader($x); } return $res; |