diff --git a/src/fs.cpp b/src/fs.cpp index 879276b0..b209f0ed 100644 --- a/src/fs.cpp +++ b/src/fs.cpp @@ -29,6 +29,8 @@ #include #include +#include +#include #include #include #include @@ -510,4 +512,20 @@ namespace fs globfree(&gbuf); } + + void + realpathize(vector &strs) + { + char *rv; + char buf[PATH_MAX]; + + for(size_t i = 0; i < strs.size(); i++) + { + rv = ::realpath(strs[i].c_str(),buf); + if(rv == NULL) + continue; + + strs[i] = buf; + } + } }; diff --git a/src/fs.hpp b/src/fs.hpp index 6df000d2..b755a62f 100644 --- a/src/fs.hpp +++ b/src/fs.hpp @@ -122,6 +122,8 @@ namespace fs void glob(const vector &patterns, vector &strs); + + void realpathize(vector &strs); }; #endif // __FS_HPP__ diff --git a/src/option_parser.cpp b/src/option_parser.cpp index 632d3eba..b8fcf744 100644 --- a/src/option_parser.cpp +++ b/src/option_parser.cpp @@ -200,6 +200,8 @@ process_srcmounts(const char *arg, fs::glob(paths,config.srcmounts); + fs::realpathize(config.srcmounts); + return 0; } diff --git a/src/setxattr.cpp b/src/setxattr.cpp index 68d26cff..b82f1b66 100644 --- a/src/setxattr.cpp +++ b/src/setxattr.cpp @@ -59,6 +59,7 @@ _add_srcmounts(vector &srcmounts, str::split(patterns,values,':'); fs::glob(patterns,additions); + fs::realpathize(additions); if(!additions.empty()) { @@ -106,6 +107,7 @@ _replace_srcmounts(vector &srcmounts, str::split(patterns,values,':'); fs::glob(patterns,newmounts); + fs::realpathize(newmounts); { const rwlock::WriteGuard wrg(&srcmountslock);