Merge branch 'master' of ssh://git.samba.org/data/git/samba
[kai/samba-autobuild/.git] / pidl / lib / Parse / Pidl / Samba4 / Python.pm
index 68e9c953957e6b1a131e04817e64bfff5d31ab7e..3efe77bdd9e22abcd9a889f8a2a8015d71f04698 100644 (file)
@@ -195,7 +195,7 @@ sub PythonStruct($$$$$$)
                        $self->pidl("static PyObject *py_$name\_get_$e->{NAME}(PyObject *obj, void *closure)");
                        $self->pidl("{");
                        $self->indent;
-                       $self->pidl("$cname *object = py_talloc_get_ptr(obj);");
+                       $self->pidl("$cname *object = ($cname *)py_talloc_get_ptr(obj);");
                        $self->pidl("PyObject *py_$e->{NAME};");
                        $self->ConvertObjectToPython("py_talloc_get_mem_ctx(obj)", $env, $e, $varname, "py_$e->{NAME}", "return NULL;");
                        $self->pidl("return py_$e->{NAME};");
@@ -206,7 +206,7 @@ sub PythonStruct($$$$$$)
                        $self->pidl("static int py_$name\_set_$e->{NAME}(PyObject *py_obj, PyObject *value, void *closure)");
                        $self->pidl("{");
                        $self->indent;
-                       $self->pidl("$cname *object = py_talloc_get_ptr(py_obj);");
+                       $self->pidl("$cname *object = ($cname *)py_talloc_get_ptr(py_obj);");
                        my $mem_ctx = "py_talloc_get_mem_ctx(py_obj)";
                        my $l = $e->{LEVELS}[0];
                        my $nl = GetNextLevel($e, $l);
@@ -250,7 +250,7 @@ sub PythonStruct($$$$$$)
                $self->pidl("static PyObject *py_$name\_ndr_pack(PyObject *py_obj)");
                $self->pidl("{");
                $self->indent;
-               $self->pidl("$cname *object = py_talloc_get_ptr(py_obj);");
+               $self->pidl("$cname *object = ($cname *)py_talloc_get_ptr(py_obj);");
                $self->pidl("DATA_BLOB blob;");
                $self->pidl("enum ndr_err_code err;");
                $self->pidl("err = ndr_push_struct_blob(&blob, py_talloc_get_mem_ctx(py_obj), NULL, object, (ndr_push_flags_fn_t)ndr_push_$name);");
@@ -269,7 +269,7 @@ sub PythonStruct($$$$$$)
                $self->pidl("static PyObject *py_$name\_ndr_unpack(PyObject *py_obj, PyObject *args)");
                $self->pidl("{");
                $self->indent;
-               $self->pidl("$cname *object = py_talloc_get_ptr(py_obj);");
+               $self->pidl("$cname *object = ($cname *)py_talloc_get_ptr(py_obj);");
                $self->pidl("DATA_BLOB blob;");
                $self->pidl("enum ndr_err_code err;");
                $self->pidl("if (!PyArg_ParseTuple(args, \"s#:__ndr_unpack__\", &blob.data, &blob.length))");
@@ -283,7 +283,7 @@ sub PythonStruct($$$$$$)
                $self->deindent;
                $self->pidl("}");
                $self->pidl("");
-               $self->pidl("return Py_None;");
+               $self->pidl("Py_RETURN_NONE;");
                $self->deindent;
                $self->pidl("}");
                $self->pidl("");
@@ -789,7 +789,9 @@ sub register_module_object($$$)
 sub assign($$$)
 {
        my ($self, $dest, $src) = @_;
-       if ($dest =~ /^\&/) {
+       if ($dest =~ /^\&/ and $src eq "NULL") {
+               $self->pidl("memset($dest, 0, sizeof(" . get_value_of($dest) . "));");
+       } elsif ($dest =~ /^\&/) {
                $self->pidl("memcpy($dest, $src, sizeof(" . get_value_of($dest) . "));");
        } else {
                $self->pidl("$dest = $src;");
@@ -1126,6 +1128,10 @@ sub Parse($$$$$)
 #include \"$hdr\"
 #include \"$ndr_hdr\"
 
+#ifndef Py_RETURN_NONE
+#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
+#endif
+
 ");
 
        foreach my $x (@$ndr) {