Merge pull request #39 from trapexit/truncate_mount_list

remove longest common prefix from fsname. closes #38
This commit is contained in:
Antonio SJ Musumeci 2015-01-22 16:33:34 -05:00
commit 233c216e66
3 changed files with 74 additions and 3 deletions

View File

@ -133,7 +133,9 @@ set_fsname(struct fuse_args &args,
{
std::string fsname;
fsname = "-ofsname=" + str::join(config.srcmounts,':');
fsname =
"-ofsname=" +
str::remove_common_prefix_and_join(config.srcmounts,':');
fuse_opt_insert_arg(&args,1,fsname.c_str());
}

View File

@ -46,15 +46,69 @@ namespace str
string
join(const vector<string> &vec,
const size_t substridx,
const char sep)
{
if(vec.empty())
return string();
string rv = vec[0];
string rv = vec[0].substr(substridx);
for(size_t i = 1; i < vec.size(); i++)
rv += sep + vec[i];
rv += sep + vec[i].substr(substridx);
return rv;
}
string
join(const vector<string> &vec,
const char sep)
{
return str::join(vec,0,sep);
}
size_t
longest_common_prefix_index(const vector<string> &vec)
{
if(vec.empty())
return string::npos;
for(size_t n = 0; n < vec[0].size(); n++)
{
char chr = vec[0][n];
for(size_t i = 1; i < vec.size(); i++)
{
if(n >= vec[i].size())
return n;
if(vec[i][n] != chr)
return n;
}
}
return string::npos;
}
string
longest_common_prefix(const vector<string> &vec)
{
size_t idx;
idx = longest_common_prefix_index(vec);
if(idx != string::npos)
return vec[0].substr(0,idx);
return string();
}
string
remove_common_prefix_and_join(const vector<string> &vec,
const char sep)
{
size_t idx;
idx = str::longest_common_prefix_index(vec);
if(idx == string::npos)
idx = 0;
return str::join(vec,idx,sep);
}
}

View File

@ -34,5 +34,20 @@ namespace str
std::string
join(const std::vector<std::string> &vec,
const size_t substridx,
const char sep);
std::string
join(const std::vector<std::string> &vec,
const char sep);
size_t
longest_common_prefix_index(const std::vector<std::string> &vec);
std::string
longest_common_prefix(const std::vector<std::string> &vec);
std::string
remove_common_prefix_and_join(const std::vector<std::string> &vec,
const char sep);
}