aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/System/Unix/Path.inc18
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc
index 400318b..ffa1d17 100644
--- a/lib/System/Unix/Path.inc
+++ b/lib/System/Unix/Path.inc
@@ -68,17 +68,18 @@ Path::Path(const std::string& unverified_path) : path(unverified_path) {
bool
Path::isValid() const {
+ // Check some obvious things
if (path.empty())
return false;
else if (path.length() >= MAXPATHLEN)
return false;
-#if defined(HAVE_REALPATH)
- char pathname[MAXPATHLEN];
- if (0 == realpath(path.c_str(), pathname))
- if (errno != EACCES && errno != EIO && errno != ENOENT && errno != ENOTDIR)
- return false;
-#endif
- return true;
+
+ // Check that the characters are ascii chars
+ size_t len = path.length();
+ unsigned i = 0;
+ while (i < len && isascii(path[i]))
+ ++i;
+ return i >= len;
}
Path
@@ -504,6 +505,7 @@ Path::appendSuffix(const std::string& suffix) {
bool
Path::eraseSuffix() {
+ std::string save = path;
size_t dotpos = path.rfind('.',path.size());
size_t slashpos = path.rfind('/',path.size());
if (dotpos != std::string::npos) {
@@ -512,6 +514,8 @@ Path::eraseSuffix() {
return true;
}
}
+ if (!isValid())
+ path = save;
return false;
}