From 604841c6c81608a7dfcfe05ab75fa0c7ede2a890 Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Sun, 21 Feb 2016 22:31:29 -0500 Subject: Implement symlink/readlink --- src/operations.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/operations.cc') diff --git a/src/operations.cc b/src/operations.cc index e4e76b3..b1c568a 100644 --- a/src/operations.cc +++ b/src/operations.cc @@ -168,6 +168,19 @@ int Unlink(const char* c_path) { } } +int Symlink(const char* const target, const char* const source) { + root_->SymLinkAt(target, EncodePath(source).c_str()); + return 0; +} + +int Readlink(const char* const path, char* const output, + const size_t output_size) { + const std::string target = root_->ReadLinkAt(EncodePath(path).c_str()); + std::strncpy(output, target.c_str(), output_size); + output[output_size - 1] = '\0'; + return 0; +} + int Mkdir(const char* const c_path, const mode_t mode) { const std::string path(c_path); if (path == "/") { @@ -264,6 +277,9 @@ fuse_operations FuseOperations(File* const root) { result.release = CATCH_AND_RETURN_EXCEPTIONS(Release); result.unlink = CATCH_AND_RETURN_EXCEPTIONS(Unlink); + result.symlink = CATCH_AND_RETURN_EXCEPTIONS(Symlink); + result.readlink = CATCH_AND_RETURN_EXCEPTIONS(Readlink); + result.mkdir = CATCH_AND_RETURN_EXCEPTIONS(Mkdir); result.opendir = CATCH_AND_RETURN_EXCEPTIONS(Opendir); result.readdir = CATCH_AND_RETURN_EXCEPTIONS(Readdir); -- cgit v1.2.3