mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-09-28 18:16:34 +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:
@@ -400,3 +400,25 @@ 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.
|
||||||
|
* It is invalid to use this function if @file is mapped writable,
|
||||||
|
* 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_if_fail (file != 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 ();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user