diff options
Diffstat (limited to 'backends/fs/chroot/chroot-fs.cpp')
-rw-r--r-- | backends/fs/chroot/chroot-fs.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/backends/fs/chroot/chroot-fs.cpp b/backends/fs/chroot/chroot-fs.cpp index 7cdd800dac..1c3e3b545f 100644 --- a/backends/fs/chroot/chroot-fs.cpp +++ b/backends/fs/chroot/chroot-fs.cpp @@ -39,7 +39,7 @@ ChRootFilesystemNode::ChRootFilesystemNode(const Common::String &root, POSIXFile ChRootFilesystemNode::ChRootFilesystemNode(const Common::String &root, const Common::String &path) { _root = Common::normalizePath(root, '/'); - _realNode = new POSIXFilesystemNode(root.stringByAppendingPathComponent(path)); + _realNode = new POSIXFilesystemNode(addPathComponent(root, path)); } ChRootFilesystemNode::~ChRootFilesystemNode() { @@ -108,4 +108,17 @@ Common::WriteStream *ChRootFilesystemNode::createWriteStream() { return _realNode->createWriteStream(); } +Common::String ChRootFilesystemNode::addPathComponent(const Common::String &path, const Common::String &component) { + const char sep = '/'; + if (path.lastChar() == sep && component.firstChar() == sep) { + return Common::String::format("%s%s", path.c_str(), component.c_str() + 1); + } + + if (path.lastChar() == sep || component.firstChar() == sep) { + return Common::String::format("%s%s", path.c_str(), component.c_str()); + } + + return Common::String::format("%s%c%s", path.c_str(), sep, component.c_str()); +} + #endif |