mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-16 12:28:48 +02:00
GMappedFile: Add g_mapped_file_get_bytes()
This is yet another API that has a data/length/refcount combination that one might often want to turn into a GBytes. https://bugzilla.gnome.org/show_bug.cgi?id=677065
This commit is contained in:
parent
b0d8498ee3
commit
056d39c9f7
@ -1225,6 +1225,7 @@ g_mapped_file_unref
|
|||||||
g_mapped_file_free
|
g_mapped_file_free
|
||||||
g_mapped_file_get_length
|
g_mapped_file_get_length
|
||||||
g_mapped_file_get_contents
|
g_mapped_file_get_contents
|
||||||
|
g_mapped_file_get_bytes
|
||||||
|
|
||||||
<SUBSECTION>
|
<SUBSECTION>
|
||||||
g_open
|
g_open
|
||||||
|
@ -665,6 +665,7 @@ g_mapped_file_new
|
|||||||
g_mapped_file_new_from_fd
|
g_mapped_file_new_from_fd
|
||||||
g_mapped_file_get_length
|
g_mapped_file_get_length
|
||||||
g_mapped_file_get_contents
|
g_mapped_file_get_contents
|
||||||
|
g_mapped_file_get_bytes
|
||||||
g_mapped_file_ref
|
g_mapped_file_ref
|
||||||
g_mapped_file_unref
|
g_mapped_file_unref
|
||||||
g_mapped_file_free
|
g_mapped_file_free
|
||||||
|
@ -400,3 +400,27 @@ g_mapped_file_unref (GMappedFile *file)
|
|||||||
if (g_atomic_int_dec_and_test (&file->ref_count))
|
if (g_atomic_int_dec_and_test (&file->ref_count))
|
||||||
g_mapped_file_destroy (file);
|
g_mapped_file_destroy (file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_mapped_file_get_bytes:
|
||||||
|
* @file: a #GMappedFile
|
||||||
|
*
|
||||||
|
* Creates a new #GBytes which references the data mapped from @file.
|
||||||
|
* The mapped contents of the file must not be modified after creating this
|
||||||
|
* bytes object, because a #GBytes should be immutable.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): A newly allocated #GBytes referencing data
|
||||||
|
* from @file
|
||||||
|
*
|
||||||
|
* Since: 2.34
|
||||||
|
**/
|
||||||
|
GBytes *
|
||||||
|
g_mapped_file_get_bytes (GMappedFile *file)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (file != NULL, NULL);
|
||||||
|
|
||||||
|
return g_bytes_new_with_free_func (file->contents,
|
||||||
|
file->length,
|
||||||
|
(GDestroyNotify) g_mapped_file_unref,
|
||||||
|
g_mapped_file_ref (file));
|
||||||
|
}
|
||||||
|
@ -41,6 +41,8 @@ GMappedFile *g_mapped_file_new_from_fd (gint fd,
|
|||||||
GError **error) G_GNUC_MALLOC;
|
GError **error) G_GNUC_MALLOC;
|
||||||
gsize g_mapped_file_get_length (GMappedFile *file);
|
gsize g_mapped_file_get_length (GMappedFile *file);
|
||||||
gchar *g_mapped_file_get_contents (GMappedFile *file);
|
gchar *g_mapped_file_get_contents (GMappedFile *file);
|
||||||
|
GLIB_AVAILABLE_IN_2_34
|
||||||
|
GBytes * g_mapped_file_get_bytes (GMappedFile *file);
|
||||||
GMappedFile *g_mapped_file_ref (GMappedFile *file);
|
GMappedFile *g_mapped_file_ref (GMappedFile *file);
|
||||||
void g_mapped_file_unref (GMappedFile *file);
|
void g_mapped_file_unref (GMappedFile *file);
|
||||||
|
|
||||||
|
@ -147,6 +147,24 @@ test_writable_fd (void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_gbytes (void)
|
||||||
|
{
|
||||||
|
GMappedFile *file;
|
||||||
|
GBytes *bytes;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
file = g_mapped_file_new (SRCDIR "/empty", FALSE, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
bytes = g_mapped_file_get_bytes (file);
|
||||||
|
g_mapped_file_unref (file);
|
||||||
|
|
||||||
|
g_assert_cmpint (g_bytes_get_size (bytes), ==, 0);
|
||||||
|
g_bytes_unref (bytes);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -158,6 +176,7 @@ main (int argc, char *argv[])
|
|||||||
g_test_add_func ("/mappedfile/nonexisting", test_nonexisting);
|
g_test_add_func ("/mappedfile/nonexisting", test_nonexisting);
|
||||||
g_test_add_func ("/mappedfile/writable", test_writable);
|
g_test_add_func ("/mappedfile/writable", test_writable);
|
||||||
g_test_add_func ("/mappedfile/writable_fd", test_writable_fd);
|
g_test_add_func ("/mappedfile/writable_fd", test_writable_fd);
|
||||||
|
g_test_add_func ("/mappedfile/gbytes", test_gbytes);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user