Re: [Vala] How to set custom free function for an array?






 
      From: "marcin saepia net" <marcin saepia net>
 Sent: Sunday, 12 June 2016, 18:39
 Subject: [Vala] How to set custom free function for an array?
   
I am struggling to properly handle jack_get_ports (
http://jackaudio.org/files/docs/html/group__PortSearching.html).

It returns const char **, but has to be freed by a dedicated jack_free
function instead of generic vala free func for arrays.

How can I handle this properly in Vala?



I would try:
[CCode(array_null_terminated = true, free_function = "jack_free")]public string[] get_ports( string 
port_name, string type_name, long flags )
This is untested, so I would like to know if it works. I am slowly updating the bindings docs and I had the 
same question.
My reasoning is as follows:
Under https://wiki.gnome.org/Projects/Vala/LegacyBindings#Arrays it states "For a return value, the CCode 
attribute of the method controls the array's binding." So that is why the array_null_terminated = true goes 
where it does. By extension the attribute detail for the free function should go in the same place.
A few days ago I added a "Memory Management Binding Needed?" column to the table in 
https://wiki.gnome.org/action/recall/Projects/Vala/LegacyBindings#Binding_to_C_Heap_Handlers Previously the 
table just said "Array - Singly Owned", so I made a logical leap and thought the attribute detail would be 
"free_function" like a singly owned class. It would be good to have confirmation of this. If it is not then 
it probably means digging in the Vala source to see if there is anything already there before submitting a 
bug report and at a later date a patch.
I hope that works,
Al


   
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]