--- /dev/null
+GIR
+
+Input:
+
+ <function name="get_array_return" c:identifier="test_get_array_return">
+ <return-value transfer-ownership="none">
+ <array zero-terminated="0" c:type="gpointer*" fixed-size="16">
+ <type name="guint8"/>
+ </array>
+ </return-value>
+ </function>
+
+ <function name="change_array" c:identifier="test_change_array">
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <parameter name="array"
+ direction="inout"
+ caller-allocates="1"
+ transfer-ownership="full">
+ <array zero-terminated="0" c:type="gpointer*" fixed-size="2">
+ <type name="guint8"/>
+ </array>
+ </parameter>
+ </parameters>
+ </function>
+
+ <function name="get_array_out" c:identifier="test_get_array_out">
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <parameter name="array"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="full">
+ <array zero-terminated="0" c:type="gpointer*" fixed-size="8">
+ <type name="guint8"/>
+ </array>
+ </parameter>
+ </parameters>
+ </function>
+
+ <function name="set_array" c:identifier="test_set_array">
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <parameter name="array"
+ transfer-ownership="none">
+ <array zero-terminated="0" c:type="gpointer*" fixed-size="4">
+ <type name="guint8"/>
+ </array>
+ </parameter>
+ </parameters>
+ </function>
+
+Output:
+
+[CCode (cheader_filename = "test.h")]
+public static void change_array ([CCode (array_length = false)] ref uint8 array[2]);
+[CCode (cheader_filename = "test.h")]
+public static void get_array_out ([CCode (array_length = false)] out uint8 array[8]);
+[CCode (array_length = false, cheader_filename = "test.h")]
+public static unowned uint8[] get_array_return ();
+[CCode (cheader_filename = "test.h")]
+public static void set_array ([CCode (array_length = false)] uint8 array[4]);