mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 15:36:14 +01:00
Merge branch 'resource-overlay-info' into 'master'
gresource: Complete the overlay support Closes #1445 See merge request GNOME/glib!497
This commit is contained in:
commit
c9f883b221
@ -285,6 +285,27 @@ enumerate_overlay_dir (const gchar *candidate,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
gsize size;
|
||||
guint32 flags;
|
||||
} InfoData;
|
||||
|
||||
static gboolean
|
||||
get_overlay_info (const gchar *candidate,
|
||||
gpointer user_data)
|
||||
{
|
||||
InfoData *info = user_data;
|
||||
GStatBuf buf;
|
||||
|
||||
if (g_stat (candidate, &buf) < 0)
|
||||
return FALSE;
|
||||
|
||||
info->size = buf.st_size;
|
||||
info->flags = G_RESOURCE_FLAGS_NONE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
g_resource_find_overlay (const gchar *path,
|
||||
CheckCandidate check,
|
||||
@ -1251,6 +1272,17 @@ g_resources_get_info (const gchar *path,
|
||||
gboolean res = FALSE;
|
||||
GList *l;
|
||||
gboolean r_res;
|
||||
InfoData info;
|
||||
|
||||
if (g_resource_find_overlay (path, get_overlay_info, &info))
|
||||
{
|
||||
if (size)
|
||||
*size = info.size;
|
||||
if (flags)
|
||||
*flags = info.flags;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
register_lazy_static_resources ();
|
||||
|
||||
|
@ -679,7 +679,6 @@ test_uri_query_info (void)
|
||||
g_resources_register (resource);
|
||||
|
||||
file = g_file_new_for_uri ("resource://" "/a_prefix/test2-alias.txt");
|
||||
|
||||
info = g_file_query_info (file, "*", 0, NULL, &error);
|
||||
g_assert_no_error (error);
|
||||
|
||||
@ -893,6 +892,37 @@ test_resource_64k (void)
|
||||
g_bytes_unref (data);
|
||||
}
|
||||
|
||||
/* Check that g_resources_get_info() respects G_RESOURCE_OVERLAYS */
|
||||
static void
|
||||
test_overlay (void)
|
||||
{
|
||||
if (g_test_subprocess ())
|
||||
{
|
||||
GError *error = NULL;
|
||||
gboolean res;
|
||||
gsize size;
|
||||
char *overlay;
|
||||
char *path;
|
||||
|
||||
path = g_test_build_filename (G_TEST_DIST, "test1.overlay", NULL);
|
||||
overlay = g_strconcat ("/auto_loaded/test1.txt=", path, NULL);
|
||||
|
||||
g_setenv ("G_RESOURCE_OVERLAYS", overlay, TRUE);
|
||||
res = g_resources_get_info ("/auto_loaded/test1.txt", 0, &size, NULL, &error);
|
||||
g_assert_true (res);
|
||||
g_assert_no_error (error);
|
||||
/* test1.txt is 6 bytes, test1.overlay is 23 */
|
||||
g_assert_cmpint (size, ==, 23);
|
||||
|
||||
g_free (overlay);
|
||||
g_free (path);
|
||||
|
||||
return;
|
||||
}
|
||||
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_INHERIT_STDERR);
|
||||
g_test_trap_assert_passed ();
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc,
|
||||
char *argv[])
|
||||
@ -919,6 +949,7 @@ main (int argc,
|
||||
g_test_add_func ("/resource/uri/query-info", test_uri_query_info);
|
||||
g_test_add_func ("/resource/uri/file", test_uri_file);
|
||||
g_test_add_func ("/resource/64k", test_resource_64k);
|
||||
g_test_add_func ("/resource/overlay", test_overlay);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
|
1
gio/tests/test1.overlay
Normal file
1
gio/tests/test1.overlay
Normal file
@ -0,0 +1 @@
|
||||
It is a beautiful day!
|
Loading…
Reference in New Issue
Block a user