From a2d657721094e31f1f17ae0bd406bbe36bbc9e98 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 20 Mar 2013 07:43:19 -0400 Subject: move path_expand() and search_path_expand() into libpbd, and use them to expand search paths given to pathscanner objects (always) --- libs/ardour/utils.cc | 106 --------------------------------------------------- 1 file changed, 106 deletions(-) (limited to 'libs/ardour/utils.cc') diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index ad0823ddaf..aedc78988f 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -307,112 +307,6 @@ path_is_paired (string path, string& pair_base) return false; } -string -path_expand (string path) -{ - if (path.empty()) { - return path; - } - - /* tilde expansion */ - - if (path[0] == '~') { - if (path.length() == 1) { - return Glib::get_home_dir(); - } - - if (path[1] == '/') { - path.replace (0, 1, Glib::get_home_dir()); - } else { - /* can't handle ~roger, so just leave it */ - } - } - - /* now do $VAR substitution, since wordexp isn't reliable */ - - regex_t compiled_pattern; - const int nmatches = 100; - regmatch_t matches[nmatches]; - - if (regcomp (&compiled_pattern, "\\$([a-zA-Z_][a-zA-Z0-9_]*|\\{[a-zA-Z_][a-zA-Z0-9_]*\\})", REG_EXTENDED)) { - cerr << "bad regcomp\n"; - return path; - } - - while (true) { - - if (regexec (&compiled_pattern, path.c_str(), nmatches, matches, 0)) { - break; - } - - /* matches[0] gives the entire match */ - - string match = path.substr (matches[0].rm_so, matches[0].rm_eo - matches[0].rm_so); - - /* try to get match from the environment */ - - if (match[1] == '{') { - /* ${FOO} form */ - match = match.substr (2, match.length() - 3); - } - - char* matched_value = getenv (match.c_str()); - - if (matched_value) { - path.replace (matches[0].rm_so, matches[0].rm_eo - matches[0].rm_so, matched_value); - } else { - path.replace (matches[0].rm_so, matches[0].rm_eo - matches[0].rm_so, string()); - } - - /* go back and do it again with whatever remains after the - * substitution - */ - } - - regfree (&compiled_pattern); - - /* canonicalize */ - - char buf[PATH_MAX+1]; - - if (realpath (path.c_str(), buf)) { - return buf; - } else { - return string(); - } -} - -string -search_path_expand (string path) -{ - if (path.empty()) { - return path; - } - - vector s; - vector n; - - split (path, s, ':'); - - for (vector::iterator i = s.begin(); i != s.end(); ++i) { - string exp = path_expand (*i); - if (!exp.empty()) { - n.push_back (exp); - } - } - - string r; - - for (vector::iterator i = n.begin(); i != n.end(); ++i) { - if (!r.empty()) { - r += ':'; - } - r += *i; - } - - return r; -} - #if __APPLE__ string CFStringRefToStdString(CFStringRef stringRef) -- cgit v1.2.3