mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-27 06:26:15 +01:00
GMemoryOutputStream: Add new _resizable() constructor usable from bindings
Really, the memory output stream API is too warped around the model where it's a fixed size buffer that you've already allocated. Even in C, I find myself always wanting to use it to just accumulate data into an arbitrary-sized buffer it allocates. Unfortunately, it's also not usable from bindings because it's not common to bind g_free() and g_realloc(), but if you just pass NULL, you get the default of a fixed size, which is useless as per above. I am going to use this from a gjs test case, and the GSubprocess test cases also will use it. https://bugzilla.gnome.org/show_bug.cgi?id=688931
This commit is contained in:
parent
7a5dd54f47
commit
ed5c17e11f
@ -863,6 +863,7 @@ GBufferedOutputStreamPrivate
|
|||||||
GReallocFunc
|
GReallocFunc
|
||||||
GMemoryOutputStream
|
GMemoryOutputStream
|
||||||
g_memory_output_stream_new
|
g_memory_output_stream_new
|
||||||
|
g_memory_output_stream_new_resizable
|
||||||
g_memory_output_stream_get_data
|
g_memory_output_stream_get_data
|
||||||
g_memory_output_stream_get_size
|
g_memory_output_stream_get_size
|
||||||
g_memory_output_stream_get_data_size
|
g_memory_output_stream_get_data_size
|
||||||
|
@ -573,6 +573,7 @@ g_memory_input_stream_add_bytes
|
|||||||
g_memory_input_stream_add_data
|
g_memory_input_stream_add_data
|
||||||
g_memory_output_stream_get_type
|
g_memory_output_stream_get_type
|
||||||
g_memory_output_stream_new
|
g_memory_output_stream_new
|
||||||
|
g_memory_output_stream_new_resizable
|
||||||
g_memory_output_stream_get_data
|
g_memory_output_stream_get_data
|
||||||
g_memory_output_stream_get_data_size
|
g_memory_output_stream_get_data_size
|
||||||
g_memory_output_stream_get_size
|
g_memory_output_stream_get_size
|
||||||
|
@ -381,6 +381,20 @@ g_memory_output_stream_new (gpointer data,
|
|||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_memory_output_stream_new_resizable:
|
||||||
|
*
|
||||||
|
* Creates a new #GMemoryOutputStream, using g_realloc() and g_free()
|
||||||
|
* for memory allocation.
|
||||||
|
*
|
||||||
|
* Since: 2.36
|
||||||
|
*/
|
||||||
|
GOutputStream *
|
||||||
|
g_memory_output_stream_new_resizable (void)
|
||||||
|
{
|
||||||
|
return g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* g_memory_output_stream_get_data:
|
* g_memory_output_stream_get_data:
|
||||||
* @ostream: a #GMemoryOutputStream
|
* @ostream: a #GMemoryOutputStream
|
||||||
|
@ -88,6 +88,8 @@ GOutputStream *g_memory_output_stream_new (gpointer data,
|
|||||||
gsize size,
|
gsize size,
|
||||||
GReallocFunc realloc_function,
|
GReallocFunc realloc_function,
|
||||||
GDestroyNotify destroy_function);
|
GDestroyNotify destroy_function);
|
||||||
|
GLIB_AVAILABLE_IN_2_36
|
||||||
|
GOutputStream *g_memory_output_stream_new_resizable (void);
|
||||||
gpointer g_memory_output_stream_get_data (GMemoryOutputStream *ostream);
|
gpointer g_memory_output_stream_get_data (GMemoryOutputStream *ostream);
|
||||||
gsize g_memory_output_stream_get_size (GMemoryOutputStream *ostream);
|
gsize g_memory_output_stream_get_size (GMemoryOutputStream *ostream);
|
||||||
gsize g_memory_output_stream_get_data_size (GMemoryOutputStream *ostream);
|
gsize g_memory_output_stream_get_data_size (GMemoryOutputStream *ostream);
|
||||||
|
@ -34,7 +34,7 @@ test_truncate (void)
|
|||||||
|
|
||||||
g_test_bug ("540423");
|
g_test_bug ("540423");
|
||||||
|
|
||||||
mo = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
|
mo = g_memory_output_stream_new_resizable ();
|
||||||
g_assert (g_seekable_can_truncate (G_SEEKABLE (mo)));
|
g_assert (g_seekable_can_truncate (G_SEEKABLE (mo)));
|
||||||
o = g_data_output_stream_new (mo);
|
o = g_data_output_stream_new (mo);
|
||||||
for (i = 0; i < 1000; i++)
|
for (i = 0; i < 1000; i++)
|
||||||
@ -86,7 +86,7 @@ test_data_size (void)
|
|||||||
|
|
||||||
g_test_bug ("540459");
|
g_test_bug ("540459");
|
||||||
|
|
||||||
mo = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
|
mo = g_memory_output_stream_new_resizable ();
|
||||||
o = g_data_output_stream_new (mo);
|
o = g_data_output_stream_new (mo);
|
||||||
g_data_output_stream_put_byte (o, 1, NULL, NULL);
|
g_data_output_stream_put_byte (o, 1, NULL, NULL);
|
||||||
pos = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (mo));
|
pos = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (mo));
|
||||||
|
Loading…
Reference in New Issue
Block a user