URI: 
       t9pfuse: add symlink support - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit d07db89b00a55db3ca9c3577422cbd9be722dae6
   DIR parent 382ae73f24c4566b2948d72f65ff68dc35857556
  HTML Author: Russ Cox <rsc@swtch.com>
       Date:   Fri,  4 Jul 2008 02:52:01 -0400
       
       9pfuse: add symlink support
       
       Diffstat:
         M src/cmd/9pfuse/main.c               |      31 ++++++++++++++++++++++++++++++-
       
       1 file changed, 30 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/src/cmd/9pfuse/main.c b/src/cmd/9pfuse/main.c
       t@@ -320,6 +320,8 @@ dir2attr(Dir *d, struct fuse_attr *attr)
                attr->mode = d->mode&0777;
                if(d->mode&DMDIR)
                        attr->mode |= S_IFDIR;
       +        else if(d->mode&DMSYMLINK)
       +                attr->mode |= S_IFLNK;
                else
                        attr->mode |= S_IFREG;
                attr->nlink = 1;        /* works for directories! - see FUSE FAQ */
       t@@ -815,6 +817,32 @@ fuseread(FuseMsg *m)
                free(buf);
        }
        
       +/*
       + * Readlink.
       + */
       +void
       +fusereadlink(FuseMsg *m)
       +{
       +        Dir *d;
       +        CFid *fid;
       +
       +        if((fid = nodeid2fid(m->hdr->nodeid)) == nil){
       +                replyfuseerrno(m, ESTALE);
       +                return;
       +        }
       +        if((d = fsdirfstat(fid)) == nil){
       +                replyfuseerrstr(m);
       +                return;
       +        }
       +        if(!(d->mode&DMSYMLINK)){
       +                replyfuseerrno(m, EINVAL);
       +                return;
       +        }
       +        replyfuse(m, d->ext, strlen(d->ext));
       +        free(d);
       +        return;
       +}
       +
        /* 
         * Readdir.
         * Read from file handle in->fh at offset in->offset for size in->size.
       t@@ -1123,8 +1151,9 @@ struct {
                { FUSE_GETATTR,                fusegetattr },
                { FUSE_SETATTR,                fusesetattr },
                /*
       -         * FUSE_READLINK, FUSE_SYMLINK, FUSE_MKNOD are unimplemented.
       +         * FUSE_SYMLINK, FUSE_MKNOD are unimplemented.
                 */
       +        { FUSE_READLINK,        fusereadlink },
                { FUSE_MKDIR,                fusemkdir },
                { FUSE_UNLINK,                fuseunlink },
                { FUSE_RMDIR,                fusermdir },