Signed-off-by: Stefan Metzmacher <metze@samba.org>
- $self->pidl("$typename *ret = talloc_zero($mem_ctx, $typename);");
+ $self->pidl("$typename *ret = NULL;");
+ $self->pidl("");
+ $self->pidl("ret = talloc_zero($mem_ctx, $typename);");
+ $self->pidl("if (ret == NULL) {");
+ $self->indent;
+ $self->pidl("PyErr_NoMemory();");
+ $self->pidl("return NULL;");
+ $self->deindent;
+ $self->pidl("}");
+ $self->pidl("");
+
+ my $fail = "TALLOC_FREE(ret); return NULL;";
$self->pidl("switch ($switch) {");
$self->pidl("switch ($switch) {");
foreach my $e (@{$type->{ELEMENTS}}) {
$self->pidl("$e->{CASE}:");
if ($e->{CASE} eq "default") { $has_default = 1; }
$self->indent;
if ($e->{NAME}) {
foreach my $e (@{$type->{ELEMENTS}}) {
$self->pidl("$e->{CASE}:");
if ($e->{CASE} eq "default") { $has_default = 1; }
$self->indent;
if ($e->{NAME}) {
- $self->ConvertObjectFromPython({}, "ret", $e, $name, "ret->$e->{NAME}", "talloc_free(ret); return NULL;");
+ $self->ConvertObjectFromPython({}, "ret", $e, $name, "ret->$e->{NAME}", $fail);
}
$self->pidl("break;");
$self->deindent;
}
$self->pidl("break;");
$self->deindent;
$self->pidl("default:");
$self->indent;
$self->pidl("PyErr_SetString(PyExc_TypeError, \"invalid union level value\");");
$self->pidl("default:");
$self->indent;
$self->pidl("PyErr_SetString(PyExc_TypeError, \"invalid union level value\");");
- $self->pidl("talloc_free(ret);");
- $self->pidl("ret = NULL;");
+ $self->pidl("TALLOC_FREE(ret);");
+ $self->pidl("break;");
$self->pidl("}");
$self->pidl("");
$self->pidl("return ret;");
$self->pidl("}");
$self->pidl("");
$self->pidl("return ret;");