diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2013-11-17 14:27:24 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2013-11-17 15:07:09 +0000 |
commit | 4b3a7666dc4da373ccba2b4b2d7f610ab9368499 (patch) | |
tree | e3866f11dd6b5b68a2a623f861c7846325d9ce1e | |
parent | c933b0aff94ecd5335690e2836963db4d9e331f1 (diff) | |
download | netsurf-4b3a7666dc4da373ccba2b4b2d7f610ab9368499.tar.gz netsurf-4b3a7666dc4da373ccba2b4b2d7f610ab9368499.tar.bz2 |
Use realpath and stuff file:// on the front of file arguments in GTK frontend
-rw-r--r-- | gtk/gui.c | 24 |
1 files changed, 20 insertions, 4 deletions
@@ -353,7 +353,7 @@ static void gui_init(int argc, char** argv, char **respath) { char buf[PATH_MAX]; char *resource_filename; - const char *addr; + char *addr = NULL; nsurl *url; nserror error; @@ -457,11 +457,26 @@ static void gui_init(int argc, char** argv, char **respath) /* If there is a url specified on the command line use it */ if (argc > 1) { - addr = argv[1]; + struct stat fs; + if (stat(argv[1], &fs) == 0) { + char *rp = realpath(argv[1], NULL); + assert(rp != NULL); + addr = malloc(SLEN("file://") + strlen(rp) + /*\0 */ 1); + assert(addr != NULL); + /* These are safe thanks to the above sum */ + strcpy(addr, "file://"); + strcat(addr, rp); + free(rp); + } else { + addr = strdup(argv[1]); + } + } + if (addr != NULL) { + /* managed to set up based on local launch */ } else if (nsoption_charp(homepage_url) != NULL) { - addr = nsoption_charp(homepage_url); + addr = strdup(nsoption_charp(homepage_url)); } else { - addr = NETSURF_HOMEPAGE; + addr = strdup(NETSURF_HOMEPAGE); } /* create an initial browser window */ @@ -474,6 +489,7 @@ static void gui_init(int argc, char** argv, char **respath) NULL, NULL); nsurl_unref(url); + free(addr); } if (error != NSERROR_OK) { warn_user(messages_get_errorcode(error), 0); |