# HG changeset patch # User Josef 'Jeff' Sipek # Date 1586808648 14400 # Node ID 547f3f8961dce80d7e0449b4f10d91915b688a72 # Parent f1876d613da09f5b910c38f2ca7cd25f56b518d4 common: add fscall_link / fscall_symlink Signed-off-by: Josef 'Jeff' Sipek diff -r f1876d613da0 -r 547f3f8961dc src/common/fscall.c --- a/src/common/fscall.c Mon Apr 13 15:46:40 2020 -0400 +++ b/src/common/fscall.c Mon Apr 13 16:10:48 2020 -0400 @@ -298,6 +298,54 @@ return 0; } +int fscall_symlink(struct fscall_state *state, const uint32_t parent_handle, + const char *name, const char *target) +{ + struct rpc_link_req link_req; + int ret; + + link_req.parent = parent_handle; + link_req.name = (char *) name; + link_req.target_name = (char *) target; + link_req.target_handle = 0; + link_req.symlink = true; + + ret = __fscall(state->sock, NRPC_LINK, + (void *) xdr_rpc_link_req, + NULL, + &link_req, + NULL, + 0); + if (ret) + return ret; + + return 0; +} + +int fscall_link(struct fscall_state *state, const uint32_t parent_handle, + const char *name, const uint32_t target_handle) +{ + struct rpc_link_req link_req; + int ret; + + link_req.parent = parent_handle; + link_req.name = (char *) name; + link_req.target_name = NULL; + link_req.target_handle = target_handle; + link_req.symlink = false; + + ret = __fscall(state->sock, NRPC_LINK, + (void *) xdr_rpc_link_req, + NULL, + &link_req, + NULL, + 0); + if (ret) + return ret; + + return 0; +} + int fscall_unlink(struct fscall_state *state, const uint32_t parent_handle, const char *name, const struct noid *desired) diff -r f1876d613da0 -r 547f3f8961dc src/common/include/nomad/fscall.h --- a/src/common/include/nomad/fscall.h Mon Apr 13 15:46:40 2020 -0400 +++ b/src/common/include/nomad/fscall.h Mon Apr 13 16:10:48 2020 -0400 @@ -61,6 +61,10 @@ const char *name, const uint32_t owner, const uint32_t group, uint16_t mode, uint64_t dev, struct noid *child); +extern int fscall_symlink(struct fscall_state *state, const uint32_t parent_handle, + const char *name, const char *target); +extern int fscall_link(struct fscall_state *state, const uint32_t parent_handle, + const char *name, const uint32_t target_handle); extern int fscall_unlink(struct fscall_state *state, const uint32_t parent_handle, const char *name, const struct noid *desired); extern int fscall_read(struct fscall_state *state, const uint32_t handle,