src/simple.c
changeset 10 e74c23297b11
parent 9 fbd239431dbe
child 27 461be4cd34a3
equal deleted inserted replaced
9:fbd239431dbe 10:e74c23297b11
   108     return;
   108     return;
   109 
   109 
   110 error:
   110 error:
   111     if ((err = fuse_reply_err(req, err)))
   111     if ((err = fuse_reply_err(req, err)))
   112         EWARNING(err, "fuse_reply_err");
   112         EWARNING(err, "fuse_reply_err");
       
   113 }
       
   114 
       
   115 static void simple_readlink (fuse_req_t req, fuse_ino_t ino) {
       
   116     struct simple_fs *fs = fuse_req_userdata(req);
       
   117     const struct simple_node *node;
       
   118     int err;
       
   119 
       
   120     INFO("[simple.readlink %p] ino=%lu", fs, ino);
       
   121     
       
   122     // look up the node 
       
   123     if ((node = _simple_get_ino(fs, ino)) == NULL)
       
   124         EERROR(err = EINVAL, "bad inode");
       
   125 
       
   126     // check that it's a symlink
       
   127     if (node->mode_type != S_IFLNK)
       
   128         EERROR(err = EINVAL, "bad mode");
       
   129 
       
   130     // return the contents
       
   131     if ((err = fuse_reply_readlink(req, node->data)))
       
   132         EERROR(err, "fuse_reply_readlink");
       
   133 
       
   134     // suceccss
       
   135     return;
       
   136 
       
   137 error:
       
   138     if ((err = fuse_reply_err(req, err)))
       
   139         EWARNING(err, "fuse_reply_err");
       
   140 
   113 }
   141 }
   114 
   142 
   115 static void simple_readdir (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info *fi) {
   143 static void simple_readdir (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info *fi) {
   116     struct simple_fs *fs = fuse_req_userdata(req);
   144     struct simple_fs *fs = fuse_req_userdata(req);
   117     const struct simple_node *dir_node, *node;
   145     const struct simple_node *dir_node, *node;
   212 static struct fuse_lowlevel_ops simple_ops = {
   240 static struct fuse_lowlevel_ops simple_ops = {
   213     .lookup = simple_lookup,
   241     .lookup = simple_lookup,
   214 
   242 
   215     .getattr = simple_getattr,
   243     .getattr = simple_getattr,
   216 
   244 
       
   245     .readlink = simple_readlink,
       
   246 
   217     .readdir = simple_readdir,
   247     .readdir = simple_readdir,
   218 
   248 
   219     .read = simple_read,
   249     .read = simple_read,
   220 };
   250 };
   221 
   251