diff options
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/bindings/gio/memoryoutputstream.c-expected | 227 | ||||
-rw-r--r-- | tests/bindings/gio/memoryoutputstream.vala | 43 | ||||
-rw-r--r-- | vapi/gio-2.0.vapi | 11 | ||||
-rw-r--r-- | vapi/metadata/Gio-2.0-custom.vala | 11 |
5 files changed, 293 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 788d9e474..5c201124d 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1348,6 +1348,7 @@ TESTS = \ genie/typeof.gs \ genie/while.gs \ glib/conditional-glib-api.vala \ + bindings/gio/memoryoutputstream.vala \ $(LINUX_TESTS) \ $(NULL) diff --git a/tests/bindings/gio/memoryoutputstream.c-expected b/tests/bindings/gio/memoryoutputstream.c-expected new file mode 100644 index 000000000..515949246 --- /dev/null +++ b/tests/bindings/gio/memoryoutputstream.c-expected @@ -0,0 +1,227 @@ +/* bindings_gio_memoryoutputstream.c generated by valac, the Vala compiler + * generated from bindings_gio_memoryoutputstream.vala, do not modify */ + +#include <glib.h> +#include <gio/gio.h> +#include <stdlib.h> +#include <string.h> + +#if !defined(VALA_EXTERN) +#if defined(_MSC_VER) +#define VALA_EXTERN __declspec(dllexport) extern +#elif __GNUC__ >= 4 +#define VALA_EXTERN __attribute__((visibility("default"))) extern +#else +#define VALA_EXTERN extern +#endif +#endif + +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) +#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); +#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; } +#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; } +#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); + +VALA_EXTERN void test_stack_data (void); +VALA_EXTERN void test_heap_data (void); +VALA_EXTERN void test_owned_data (void); +static void _vala_main (void); + +static GMemoryOutputStream* +vala_g_memory_output_stream_with_data (guint8* data, + gsize data_length1) +{ + GMemoryOutputStream* _tmp0_; + GMemoryOutputStream* result = NULL; + _tmp0_ = (GMemoryOutputStream*) g_memory_output_stream_new (data, (gsize) data_length1, NULL, NULL); + result = _tmp0_; + return result; +} + +void +test_stack_data (void) +{ + guint8 buffer[7] = {0}; + GMemoryOutputStream* mos = NULL; + GMemoryOutputStream* _tmp0_; + GDataOutputStream* dos = NULL; + GDataOutputStream* _tmp1_; + GError* _inner_error0_ = NULL; + _tmp0_ = vala_g_memory_output_stream_with_data (buffer, (gsize) 7); + mos = _tmp0_; + _tmp1_ = g_data_output_stream_new (G_TYPE_CHECK_INSTANCE_CAST (mos, g_output_stream_get_type (), GOutputStream)); + dos = _tmp1_; + { + g_data_output_stream_put_string (dos, "foobar\0", NULL, &_inner_error0_); + if (G_UNLIKELY (_inner_error0_ != NULL)) { + goto __catch0_g_error; + } + _vala_assert (7 == 7, "buffer.length == 7"); + _vala_assert (g_strcmp0 ((const gchar*) buffer, "foobar") == 0, "(string) buffer == \"foobar\""); + } + goto __finally0; + __catch0_g_error: + { + g_clear_error (&_inner_error0_); + g_assert_not_reached (); + } + __finally0: + if (G_UNLIKELY (_inner_error0_ != NULL)) { + _g_object_unref0 (dos); + _g_object_unref0 (mos); + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code); + g_clear_error (&_inner_error0_); + return; + } + _g_object_unref0 (dos); + _g_object_unref0 (mos); +} + +void +test_heap_data (void) +{ + guint8* buffer = NULL; + guint8* _tmp0_; + gint buffer_length1; + gint _buffer_size_; + GMemoryOutputStream* mos = NULL; + GMemoryOutputStream* _tmp1_; + GDataOutputStream* dos = NULL; + GDataOutputStream* _tmp2_; + GError* _inner_error0_ = NULL; + _tmp0_ = g_new0 (guint8, 7); + buffer = _tmp0_; + buffer_length1 = 7; + _buffer_size_ = buffer_length1; + _tmp1_ = vala_g_memory_output_stream_with_data (buffer, (gsize) buffer_length1); + mos = _tmp1_; + _tmp2_ = g_data_output_stream_new (G_TYPE_CHECK_INSTANCE_CAST (mos, g_output_stream_get_type (), GOutputStream)); + dos = _tmp2_; + { + g_data_output_stream_put_string (dos, "foobar\0", NULL, &_inner_error0_); + if (G_UNLIKELY (_inner_error0_ != NULL)) { + goto __catch0_g_error; + } + _vala_assert (g_strcmp0 ((const gchar*) buffer, "foobar") == 0, "(string) buffer == \"foobar\""); + } + goto __finally0; + __catch0_g_error: + { + g_clear_error (&_inner_error0_); + g_assert_not_reached (); + } + __finally0: + if (G_UNLIKELY (_inner_error0_ != NULL)) { + _g_object_unref0 (dos); + _g_object_unref0 (mos); + buffer = (g_free (buffer), NULL); + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code); + g_clear_error (&_inner_error0_); + return; + } + _g_object_unref0 (dos); + _g_object_unref0 (mos); + buffer = (g_free (buffer), NULL); +} + +static GMemoryOutputStream* +vala_g_memory_output_stream_with_owned_data (guint8* data, + gsize data_length1) +{ + gsize size = 0UL; + guint8* _tmp0_; + gint _tmp0__length1; + GReallocFunc _tmp1_; + GDestroyNotify _tmp2_; + GMemoryOutputStream* _tmp3_; + GMemoryOutputStream* result = NULL; + size = (gsize) data_length1; + _tmp0_ = data; + _tmp0__length1 = data_length1; + data = NULL; + data_length1 = 0; + _tmp1_ = g_realloc; + _tmp2_ = g_free; + _tmp3_ = (GMemoryOutputStream*) g_memory_output_stream_new (_tmp0_, size, _tmp1_, _tmp2_); + result = _tmp3_; + data = (g_free (data), NULL); + return result; +} + +void +test_owned_data (void) +{ + guint8* buffer = NULL; + guint8* _tmp0_; + gint buffer_length1; + gint _buffer_size_; + GMemoryOutputStream* mos = NULL; + guint8* _tmp1_; + gint _tmp1__length1; + GMemoryOutputStream* _tmp2_; + GDataOutputStream* dos = NULL; + GDataOutputStream* _tmp3_; + GError* _inner_error0_ = NULL; + _tmp0_ = g_new0 (guint8, 7); + buffer = _tmp0_; + buffer_length1 = 7; + _buffer_size_ = buffer_length1; + _tmp1_ = buffer; + _tmp1__length1 = buffer_length1; + buffer = NULL; + buffer_length1 = 0; + _tmp2_ = vala_g_memory_output_stream_with_owned_data (_tmp1_, (gsize) _tmp1__length1); + mos = _tmp2_; + _tmp3_ = g_data_output_stream_new (G_TYPE_CHECK_INSTANCE_CAST (mos, g_output_stream_get_type (), GOutputStream)); + dos = _tmp3_; + { + guint8* data = NULL; + guint8* _tmp4_; + gint data_length1; + gint _data_size_; + g_data_output_stream_put_string (dos, "foobar\0", NULL, &_inner_error0_); + if (G_UNLIKELY (_inner_error0_ != NULL)) { + goto __catch0_g_error; + } + _tmp4_ = g_memory_output_stream_get_data (mos); + data = _tmp4_; + data_length1 = -1; + _data_size_ = data_length1; + _vala_assert (g_strcmp0 ((const gchar*) data, "foobar") == 0, "(string) data == \"foobar\""); + } + goto __finally0; + __catch0_g_error: + { + g_clear_error (&_inner_error0_); + g_assert_not_reached (); + } + __finally0: + if (G_UNLIKELY (_inner_error0_ != NULL)) { + _g_object_unref0 (dos); + _g_object_unref0 (mos); + buffer = (g_free (buffer), NULL); + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code); + g_clear_error (&_inner_error0_); + return; + } + _g_object_unref0 (dos); + _g_object_unref0 (mos); + buffer = (g_free (buffer), NULL); +} + +static void +_vala_main (void) +{ + test_stack_data (); + test_heap_data (); + test_owned_data (); +} + +int +main (int argc, + char ** argv) +{ + _vala_main (); + return 0; +} + diff --git a/tests/bindings/gio/memoryoutputstream.vala b/tests/bindings/gio/memoryoutputstream.vala new file mode 100644 index 000000000..b3c361d46 --- /dev/null +++ b/tests/bindings/gio/memoryoutputstream.vala @@ -0,0 +1,43 @@ +void test_stack_data () { + uint8 buffer[7]; + var mos = MemoryOutputStream.with_data (buffer); + var dos = new DataOutputStream (mos); + try { + dos.put_string ("foobar\0"); + assert (buffer.length == 7); + assert ((string) buffer == "foobar"); + } catch { + assert_not_reached (); + } +} + +void test_heap_data () { + uint8[] buffer = new uint8[7]; + var mos = MemoryOutputStream.with_data (buffer); + var dos = new DataOutputStream (mos); + try { + dos.put_string ("foobar\0"); + assert ((string) buffer == "foobar"); + } catch { + assert_not_reached (); + } +} + +void test_owned_data () { + uint8[] buffer = new uint8[7]; + var mos = MemoryOutputStream.with_owned_data ((owned) buffer); + var dos = new DataOutputStream (mos); + try { + dos.put_string ("foobar\0"); + unowned uint8[] data = mos.get_data (); + assert ((string) data == "foobar"); + } catch { + assert_not_reached (); + } +} + +void main () { + test_stack_data (); + test_heap_data (); + test_owned_data (); +} diff --git a/vapi/gio-2.0.vapi b/vapi/gio-2.0.vapi index b3dc8277d..92df9f787 100644 --- a/vapi/gio-2.0.vapi +++ b/vapi/gio-2.0.vapi @@ -1773,6 +1773,8 @@ namespace GLib { public class MemoryOutputStream : GLib.OutputStream, GLib.PollableOutputStream, GLib.Seekable { [CCode (has_construct_function = false, type = "GOutputStream*")] public MemoryOutputStream ([CCode (array_length_type = "gsize")] owned uint8[]? data, GLib.ReallocFunc? realloc_function = GLib.g_realloc, GLib.DestroyNotify? destroy_function = GLib.g_free); + [CCode (cname = "g_memory_output_stream_new", has_construct_function = false, type = "GOutputStream*")] + public MemoryOutputStream.from_data (void* data, size_t size, GLib.ReallocFunc? realloc_function = null, GLib.DestroyNotify? destroy_function = null); [CCode (array_length = false)] public unowned uint8[] get_data (); [Version (since = "2.18")] @@ -1786,6 +1788,15 @@ namespace GLib { [CCode (array_length = false)] [Version (since = "2.26")] public uint8[] steal_data (); + [CCode (cname = "vala_g_memory_output_stream_with_data")] + public static GLib.MemoryOutputStream with_data ([CCode (array_length_type = "gsize")] uint8[] data) { + return new GLib.MemoryOutputStream.from_data (data, data.length, null, null); + } + [CCode (cname = "vala_g_memory_output_stream_with_owned_data")] + public static GLib.MemoryOutputStream with_owned_data ([CCode (array_length_type = "gsize")] owned uint8[] data) { + size_t size = data.length; + return new GLib.MemoryOutputStream.from_data ((owned) data, size, GLib.g_realloc, GLib.g_free); + } [Version (since = "2.24")] public void* data { get; construct; } [Version (since = "2.24")] diff --git a/vapi/metadata/Gio-2.0-custom.vala b/vapi/metadata/Gio-2.0-custom.vala index 9b3b83c5e..31dba848d 100644 --- a/vapi/metadata/Gio-2.0-custom.vala +++ b/vapi/metadata/Gio-2.0-custom.vala @@ -87,6 +87,17 @@ namespace GLib { public class MemoryOutputStream : GLib.OutputStream { [CCode (has_construct_function = false, type = "GOutputStream*")] public MemoryOutputStream ([CCode (array_length_type = "gsize")] owned uint8[]? data, GLib.ReallocFunc? realloc_function = GLib.g_realloc, GLib.DestroyNotify? destroy_function = GLib.g_free); + [CCode (cname = "g_memory_output_stream_new", has_construct_function = false, type = "GOutputStream*")] + public MemoryOutputStream.from_data (void* data, size_t size, GLib.ReallocFunc? realloc_function = null, GLib.DestroyNotify? destroy_function = null); + [CCode (cname = "vala_g_memory_output_stream_with_data")] + public static MemoryOutputStream with_data ([CCode (array_length_type = "gsize")] uint8[] data) { + return new MemoryOutputStream.from_data (data, data.length); + } + [CCode (cname = "vala_g_memory_output_stream_with_owned_data")] + public static MemoryOutputStream with_owned_data ([CCode (array_length_type = "gsize")] owned uint8[] data) { + size_t size = data.length; + return new MemoryOutputStream.from_data ((owned) data, size, GLib.g_realloc, GLib.g_free); + } } public abstract class NativeVolumeMonitor : GLib.VolumeMonitor { |