[epiphany] Add ephy_string_commandline_args_to_uris() to ephy string utilities



commit 82088320c652f34543c82b790adf82019320d5a4
Author: Claudio Saavedra <csaavedra igalia com>
Date:   Wed Jun 8 14:28:10 2011 +0300

    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

 lib/ephy-string.c |   71 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/ephy-string.h |    3 ++
 src/ephy-main.c   |   68 +++++++++-----------------------------------------
 3 files changed, 86 insertions(+), 56 deletions(-)
---
diff --git a/lib/ephy-string.c b/lib/ephy-string.c
index 0b07dc7..72aa582 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;
+}
diff --git a/lib/ephy-string.h b/lib/ephy-string.h
index d825a5b..1f5f986 100644
--- a/lib/ephy-string.h
+++ b/lib/ephy-string.h
@@ -58,6 +58,9 @@ char     *ephy_string_get_host_name (const char *url);
 
 char     *ephy_string_expand_initial_tilde (const char *path);
 
+char    **ephy_string_commandline_args_to_uris (char **arguments, GError **error);
+
+
 G_END_DECLS
 
 #endif
diff --git a/src/ephy-main.c b/src/ephy-main.c
index f59ab23..5e1a842 100644
--- a/src/ephy-main.c
+++ b/src/ephy-main.c
@@ -34,6 +34,7 @@
 #include "ephy-prefs.h"
 #include "ephy-profile-utils.h"
 #include "ephy-debug.h"
+#include "ephy-string.h"
 #include "eggsmclient.h"
 
 #include <libxml/xmlversion.h>
@@ -578,63 +579,18 @@ main (int argc,
 		exit (1);
 	}
 
-	/* Make URIs from arguments, to support filename args */
-	if (arguments != NULL)
-	{
-		guint i;
-
-		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)
-			{
-				g_free (arguments[i]);
-
-				/* 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);
-					arguments[i] = g_file_get_uri (file);
-					g_object_unref (file);
-					g_free (uri);
-				}
-				else
-				{
-					arguments[i] = uri;
-				}
-			}
-			else
-			{
-				g_print ("Could not convert '%s' to UTF-8: %s!\n",
-					 arguments[i], error->message);
-				g_error_free (error);
-				exit (1);
-			}
+	/* convert arguments to uris or at least to utf8 */
+	if (arguments != NULL) {
+		char **args = ephy_string_commandline_args_to_uris (arguments,
+								     &error);
+		if (error) {
+			g_print ("Could not convert to UTF-8: %s!\n",
+				 error->message);
+			g_error_free (error);
+			exit (1);
 		}
+		g_strfreev (arguments);
+		arguments = args;
 	}
 
 	/* Get a timestamp manually if need be */



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