]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-utils.c
Add --with-platform configure switch
[evince.git] / shell / ev-utils.c
index 13f14598a1832d37538f0c8eae0300e5e614d0f6..540836fde5c2902c0426d73234abc4752672ee2d 100644 (file)
@@ -400,3 +400,43 @@ get_gdk_pixbuf_format_by_extension (gchar *uri)
        return NULL;
 }
 
+#define XDIGIT(c) ((c) <= '9' ? (c) - '0' : ((c) & 0x4F) - 'A' + 10)
+#define HEXCHAR(s) ((XDIGIT (s[1]) << 4) + XDIGIT (s[2]))
+
+static char *
+uri_decoded_copy (const char *part, int length)
+{
+       unsigned char *s, *d;
+       char *decoded = g_strndup (part, length);
+
+       s = d = (unsigned char *)decoded;
+       do {
+               if (*s == '%') {
+                       if (!g_ascii_isxdigit (s[1]) ||
+                           !g_ascii_isxdigit (s[2])) {
+                               g_free (decoded);
+                               return NULL;
+                       }
+                       *d++ = HEXCHAR (s);
+                       s += 2;
+               } else
+                       *d++ = *s;
+       } while (*s++);
+
+       return decoded;
+}
+
+char* escape_uri_for_display (const char *uri)
+{
+       GFile *file;
+       char *disp;
+       char *filename;
+
+       file = g_file_new_for_uri (uri);
+       filename = g_file_get_parse_name (file);
+       disp = uri_decoded_copy (filename, strlen (filename));
+       g_free (filename);
+       g_object_unref (file);
+
+       return disp;
+}