commit 0d7fd01125a8a16807aa168172b2f514170b1dd3 from: rsc date: Sun Jul 23 03:08:51 2006 UTC better open mode commit - 05f50fe6bf2352ec4ec9c94d22414f0eceeeda72 commit + 0d7fd01125a8a16807aa168172b2f514170b1dd3 blob - cd045e94d8f2d79ef383aca8cc80af0648b584a8 blob + 148d7dfa6e9eb9cca29ed51f153076c5b46ca8d1 --- src/cmd/9pfuse/main.c +++ src/cmd/9pfuse/main.c @@ -13,8 +13,6 @@ * allocates two more procs, one for reading and one for * writing the 9P connection. Thus the many threads in the * request proc can do 9P interactions without blocking. - * - * TODO: graceful shutdown. */ #define _GNU_SOURCE 1 /* for O_DIRECTORY on Linux */ @@ -515,10 +513,8 @@ _fuseopenfid(uvlong nodeid, int isdir, int openmode, i newfid = fswalk(fid, nil); if(newfid == nil){ *err = errstr2errno(); - // fsclose(fid); return nil; } - // fsputfid(fid); if(fsfopen(newfid, openmode) < 0){ *err = errstr2errno(); @@ -544,12 +540,21 @@ _fuseopen(FuseMsg *m, int isdir) CFid *fid; int openmode, flags, err; - /* TODO: better job translating openmode - see lib9 open */ in = m->tx; flags = in->flags; openmode = flags&3; flags &= ~3; flags &= ~(O_DIRECTORY|O_NONBLOCK|O_LARGEFILE); + if(flags & O_TRUNC){ + openmode |= OTRUNC; + flags &= ~O_TRUNC; + } + /* + * Could translate but not standard 9P: + * O_DIRECT -> ODIRECT + * O_NONBLOCK -> ONONBLOCK + * O_APPEND -> OAPPEND + */ if(flags){ fprint(2, "unexpected open flags %#uo", (uint)in->flags); replyfuseerrno(m, EACCES);