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.cpp26
1 files changed, 26 insertions, 0 deletions
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;
}