Windows: fix path splitting for the XP field
This commit is contained in:
parent
ba21b2f27e
commit
539ee97da7
3 changed files with 30 additions and 1 deletions
|
@ -1307,7 +1307,7 @@ bool Db::addOrUpdate(const string &udi, const string &parent_udi, Doc &doc)
|
||||||
|
|
||||||
// Split and index the path from the url for path-based filtering
|
// Split and index the path from the url for path-based filtering
|
||||||
{
|
{
|
||||||
string path = url_gpath(doc.url);
|
string path = url_gpathS(doc.url);
|
||||||
vector<string> vpath;
|
vector<string> vpath;
|
||||||
stringToTokens(path, vpath, "/");
|
stringToTokens(path, vpath, "/");
|
||||||
// If vpath is not /, the last elt is the file/dir name, not a
|
// If vpath is not /, the last elt is the file/dir name, not a
|
||||||
|
|
|
@ -805,6 +805,29 @@ string url_gpath(const string& url)
|
||||||
return path_canon(url.substr(colon+1));
|
return path_canon(url.substr(colon+1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string url_gpathS(const string& url)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
string u = url_gpath(url);
|
||||||
|
string nu;
|
||||||
|
if (path_hasdrive(u)) {
|
||||||
|
nu.append(1, '/');
|
||||||
|
nu.append(1, u[0]);
|
||||||
|
if (path_isdriveabs(u)) {
|
||||||
|
nu.append(u.substr(2));
|
||||||
|
} else {
|
||||||
|
// This should be an error really
|
||||||
|
nu.append(1, '/');
|
||||||
|
nu.append(u.substr(2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nu;
|
||||||
|
#else
|
||||||
|
return url_gpath(url);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
string url_parentfolder(const string& url)
|
string url_parentfolder(const string& url)
|
||||||
{
|
{
|
||||||
// In general, the parent is the directory above the full path
|
// In general, the parent is the directory above the full path
|
||||||
|
|
|
@ -67,6 +67,12 @@ extern std::string url_parentfolder(const std::string& url);
|
||||||
/// routine, it does the right thing only in the recoll context
|
/// routine, it does the right thing only in the recoll context
|
||||||
extern std::string url_gpath(const std::string& url);
|
extern std::string url_gpath(const std::string& url);
|
||||||
|
|
||||||
|
/// Same but, in the case of a Windows local path, also turn "c:/" into
|
||||||
|
/// "/c/" This should be used only for splitting the path in rcldb, it
|
||||||
|
/// would better be local in there, but I prefer to keep all the
|
||||||
|
/// system-specific path stuff in pathut
|
||||||
|
extern std::string url_gpathS(const std::string& url);
|
||||||
|
|
||||||
/// Stat parameter and check if it's a directory
|
/// Stat parameter and check if it's a directory
|
||||||
extern bool path_isdir(const std::string& path);
|
extern bool path_isdir(const std::string& path);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue