Commit c9f883b2 authored by Philip Withnall's avatar Philip Withnall

Merge branch 'resource-overlay-info' into 'master'

gresource: Complete the overlay support

Closes #1445

See merge request GNOME/glib!497
parents 58f7a4d1 37eb1e66
Pipeline #51806 passed with stages
in 12 minutes and 13 seconds
...@@ -285,6 +285,27 @@ enumerate_overlay_dir (const gchar *candidate, ...@@ -285,6 +285,27 @@ enumerate_overlay_dir (const gchar *candidate,
return FALSE; 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 static gboolean
g_resource_find_overlay (const gchar *path, g_resource_find_overlay (const gchar *path,
CheckCandidate check, CheckCandidate check,
...@@ -1251,6 +1272,17 @@ g_resources_get_info (const gchar *path, ...@@ -1251,6 +1272,17 @@ g_resources_get_info (const gchar *path,
gboolean res = FALSE; gboolean res = FALSE;
GList *l; GList *l;
gboolean r_res; 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 (); register_lazy_static_resources ();
......
...@@ -679,7 +679,6 @@ test_uri_query_info (void) ...@@ -679,7 +679,6 @@ test_uri_query_info (void)
g_resources_register (resource); g_resources_register (resource);
file = g_file_new_for_uri ("resource://" "/a_prefix/test2-alias.txt"); file = g_file_new_for_uri ("resource://" "/a_prefix/test2-alias.txt");
info = g_file_query_info (file, "*", 0, NULL, &error); info = g_file_query_info (file, "*", 0, NULL, &error);
g_assert_no_error (error); g_assert_no_error (error);
...@@ -893,6 +892,37 @@ test_resource_64k (void) ...@@ -893,6 +892,37 @@ test_resource_64k (void)
g_bytes_unref (data); 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 int
main (int argc, main (int argc,
char *argv[]) char *argv[])
...@@ -919,6 +949,7 @@ main (int argc, ...@@ -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/query-info", test_uri_query_info);
g_test_add_func ("/resource/uri/file", test_uri_file); g_test_add_func ("/resource/uri/file", test_uri_file);
g_test_add_func ("/resource/64k", test_resource_64k); g_test_add_func ("/resource/64k", test_resource_64k);
g_test_add_func ("/resource/overlay", test_overlay);
return g_test_run(); return g_test_run();
} }
It is a beautiful day!
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment