mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-09 15:15:41 +01:00
move path_expand() and search_path_expand() into libpbd, and use them to expand search paths given to pathscanner objects (always)
This commit is contained in:
parent
b2a667266b
commit
a2d6577210
7 changed files with 13 additions and 121 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,9 @@
|
|||
|
||||
*/
|
||||
|
||||
#include "pbd/pathexpand.h"
|
||||
|
||||
#include "ardour/types.h"
|
||||
#include "ardour/utils.h"
|
||||
#include "ardour/session_configuration.h"
|
||||
#include "i18n.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ def build(bld):
|
|||
malign.cc
|
||||
mountpoint.cc
|
||||
openuri.cc
|
||||
pathexpand.cc
|
||||
pathscanner.cc
|
||||
pool.cc
|
||||
property_list.cc
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue