summaryrefslogtreecommitdiff
path: root/src/client/fuse_ll.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/fuse_ll.cc')
-rw-r--r--src/client/fuse_ll.cc12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/client/fuse_ll.cc b/src/client/fuse_ll.cc
index 97a11f187fe..57aca0585b1 100644
--- a/src/client/fuse_ll.cc
+++ b/src/client/fuse_ll.cc
@@ -258,13 +258,15 @@ static void fuse_ll_readlink(fuse_req_t req, fuse_ino_t ino)
CephFuse::Handle *cfuse = (CephFuse::Handle *)fuse_req_userdata(req);
const struct fuse_ctx *ctx = fuse_req_ctx(req);
Inode *in = cfuse->iget(ino);
- const char *value;
+ char buf[PATH_MAX + 1]; // leave room for a null terminator
- int r = cfuse->client->ll_readlink(in, &value, ctx->uid, ctx->gid);
- if (r == 0)
- fuse_reply_readlink(req, value);
- else
+ int r = cfuse->client->ll_readlink(in, buf, sizeof(buf) - 1, ctx->uid, ctx->gid);
+ if (r >= 0) {
+ buf[r] = '\0';
+ fuse_reply_readlink(req, buf);
+ } else {
fuse_reply_err(req, -r);
+ }
cfuse->iput(in); // iput required
}