summaryrefslogtreecommitdiffstats
path: root/src/extension/system.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/extension/system.cpp')
-rw-r--r--src/extension/system.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/extension/system.cpp b/src/extension/system.cpp
index ebad0c050..476499385 100644
--- a/src/extension/system.cpp
+++ b/src/extension/system.cpp
@@ -68,7 +68,26 @@ static Extension *build_from_reprdoc(Inkscape::XML::Document *doc, Implementatio
*/
SPDocument *open(Extension *key, gchar const *filename)
{
+ // Convert to absolute pathname to tolerate chdir().
+ bool relpath = (filename[0] != '/');
+#ifdef WIN32
+ relpath &= (filename[0] != '\\') && !(isalpha(filename[0]) && (filename[1] == ':'));
+#endif
+
+ if (relpath) {
+ gchar * curdir = NULL;
+#ifndef WIN32
+ curdir = getcwd(NULL, 0);
+#else
+ curdir = _getcwd(NULL, 0);
+#endif
+
+ filename = g_build_filename(curdir, filename, NULL);
+ free(curdir);
+ }
+
Input *imod = NULL;
+
if (key == NULL) {
gpointer parray[2];
parray[0] = (gpointer)filename;
@@ -108,6 +127,9 @@ SPDocument *open(Extension *key, gchar const *filename)
}
if (!imod->prefs(filename)) {
+ if (relpath){
+ free((void *) filename);
+ }
return NULL;
}
@@ -129,6 +151,9 @@ SPDocument *open(Extension *key, gchar const *filename)
imod->set_gui(true);
}
+ if (relpath){
+ free((void *) filename);
+ }
return doc;
}