[librsvg: 1/2] Fix rsvg_handle_new_from_file() so that it will load URIs again



commit b5906eee12a0b7401be5878337f51e283f7afbb5
Author: Federico Mena Quintero <federico gnome org>
Date:   Tue Feb 6 15:41:18 2018 -0600

    Fix rsvg_handle_new_from_file() so that it will load URIs again
    
    It is documented to being able to do so.
    
    Add a test for this, too.

 rsvg-base-file-util.c | 10 +++++++++-
 tests/api.c           | 26 ++++++++++++++++++++++++++
 2 files changed, 35 insertions(+), 1 deletion(-)
---
diff --git a/rsvg-base-file-util.c b/rsvg-base-file-util.c
index c4be0d5..6b2aca1 100644
--- a/rsvg-base-file-util.c
+++ b/rsvg-base-file-util.c
@@ -88,10 +88,18 @@ rsvg_handle_new_from_file (const gchar * file_name, GError ** error)
     gsize data_len;
     RsvgHandle *handle = NULL;
     GFile *file;
+    char *scheme;
 
     rsvg_return_val_if_fail (file_name != NULL, NULL, error);
 
-    file = g_file_new_for_path (file_name);
+    scheme = g_uri_parse_scheme (file_name);
+    if (scheme) {
+        file = g_file_new_for_uri (file_name);
+        g_free (scheme);
+    } else {
+        file = g_file_new_for_path (file_name);
+    }
+
     base_uri = g_file_get_uri (file);
     if (!base_uri) {
         g_set_error (error,
diff --git a/tests/api.c b/tests/api.c
index 35ff499..34b4fae 100644
--- a/tests/api.c
+++ b/tests/api.c
@@ -256,6 +256,31 @@ handle_write_close_free (void)
     g_free (data);
 }
 
+static void
+handle_new_from_file (void)
+{
+    char *filename = get_test_filename ("dpi.svg");
+    char *uri = g_strconcat ("file://", filename, NULL);
+
+    RsvgHandle *handle;
+    GError *error = NULL;
+
+    /* rsvg_handle_new_from_file() can take both filenames and URIs */
+
+    handle = rsvg_handle_new_from_file (filename, &error);
+    g_assert (handle != NULL);
+    g_assert (error == NULL);
+    g_object_unref (handle);
+
+    handle = rsvg_handle_new_from_file (uri, &error);
+    g_assert (handle != NULL);
+    g_assert (error == NULL);
+    g_object_unref (handle);
+
+    g_free (filename);
+    g_free (uri);
+}
+
 static void
 handle_new_from_data (void)
 {
@@ -457,6 +482,7 @@ main (int argc, char **argv)
     g_test_add_func ("/api/error_quark", error_quark);
     g_test_add_func ("/api/auto_generated", auto_generated);
     g_test_add_func ("/api/handle_write_close_free", handle_write_close_free);
+    g_test_add_func ("/api/handle_new_from_file", handle_new_from_file);
     g_test_add_func ("/api/handle_new_from_data", handle_new_from_data);
     g_test_add_func ("/api/handle_new_from_gfile_sync", handle_new_from_gfile_sync);
     g_test_add_func ("/api/handle_new_from_stream_sync", handle_new_from_stream_sync);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]