summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2013-11-17 14:27:24 +0000
committerDaniel Silverstone <dsilvers@digital-scurf.org>2013-11-17 15:07:09 +0000
commit4b3a7666dc4da373ccba2b4b2d7f610ab9368499 (patch)
treee3866f11dd6b5b68a2a623f861c7846325d9ce1e
parentc933b0aff94ecd5335690e2836963db4d9e331f1 (diff)
downloadnetsurf-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.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/gtk/gui.c b/gtk/gui.c
index 45e32c895..8f1ca7420 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -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);