Bug 572965 – Allow generic marshaller to be called without parameters

girepository/ginvoke.c: handle the case where n_param_values == 0.
tests/invoke/genericmarshaller.c: add a test case for this.
This commit is contained in:
Johan Bilien 2009-02-24 15:19:07 +00:00
parent 86c1c58917
commit f13354f9ea

View File

@ -407,18 +407,26 @@ gi_cclosure_marshal_generic (GClosure *closure,
atypes = g_alloca (sizeof (ffi_type *) * n_args); atypes = g_alloca (sizeof (ffi_type *) * n_args);
args = g_alloca (sizeof (gpointer) * n_args); args = g_alloca (sizeof (gpointer) * n_args);
if (G_CCLOSURE_SWAP_DATA (closure)) if (n_param_values > 0)
{ {
atypes[n_args-1] = value_to_ffi_type (param_values + 0, if (G_CCLOSURE_SWAP_DATA (closure))
&args[n_args-1]); {
atypes[0] = &ffi_type_pointer; atypes[n_args-1] = value_to_ffi_type (param_values + 0,
args[0] = &closure->data; &args[n_args-1]);
atypes[0] = &ffi_type_pointer;
args[0] = &closure->data;
}
else
{
atypes[0] = value_to_ffi_type (param_values + 0, &args[0]);
atypes[n_args-1] = &ffi_type_pointer;
args[n_args-1] = &closure->data;
}
} }
else else
{ {
atypes[0] = value_to_ffi_type (param_values + 0, &args[0]); atypes[0] = &ffi_type_pointer;
atypes[n_args-1] = &ffi_type_pointer; args[0] = &closure->data;
args[n_args-1] = &closure->data;
} }
for (i = 1; i < n_args - 1; i++) for (i = 1; i < n_args - 1; i++)