int vacstat(VacFile *parent, VacDir *vd, uint8_t *p, int np) { int ret; Dir dir; memset(&dir, 0, sizeof(dir)); 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){ dir.qid.type |= QTAPPEND; dir.mode |= DMAPPEND; } if(vd->mode & ModeExclusive){ dir.qid.type |= QTEXCL; dir.mode |= DMEXCL; } if(vd->mode & ModeDir){ dir.qid.type |= QTDIR; dir.mode |= DMDIR; } dir.atime = vd->atime; dir.mtime = vd->mtime; dir.length = vd->size; dir.name = vd->elem; dir.uid = vd->uid; dir.gid = vd->gid; dir.muid = vd->mid; ret = convD2Mu(&dir, p, np, dotu); return ret; }
int vacstat(VacFile *parent, VacDir *vd, uchar *p, int np) { int ret; Dir dir; #ifdef PLAN9PORT int n; VacFile *vf; uvlong size; char *ext = nil; #endif memset(&dir, 0, sizeof(dir)); 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){ dir.qid.type |= QTAPPEND; dir.mode |= DMAPPEND; } if(vd->mode & ModeExclusive){ dir.qid.type |= QTEXCL; dir.mode |= DMEXCL; } if(vd->mode & ModeDir){ dir.qid.type |= QTDIR; dir.mode |= DMDIR; } #ifdef PLAN9PORT if(vd->mode & (ModeLink|ModeDevice|ModeNamedPipe)){ vf = vacfilewalk(parent, vd->elem); if(vf == nil) return 0; vacfilegetsize(vf, &size); ext = malloc(size+1); if(ext == nil) return 0; n = vacfileread(vf, ext, size, 0); USED(n); ext[size] = 0; vacfiledecref(vf); if(vd->mode & ModeLink){ dir.qid.type |= QTSYMLINK; dir.mode |= DMSYMLINK; } if(vd->mode & ModeDevice) dir.mode |= DMDEVICE; if(vd->mode & ModeNamedPipe) dir.mode |= DMNAMEDPIPE; } #endif dir.atime = vd->atime; dir.mtime = vd->mtime; dir.length = vd->size; dir.name = vd->elem; dir.uid = vd->uid; dir.gid = vd->gid; dir.muid = vd->mid; ret = convD2M(&dir, p, np); #ifdef PLAN9PORT free(ext); #endif return ret; }