From 371b89e155b76f4fa8466dec16f3bb8004802069 Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Sat, 28 Apr 2012 09:34:21 +0200 Subject: fix paths when working with command line (Bug #695120 , patch by Patrick Monnerat) (bzr r11299) --- src/extension/system.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/extension/system.cpp') diff --git a/src/extension/system.cpp b/src/extension/system.cpp index ebad0c050..cf78cd2b8 100644 --- a/src/extension/system.cpp +++ b/src/extension/system.cpp @@ -69,6 +69,26 @@ static Extension *build_from_reprdoc(Inkscape::XML::Document *doc, Implementatio SPDocument *open(Extension *key, gchar const *filename) { Input *imod = NULL; + int relpath; + gchar * curdir; + + // Convert to absolute pathname to tolerate chdir(). + relpath = *filename != '/'; +#ifdef WIN32 + relpath &= *filename != '\\' && !(isalpha(*filename) && filename[1] == ':'); +#endif + + if (relpath) { +#ifndef WIN32 + curdir = getcwd(NULL, 0); +#else + curdir = _getcwd(NULL, 0); +#endif + + filename = g_build_filename(curdir, filename, NULL); + free(curdir); + } + if (key == NULL) { gpointer parray[2]; parray[0] = (gpointer)filename; @@ -108,6 +128,9 @@ SPDocument *open(Extension *key, gchar const *filename) } if (!imod->prefs(filename)) { + if (relpath){ + free((void *) filename); + } return NULL; } @@ -129,6 +152,9 @@ SPDocument *open(Extension *key, gchar const *filename) imod->set_gui(true); } + if (relpath){ + free((void *) filename); + } return doc; } -- cgit v1.2.3