Copy over change from Samba repository:

commit 90bf114f6370ee837d97e36eb25f38f8234dcd39
  Author: Andrew Bartlett <abartlet@samba.org>
  Date:   Thu Feb 25 13:57:37 2016 +1300

    pidl: Use a tmp_ctx helper variable

    This is so we free the ndr_push_struct_blob() return value after
    we make it into a string

    Signed-off-by: Andrew Bartlett <abartlet@samba.org>
    Reviewed-by: Garming Sam <garming@catalyst.net.nz>

Shouldn't affect us, but it makes diffing cleaner.

Change-Id: I52ee911f89813e6f5a90445be4eb52494e3f69d3
Reviewed-on: https://code.wireshark.org/review/16739
Reviewed-by: Guy Harris <guy@alum.mit.edu>
This commit is contained in:
Guy Harris 2016-07-27 16:17:44 -07:00
parent 692f0145f4
commit 5623b7917e
1 changed files with 13 additions and 2 deletions

View File

@ -269,17 +269,28 @@ sub PythonStruct($$$$$$)
$self->pidl("{");
$self->indent;
$self->pidl("$cname *object = ($cname *)pytalloc_get_ptr(py_obj);");
$self->pidl("PyObject *ret = NULL;");
$self->pidl("DATA_BLOB blob;");
$self->pidl("enum ndr_err_code err;");
$self->pidl("err = ndr_push_struct_blob(&blob, pytalloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_$name);");
$self->pidl("TALLOC_CTX *tmp_ctx = talloc_new(pytalloc_get_mem_ctx(py_obj));");
$self->pidl("if (tmp_ctx == NULL) {");
$self->indent;
$self->pidl("PyErr_SetNdrError(NDR_ERR_ALLOC);");
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
$self->pidl("err = ndr_push_struct_blob(&blob, tmp_ctx, object, (ndr_push_flags_fn_t)ndr_push_$name);");
$self->pidl("if (err != NDR_ERR_SUCCESS) {");
$self->indent;
$self->pidl("TALLOC_FREE(tmp_ctx);");
$self->pidl("PyErr_SetNdrError(err);");
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
$self->pidl("");
$self->pidl("return PyString_FromStringAndSize((char *)blob.data, blob.length);");
$self->pidl("ret = PyString_FromStringAndSize((char *)blob.data, blob.length);");
$self->pidl("TALLOC_FREE(tmp_ctx);");
$self->pidl("return ret;");
$self->deindent;
$self->pidl("}");
$self->pidl("");