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:
Philip Withnall 2019-01-17 10:13:52 +00:00
commit c9f883b221
3 changed files with 65 additions and 1 deletions

View File

@ -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 ();

View File

@ -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
View File

@ -0,0 +1 @@
It is a beautiful day!