[Vala] Implicit array size for function allocating an array
- From: Nicolas CARRIER <nicolas carrier parrot com>
- To: <vala-list gnome org>
- Subject: [Vala] Implicit array size for function allocating an array
- Date: Tue, 16 Dec 2014 10:52:27 +0100
Hello,
I'm trying to bind a C function which has the following prototype:
int sos_addresses_to_string(const struct sos_address *addresses,
char ***string_addresses, int nb);
It's job is to convert an array of addresses, into an array of their string
representation. So both the addresses array (in input) and the string_addresses
array will have the same size which is nb. So in output, string_addresses will
point to an allocated array of allocated char buffers.
I tried to bind it this way:
namespace Sos {
public struct Address {
...
public static int array_to_string([CCode (array_length_pos = 3)] Address
addresses[], [CCode (array_length = false] out string[] string_addresses);
}
}
and to use it with the following minimal code example:
public static int main(string[] args)
{
string[] strings;
Sos.Address[] addrs;
// the following call just populates the initial addrs array
Sos.Server.get_server_addresses("mambo", out addrs);
Sos.Address.array_to_string(addrs, out strings);
stdout.printf(@"str_addr: $(strings[0])\n");
return Posix.EXIT_SUCCESS;
}
This approach works, but valgrind complains that the pointed string, in the
returned array, isn't freed. In fact, in the generated code, _vala_array_free is
called with an array length of -1, so only the array is freed, not the pointed
addresses.
I tried to add array_length_cexpr = "addresses.length" but it didn't do
anything, unless I remove 'array_length = false', but in this case, an extra
parameter is added and the code doesn't compile any-more.
What would be the best solution to this issue in your opinion ?
Thank you in advance.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]