URI: 
       tvacfs: present qids correctly - 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 fa3c8da1c01edc6559fa6ea71fdfb402cd9914b4
   DIR parent 4395d738f4f5a3a477e2a3a24b927e8a24ef4cc0
  HTML Author: Russ Cox <rsc@swtch.com>
       Date:   Sun, 15 Jun 2008 01:46:23 -0400
       
       vacfs: present qids correctly
       
       Diffstat:
         M src/cmd/vac/file.c                  |       8 ++++++++
         M src/cmd/vac/vac.c                   |       4 +++-
         M src/cmd/vac/vac.h                   |       1 +
         M src/cmd/vac/vacfs.c                 |       9 +++------
       
       4 files changed, 15 insertions(+), 7 deletions(-)
       ---
   DIR diff --git a/src/cmd/vac/file.c b/src/cmd/vac/file.c
       t@@ -142,9 +142,16 @@ uvlong
        vacfilegetid(VacFile *f)
        {
                /* immutable */
       +fprint(2, "getid %s %lld+%lld = %lld\n", f->dir.elem, f->qidoffset, f->dir.qid, f->qidoffset+f->dir.qid);
                return f->qidoffset + f->dir.qid;
        }
        
       +uvlong
       +vacfilegetqidoffset(VacFile *f)
       +{
       +        return f->qidoffset;
       +}
       +
        ulong
        vacfilegetmcount(VacFile *f)
        {
       t@@ -402,6 +409,7 @@ dirlookup(VacFile *f, char *elem)
                                        filefree(ff);
                                        goto Err;
                                }
       +fprint(2, "offset %s %lld\n", ff->dir.elem, ff->dir.qidoffset);
                                ff->qidoffset = f->qidoffset + ff->dir.qidoffset;
                                vtfileunlock(meta);
                                vtblockput(b);
   DIR diff --git a/src/cmd/vac/vac.c b/src/cmd/vac/vac.c
       t@@ -586,7 +586,9 @@ vacmergefile(VacFile *fp, VacFile *mp, VacDir *d, char *vacfile,
                        d->qidoffset = offset;
                        d->qidmax = max;
                }
       -        if(vacfilesetdir(f, d) < 0 || vacfilesetentries(f, &ed, &em) < 0){
       +        if(vacfilesetdir(f, d) < 0
       +        || vacfilesetentries(f, &ed, &em) < 0
       +        || vacfilesetqidspace(f, d->qidoffset, d->qidmax) < 0){
                        warn("vacmergefile %s: %r", d->elem);
                        vacfiledecref(mf);
                        vacfiledecref(f);
   DIR diff --git a/src/cmd/vac/vac.h b/src/cmd/vac/vac.h
       t@@ -135,6 +135,7 @@ int                vacfilesetentries(VacFile *f, VtEntry *e, VtEntry *me);
        void                vdcleanup(VacDir *dir);
        void                vdcopy(VacDir *dst, VacDir *src);
        int                vacfilesetqidspace(VacFile*, u64int, u64int);
       +uvlong        vacfilegetqidoffset(VacFile*);
        
        VacDirEnum        *vdeopen(VacFile*);
        int                        vderead(VacDirEnum*, VacDir *);
   DIR diff --git a/src/cmd/vac/vacfs.c b/src/cmd/vac/vacfs.c
       t@@ -637,14 +637,11 @@ vacstat(VacFile *parent, VacDir *vd, uchar *p, int np)
                char *ext = nil;
        #endif
        
       -        USED(parent);
       -
                memset(&dir, 0, sizeof(dir));
        
       -        /*
       -         * Where do path and version come from
       -         */
       -        dir.qid.path = vd->qid;
       +        dir.qid.path = vd->qid + vacfilegetqidoffset(parent);
       +        if(vd->qidspace)
       +                dir.qid.path += vd->qidoffset;
                dir.qid.vers = vd->mcount;
                dir.mode = vd->mode & 0777;
                if(vd->mode & ModeAppend){