about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--xxxterm.c21
1 files changed, 8 insertions, 13 deletions
diff --git a/xxxterm.c b/xxxterm.c
index 127cb29..423bba3 100644
--- a/xxxterm.c
+++ b/xxxterm.c
@@ -1616,27 +1616,20 @@ guess_url_type(char *url_in)
 {
 	struct stat		sb;
 	char			*url_out = NULL, *enc_search = NULL;
+	SoupURI			*uri = NULL;
 
 	url_out = match_alias(url_in);
 	if (url_out != NULL)
 		return (url_out);
 
 	if (guess_search) {
-		/*
-		 * If there is no dot nor slash in the string and it isn't a
-		 * path to a local file and doesn't resolves to an IP, assume
-		 * that the user wants to search for the string.
-		 */
-
-		if (strchr(url_in, '.') == NULL &&
-		    strchr(url_in, '/') == NULL &&
-		    stat(url_in, &sb) != 0 &&
-		    gethostbyname(url_in) == NULL) {
-
+		uri = soup_uri_new(url_in);
+		if (uri == NULL || !SOUP_URI_VALID_FOR_HTTP(uri)) {
+			/* invalid URI so search instead */
 			enc_search = soup_uri_encode(url_in, XT_RESERVED_CHARS);
 			url_out = g_strdup_printf(search_string, enc_search);
 			g_free(enc_search);
-			return (url_out);
+			goto done;
 		}
 	}
 
@@ -1645,8 +1638,10 @@ guess_url_type(char *url_in)
 		url_out = g_strdup_printf("file://%s", url_in);
 	else
 		url_out = g_strdup_printf("http://%s", url_in); /* guess http */
-
+done:
 	DNPRINTF(XT_D_URL, "guess_url_type: guessed %s\n", url_out);
+	if (uri)
+		soup_uri_free(uri);
 
 	return (url_out);
 }