diff options
| author | Kris De Gussem <kris.degussem@gmail.com> | 2012-04-28 07:34:21 +0000 |
|---|---|---|
| committer | Kris <Kris.De.Gussem@hotmail.com> | 2012-04-28 07:34:21 +0000 |
| commit | 371b89e155b76f4fa8466dec16f3bb8004802069 (patch) | |
| tree | 92ca03caedea09998b644ae1be64248019cf2a21 /src/extension/system.cpp | |
| parent | Dutch translation update (diff) | |
| download | inkscape-371b89e155b76f4fa8466dec16f3bb8004802069.tar.gz inkscape-371b89e155b76f4fa8466dec16f3bb8004802069.zip | |
fix paths when working with command line (Bug #695120 , patch by Patrick Monnerat)
(bzr r11299)
Diffstat (limited to 'src/extension/system.cpp')
| -rw-r--r-- | src/extension/system.cpp | 26 |
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; } |
