aboutsummaryrefslogtreecommitdiff
path: root/src/operations.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/operations.cc')
-rw-r--r--src/operations.cc16
1 files changed, 16 insertions, 0 deletions
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);