| 1873 | } |
| 1874 | |
| 1875 | bool gjs_value_to_basic_array_gi_argument(JSContext* cx, JS::HandleValue value, |
| 1876 | GITypeTag element_tag, |
| 1877 | GIArrayType array_type, |
| 1878 | GIArgument* arg, const char* arg_name, |
| 1879 | GjsArgumentType arg_type, |
| 1880 | GjsArgumentFlags flags) { |
| 1881 | Gjs::AutoPointer<void> data; |
| 1882 | size_t length; |
| 1883 | if (!gjs_array_to_basic_explicit_array(cx, value, element_tag, arg_name, |
| 1884 | arg_type, flags, data.out(), |
| 1885 | &length)) { |
| 1886 | return false; |
| 1887 | } |
| 1888 | |
| 1889 | switch (array_type) { |
| 1890 | case GI_ARRAY_TYPE_C: |
| 1891 | gjs_arg_set(arg, data.release()); |
| 1892 | return true; |
| 1893 | |
| 1894 | case GI_ARRAY_TYPE_ARRAY: { |
| 1895 | GArray* array = garray_new_for_basic_type(length, element_tag); |
| 1896 | |
| 1897 | if (data) |
| 1898 | g_array_append_vals(array, data, length); |
| 1899 | gjs_arg_set(arg, array); |
| 1900 | return true; |
| 1901 | } |
| 1902 | |
| 1903 | case GI_ARRAY_TYPE_BYTE_ARRAY: |
| 1904 | return gjs_value_to_byte_array_gi_argument(cx, value, arg, arg_name, |
| 1905 | flags); |
| 1906 | |
| 1907 | case GI_ARRAY_TYPE_PTR_ARRAY: { |
| 1908 | GPtrArray* array = g_ptr_array_sized_new(length); |
| 1909 | |
| 1910 | g_ptr_array_set_size(array, length); |
| 1911 | if (data) |
| 1912 | memcpy(array->pdata, data, sizeof(void*) * length); |
| 1913 | gjs_arg_set(arg, array); |
| 1914 | return true; |
| 1915 | } |
| 1916 | } |
| 1917 | g_assert_not_reached(); |
| 1918 | } |
| 1919 | |
| 1920 | bool gjs_value_to_byte_array_gi_argument(JSContext* cx, JS::HandleValue value, |
| 1921 | GIArgument* arg, const char* arg_name, |
no test coverage detected