From ec9b3674dff8583bcca89bd13179a795bc537c25 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 10 Nov 2011 21:02:14 +0000 Subject: next attempt to fix the use of wordexp(3) ... git-svn-id: svn://localhost/ardour2/branches/3.0@10532 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/utils.cc | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'libs/ardour/utils.cc') diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index c1192c4fe1..3c6963bbc1 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -51,6 +51,7 @@ #include "pbd/xml++.h" #include "pbd/basename.h" #include "pbd/strsplit.h" +#include "pbd/replace_all.h" #include "ardour/utils.h" #include "ardour/rc_configuration.h" @@ -284,23 +285,24 @@ path_expand (string path) #ifdef HAVE_WORDEXP /* Handle tilde and environment variable expansion in session path */ string ret = path; - + string quoted; wordexp_t expansion; - - /* force field expansion to avoid use whitespace, since we know this is - * a path - */ - char *oifs = getenv ("IFS"); - setenv ("IFS", "/", 1); - int result = wordexp (path.c_str(), &expansion, WRDE_NOCMD|WRDE_UNDEF); - if (oifs) { - setenv ("IFS", oifs, 1); - } else { - unsetenv ("IFS"); - } + /* wordexp cannot be forced (it appears) into either + + (1) NOT doing field splitting + (2) splitting based on something other than whitespace + + (despite the documentation claiming that it obeys IFS etc). + + so, quote the most likely spaces to occur in a path, and that should + be about as much as we can do. + */ + + quoted = path; + replace_all (quoted, " ", "\\ "); - switch (result) { + switch (wordexp (quoted.c_str(), &expansion, WRDE_NOCMD|WRDE_UNDEF)) { case 0: break; case WRDE_NOSPACE: -- cgit v1.2.3