summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-03-20 07:43:19 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-03-20 07:43:19 -0400
commita2d657721094e31f1f17ae0bd406bbe36bbc9e98 (patch)
tree735c5d7312a737d6c11672ef88d0029b89c145c4
parentb2a667266bb285f73e4701be55c10633846ace56 (diff)
move path_expand() and search_path_expand() into libpbd, and use them to expand search paths given to pathscanner objects (always)
-rw-r--r--libs/ardour/ardour/session_configuration_vars.h6
-rw-r--r--libs/ardour/ardour/utils.h2
-rw-r--r--libs/ardour/session_configuration.cc3
-rw-r--r--libs/ardour/utils.cc106
-rw-r--r--libs/pbd/pathscanner.cc3
-rw-r--r--libs/pbd/pbd/basename.h13
-rw-r--r--libs/pbd/wscript1
7 files changed, 13 insertions, 121 deletions
diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h
index 1f8b2356d1..cce4bf86d7 100644
--- a/libs/ardour/ardour/session_configuration_vars.h
+++ b/libs/ardour/ardour/session_configuration_vars.h
@@ -38,9 +38,9 @@ CONFIG_VARIABLE (bool, punch_in, "punch-in", false)
CONFIG_VARIABLE (bool, punch_out, "punch-out", false)
CONFIG_VARIABLE (uint32_t, subframes_per_frame, "subframes-per-frame", 100)
CONFIG_VARIABLE (Timecode::TimecodeFormat, timecode_format, "timecode-format", Timecode::timecode_30)
-CONFIG_VARIABLE_SPECIAL(std::string, raid_path, "raid-path", "", path_expand)
-CONFIG_VARIABLE_SPECIAL(std::string, audio_search_path, "audio-search-path", "", search_path_expand)
-CONFIG_VARIABLE_SPECIAL(std::string, midi_search_path, "midi-search-path", "", search_path_expand)
+CONFIG_VARIABLE_SPECIAL(std::string, raid_path, "raid-path", "", PBD::path_expand)
+CONFIG_VARIABLE_SPECIAL(std::string, audio_search_path, "audio-search-path", "", PBD::search_path_expand)
+CONFIG_VARIABLE_SPECIAL(std::string, midi_search_path, "midi-search-path", "", PBD::search_path_expand)
CONFIG_VARIABLE (bool, jack_time_master, "jack-time-master", true)
CONFIG_VARIABLE (bool, use_video_sync, "use-video-sync", false)
CONFIG_VARIABLE (float, video_pullup, "video-pullup", 0.0f)
diff --git a/libs/ardour/ardour/utils.h b/libs/ardour/ardour/utils.h
index 7223d1f8ec..0aa4193394 100644
--- a/libs/ardour/ardour/utils.h
+++ b/libs/ardour/ardour/utils.h
@@ -60,8 +60,6 @@ int cmp_nocase (const std::string& s, const std::string& s2);
int touch_file(std::string path);
-std::string path_expand (std::string); /* single file path */
-std::string search_path_expand (std::string); /* colon-separated search path */
std::string region_name_from_path (std::string path, bool strip_channels, bool add_channel_suffix = false, uint32_t total = 0, uint32_t this_one = 0);
bool path_is_paired (std::string path, std::string& pair_base);
diff --git a/libs/ardour/session_configuration.cc b/libs/ardour/session_configuration.cc
index cfb6fb8668..0cfdb52872 100644
--- a/libs/ardour/session_configuration.cc
+++ b/libs/ardour/session_configuration.cc
@@ -17,8 +17,9 @@
*/
+#include "pbd/pathexpand.h"
+
#include "ardour/types.h"
-#include "ardour/utils.h"
#include "ardour/session_configuration.h"
#include "i18n.h"
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<string> s;
- vector<string> n;
-
- split (path, s, ':');
-
- for (vector<string>::iterator i = s.begin(); i != s.end(); ++i) {
- string exp = path_expand (*i);
- if (!exp.empty()) {
- n.push_back (exp);
- }
- }
-
- string r;
-
- for (vector<string>::iterator i = n.begin(); i != n.end(); ++i) {
- if (!r.empty()) {
- r += ':';
- }
- r += *i;
- }
-
- return r;
-}
-
#if __APPLE__
string
CFStringRefToStdString(CFStringRef stringRef)
diff --git a/libs/pbd/pathscanner.cc b/libs/pbd/pathscanner.cc
index 8f57726c7f..fac2dcfd96 100644
--- a/libs/pbd/pathscanner.cc
+++ b/libs/pbd/pathscanner.cc
@@ -29,6 +29,7 @@
#include <glibmm/miscutils.h>
#include "pbd/error.h"
+#include "pbd/pathexpand.h"
#include "pbd/pathscanner.h"
#include "pbd/stl_delete.h"
@@ -90,7 +91,7 @@ PathScanner::run_scan_internal (vector<string *> *result,
{
DIR *dir;
struct dirent *finfo;
- char *pathcopy = strdup (dirpath.c_str());
+ char *pathcopy = strdup (search_path_expand (dirpath).c_str());
char *thisdir;
string fullpath;
string search_str;
diff --git a/libs/pbd/pbd/basename.h b/libs/pbd/pbd/basename.h
index f13c3840dc..290af2e4bf 100644
--- a/libs/pbd/pbd/basename.h
+++ b/libs/pbd/pbd/basename.h
@@ -17,16 +17,13 @@
*/
-#ifndef __stupid_basename_h__
-#define __stupid_basename_h__
+#ifndef __libpbd_basename_h__
+#define __libdpbd_basename_h__
#include <glibmm/ustring.h>
-namespace PBD
-{
-
-Glib::ustring basename_nosuffix (Glib::ustring);
-
+namespace PBD {
+ Glib::ustring basename_nosuffix (Glib::ustring);
}
-#endif // __stupid_basename_h__
+#endif /* __libdpbd_basename_h__ */
diff --git a/libs/pbd/wscript b/libs/pbd/wscript
index eb88809f53..0ec2747cb3 100644
--- a/libs/pbd/wscript
+++ b/libs/pbd/wscript
@@ -86,6 +86,7 @@ def build(bld):
malign.cc
mountpoint.cc
openuri.cc
+ pathexpand.cc
pathscanner.cc
pool.cc
property_list.cc