aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ephy-string.c
diff options
context:
space:
mode:
authorClaudio Saavedra <csaavedra@igalia.com>2011-06-08 19:28:10 +0800
committerClaudio Saavedra <csaavedra@igalia.com>2011-06-09 00:24:01 +0800
commit82088320c652f34543c82b790adf82019320d5a4 (patch)
tree92bc124c04be56d4c6733f7ef52b8b978fa3da59 /lib/ephy-string.c
parent99193c87cd59cf1d913c7b9840148956d619c91c (diff)
downloadgsoc2013-epiphany-82088320c652f34543c82b790adf82019320d5a4.tar
gsoc2013-epiphany-82088320c652f34543c82b790adf82019320d5a4.tar.gz
gsoc2013-epiphany-82088320c652f34543c82b790adf82019320d5a4.tar.bz2
gsoc2013-epiphany-82088320c652f34543c82b790adf82019320d5a4.tar.lz
gsoc2013-epiphany-82088320c652f34543c82b790adf82019320d5a4.tar.xz
gsoc2013-epiphany-82088320c652f34543c82b790adf82019320d5a4.tar.zst
gsoc2013-epiphany-82088320c652f34543c82b790adf82019320d5a4.zip
Add ephy_string_commandline_args_to_uris() to ephy string utilities
This is the first patch in an attempt to simplify epiphany's main() method, which is quite bulky by now. https://bugzilla.gnome.org/show_bug.cgi?id=652119
Diffstat (limited to 'lib/ephy-string.c')
-rw-r--r--lib/ephy-string.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/ephy-string.c b/lib/ephy-string.c
index 0b07dc794..72aa582be 100644
--- a/lib/ephy-string.c
+++ b/lib/ephy-string.c
@@ -497,3 +497,74 @@ ephy_string_expand_initial_tilde (const char *path)
slash_after_user_name,
NULL);
}
+
+/**
+ * ephy_string_commandline_args_to_uris:
+ * @arguments: a %NULL-terminated array of chars.
+ *
+ * Transform commandline arguments to URIs if they exist,
+ * otherwise simply transform them to UTF-8.
+ *
+ * Returns: a newly allocated array with the URIs and
+ * UTF-8 strings.
+ **/
+char **
+ephy_string_commandline_args_to_uris (char **arguments, GError **error)
+{
+ gchar **args;
+ guint i;
+
+ if (arguments == NULL)
+ return NULL;
+
+ args = g_malloc0 (sizeof (gchar *) * (g_strv_length (arguments) + 1));
+
+ for (i = 0; arguments[i] != NULL; ++i)
+ {
+ char *uri, *path;
+#ifdef PATH_MAX
+ char rpath[PATH_MAX];
+#else
+ char *rpath = NULL;
+#endif
+
+ path = realpath (arguments[i], rpath);
+ if (path != NULL)
+ {
+ uri = g_locale_to_utf8 (path, -1,
+ NULL, NULL, error);
+#ifndef PATH_MAX
+ free (path);
+#endif
+ }
+ else
+ {
+ uri = g_locale_to_utf8 (arguments[i], -1,
+ NULL, NULL, error);
+ }
+
+ if (uri != NULL)
+ {
+ /* If it's a file, use g_file_new_for_commandline_arg,
+ * so we get the right escaping.
+ */
+ if (path != NULL)
+ {
+ GFile *file;
+ file = g_file_new_for_commandline_arg (uri);
+ args[i] = g_file_get_uri (file);
+ g_object_unref (file);
+ g_free (uri);
+ }
+ else
+ {
+ args[i] = uri;
+ }
+ } else {
+ g_strfreev (args);
+ return NULL;
+ }
+ }
+
+ return args;
+}