Browse Source

lib9p builds

Signed-off-by: Keith Poole <keith.poole@gmail.com>
Keith Poole 8 years ago
parent
commit
f001c8a491

+ 3 - 3
sys/include/9p.h

@@ -120,13 +120,13 @@ void		dirread9p(Req*, Dirgen*, void*);
  * File trees.
  */
 struct File {
-	Ref;
-	Dir;
+	Ref Ref;
+	Dir Dir;
 	File *parent;
 	void *aux;
 
 /* below is implementation-specific; don't use */
-	RWLock;
+	RWLock RWLock;
 	Filelist *filelist;
 	Tree *tree;
 	int nchild;

+ 10 - 10
sys/src/cmd/archfs.c

@@ -120,15 +120,15 @@ createpath(File *f, char *name, char *u, uint32_t m)
 
 	if(verbose)
 		fprint(2, "createpath %s\n", name);
-	incref(f);
+	incref(&f->Ref);
 	while(f && (p = strchr(name, '/'))) {
 		*p = '\0';
 		if(strcmp(name, "") != 0 && strcmp(name, ".") != 0){
 			/* this would be a race if we were multithreaded */
-			incref(f);	/* so walk doesn't kill it immediately on failure */
+			incref(&f->Ref);	/* so walk doesn't kill it immediately on failure */
 			if((nf = walkfile(f, name)) == nil)
 				nf = createfile(f, name, u, DMDIR|0777, nil);
-			decref(f);
+			decref(&f->Ref);
 			f = nf;
 		}
 		*p = '/';
@@ -137,10 +137,10 @@ createpath(File *f, char *name, char *u, uint32_t m)
 	if(f == nil)
 		return nil;
 
-	incref(f);
+	incref(&f->Ref);
 	if((nf = walkfile(f, name)) == nil)
 		nf = createfile(f, name, u, m, nil);
-	decref(f);
+	decref(&f->Ref);
 	return nf;
 }
 
@@ -151,12 +151,12 @@ archcreatefile(char *name, Arch *arch, Dir *d)
 	f = createpath(archtree->root, name, d->uid, d->mode);
 	if(f == nil)
 		sysfatal("creating %s: %r", name);
-	free(f->gid);
-	f->gid = estrdup9p(d->gid);
+	free(f->Dir.gid);
+	f->Dir.gid = estrdup9p(d->gid);
 	f->aux = arch;
-	f->mtime = d->mtime;
-	f->length = d->length;
-	decref(f);
+	f->Dir.mtime = d->mtime;
+	f->Dir.length = d->length;
+	decref(&f->Ref);
 }
 
 static void

+ 1 - 1
sys/src/cmd/aux/olefs.c

@@ -463,7 +463,7 @@ filldir(File *t, Ofile *f, int dnum, int nrecur)
 		if(nt == nil)
 			sysfatal("nt nil: create %s: %r", buf);
 		nt->aux = copydir(&d);
-		nt->length = d.size;
+		nt->Dir.length = d.size;
 	} else /* make directory */
 		nt = createfile(t, buf, nil, DMDIR|0777, nil);
 

+ 56 - 56
sys/src/lib9p/file.c

@@ -72,12 +72,12 @@ freefile(File *f)
 		free(fl);
 	}
 
-	free(f->name);
-	free(f->uid);
-	free(f->gid);
-	free(f->muid);
+	free(f->Dir.name);
+	free(f->Dir.uid);
+	free(f->Dir.gid);
+	free(f->Dir.muid);
 	qlock(&filelk);
-	assert(f->ref == 0);
+	assert(f->Ref.ref == 0);
 	f->aux = freefilelist;
 	freefilelist = f;
 	qunlock(&filelk);
@@ -119,7 +119,7 @@ cleanfilelist(File *f)
 void
 closefile(File *f)
 {
-	if(decref(f) == 0){
+	if(decref(&f->Ref) == 0){
 		f->tree->destroy(f);
 		freefile(f);
 	}
@@ -149,20 +149,20 @@ removefile(File *f)
 		return -1;
 	}
 
-	wlock(f);
-	wlock(fp);
+	wlock(&f->RWLock);
+	wlock(&fp->RWLock);
 	if(f->nchild != 0){
 		werrstr("has children");
-		wunlock(fp);
-		wunlock(f);
+		wunlock(&fp->RWLock);
+		wunlock(&f->RWLock);
 		closefile(f);
 		return -1;
 	}
 
 	if(f->parent != fp){
 		werrstr("parent changed underfoot");
-		wunlock(fp);
-		wunlock(f);
+		wunlock(&fp->RWLock);
+		wunlock(&f->RWLock);
 		closefile(f);
 		return -1;
 	}
@@ -176,10 +176,10 @@ removefile(File *f)
 	fp->nchild--;
 	fp->nxchild++;
 	f->parent = nil;
-	wunlock(f);
+	wunlock(&f->RWLock);
 
 	cleanfilelist(fp);
-	wunlock(fp);
+	wunlock(&fp->RWLock);
 
 	closefile(fp);	/* reference from child */
 	closefile(f);	/* reference from tree */
@@ -194,12 +194,12 @@ createfile(File *fp, char *name, char *uid, uint32_t perm, void *aux)
 	Filelist **l, *fl;
 	Tree *t;
 
-	if((fp->qid.type&QTDIR) == 0){
+	if((fp->Dir.qid.type&QTDIR) == 0){
 		werrstr("create in non-directory");
 		return nil;
 	}
 
-	wlock(fp);
+	wlock(&fp->RWLock);
 	/*
 	 * We might encounter blank spots along the
 	 * way due to deleted files that have not yet
@@ -209,8 +209,8 @@ createfile(File *fp, char *name, char *uid, uint32_t perm, void *aux)
 	 * Always create at the end of the list.
 	 */
 	for(l=&fp->filelist; fl=*l; l=&fl->link){
-		if(fl->f && strcmp(fl->f->name, name) == 0){
-			wunlock(fp);
+		if(fl->f && strcmp(fl->f->Dir.name, name) == 0){
+			wunlock(&fp->RWLock);
 			werrstr("file already exists");
 			return nil;
 		}
@@ -220,36 +220,36 @@ createfile(File *fp, char *name, char *uid, uint32_t perm, void *aux)
 	*l = fl;
 
 	f = allocfile();
-	f->name = estrdup9p(name);
-	f->uid = estrdup9p(uid ? uid : fp->uid);
-	f->gid = estrdup9p(fp->gid);
-	f->muid = estrdup9p(uid ? uid : "unknown");
+	f->Dir.name = estrdup9p(name);
+	f->Dir.uid = estrdup9p(uid ? uid : fp->Dir.uid);
+	f->Dir.gid = estrdup9p(fp->Dir.gid);
+	f->Dir.muid = estrdup9p(uid ? uid : "unknown");
 	f->aux = aux;
-	f->mode = perm;
+	f->Dir.mode = perm;
 
 	t = fp->tree;
 	lock(&t->genlock);
-	f->qid.path = t->qidgen++;
+	f->Dir.qid.path = t->qidgen++;
 	unlock(&t->genlock);
 	if(perm & DMDIR)
-		f->qid.type |= QTDIR;
+		f->Dir.qid.type |= QTDIR;
 	if(perm & DMAPPEND)
-		f->qid.type |= QTAPPEND;
+		f->Dir.qid.type |= QTAPPEND;
 	if(perm & DMEXCL)
-		f->qid.type |= QTEXCL;
+		f->Dir.qid.type |= QTEXCL;
 
-	f->mode = perm;
-	f->atime = f->mtime = time(0);
-	f->length = 0;
+	f->Dir.mode = perm;
+	f->Dir.atime = f->Dir.mtime = time(0);
+	f->Dir.length = 0;
 	f->parent = fp;
-	incref(fp);
+	incref(&fp->Ref);
 	f->tree = fp->tree;
 
-	incref(f);	/* being returned */
-	incref(f);	/* for the tree */
+	incref(&f->Ref);	/* being returned */
+	incref(&f->Ref);	/* for the tree */
 	fl->f = f;
 	fp->nchild++;
-	wunlock(fp);
+	wunlock(&fp->RWLock);
 
 	return f;
 }
@@ -260,24 +260,24 @@ walkfile1(File *dir, char *elem)
 	File *fp;
 	Filelist *fl;
 
-	rlock(dir);
+	rlock(&dir->RWLock);
 	if(strcmp(elem, "..") == 0){
 		fp = dir->parent;
-		incref(fp);
-		runlock(dir);
+		incref(&fp->Ref);
+		runlock(&dir->RWLock);
 		closefile(dir);
 		return fp;
 	}
 
 	fp = nil;
 	for(fl=dir->filelist; fl; fl=fl->link)
-		if(fl->f && strcmp(fl->f->name, elem)==0){
+		if(fl->f && strcmp(fl->f->Dir.name, elem)==0){
 			fp = fl->f;
-			incref(fp);
+			incref(&fp->Ref);
 			break;
 		}
 
-	runlock(dir);
+	runlock(&dir->RWLock);
 	closefile(dir);
 	return fp;
 }
@@ -313,7 +313,7 @@ alloctree(char *uid, char *gid, uint32_t mode, void (*destroy)(File*))
 
 	t = emalloc9p(sizeof *t);
 	f = allocfile();
-	f->name = estrdup9p("/");
+	f->Dir.name = estrdup9p("/");
 	if(uid == nil){
 		uid = getuser();
 		if(uid == nil)
@@ -328,17 +328,17 @@ alloctree(char *uid, char *gid, uint32_t mode, void (*destroy)(File*))
 
 	muid = estrdup9p(uid);
 
-	f->qid = (Qid){0, 0, QTDIR};
-	f->length = 0;
-	f->atime = f->mtime = time(0);
-	f->mode = DMDIR | mode;
+	f->Dir.qid = (Qid){0, 0, QTDIR};
+	f->Dir.length = 0;
+	f->Dir.atime = f->Dir.mtime = time(0);
+	f->Dir.mode = DMDIR | mode;
 	f->tree = t;
 	f->parent = f;
-	f->uid = uid;
-	f->gid = gid;
-	f->muid = muid;
+	f->Dir.uid = uid;
+	f->Dir.gid = gid;
+	f->Dir.muid = muid;
 
-	incref(f);
+	incref(&f->Ref);
 	t->root = f;
 	t->qidgen = 0;
 	t->dirqidgen = 1;
@@ -376,9 +376,9 @@ opendirfile(File *dir)
 {
 	Readdir *r;
 
-	rlock(dir);
-	if((dir->mode & DMDIR)==0){
-		runlock(dir);
+	rlock(&dir->RWLock);
+	if((dir->Dir.mode & DMDIR)==0){
+		runlock(&dir->RWLock);
 		return nil;
 	}
 	r = emalloc9p(sizeof(*r));
@@ -392,7 +392,7 @@ opendirfile(File *dir)
 	r->fl = dir->filelist;
 	r->dir = dir;
 	incref(&dir->readers);
-	runlock(dir);
+	runlock(&dir->RWLock);
 	return r;
 }
 
@@ -405,7 +405,7 @@ readdirfile(Readdir *r, uint8_t *buf, int32_t n)
 	for(fl=r->fl, m=0; fl && m+2<=n; fl=fl->link, m+=x){
 		if(fl->f == nil)
 			x = 0;
-		else if((x=convD2M(fl->f, buf+m, n-m)) <= BIT16SZ)
+		else if((x=convD2M(&fl->f->Dir, buf+m, n-m)) <= BIT16SZ)
 			break;
 	}
 	r->fl = fl;
@@ -416,9 +416,9 @@ void
 closedirfile(Readdir *r)
 {
 	if(decref(&r->dir->readers) == 0){
-		wlock(r->dir);
+		wlock(&r->dir->RWLock);
 		cleanfilelist(r->dir);
-		wunlock(r->dir);
+		wunlock(&r->dir->RWLock);
 	}
 	free(r);
 }

+ 9 - 9
sys/src/lib9p/intmap.c

@@ -28,7 +28,7 @@ struct Intlist
 
 struct Intmap
 {
-	RWLock;
+	RWLock RWLock;
 	Intlist*	hash[NHASH];
 	void (*inc)(void*);
 };
@@ -98,13 +98,13 @@ lookupkey(Intmap *map, uint32_t id)
 	Intlist *f;
 	void *v;
 
-	rlock(map);
+	rlock(&map->RWLock);
 	if(f = *llookup(map, id)){
 		v = f->aux;
 		map->inc(v);
 	}else
 		v = nil;
-	runlock(map);
+	runlock(&map->RWLock);
 	return v;
 }
 
@@ -115,7 +115,7 @@ insertkey(Intmap *map, uint32_t id, void *v)
 	void *ov;
 	uint32_t h;
 
-	wlock(map);
+	wlock(&map->RWLock);
 	if(f = *llookup(map, id)){
 		/* no decrement for ov because we're returning it */
 		ov = f->aux;
@@ -129,7 +129,7 @@ insertkey(Intmap *map, uint32_t id, void *v)
 		map->hash[h] = f;
 		ov = nil;
 	}
-	wunlock(map);
+	wunlock(&map->RWLock);
 	return ov;	
 }
 
@@ -140,7 +140,7 @@ caninsertkey(Intmap *map, uint32_t id, void *v)
 	int rv;
 	uint32_t h;
 
-	wlock(map);
+	wlock(&map->RWLock);
 	if(*llookup(map, id))
 		rv = 0;
 	else{
@@ -152,7 +152,7 @@ caninsertkey(Intmap *map, uint32_t id, void *v)
 		map->hash[h] = f;
 		rv = 1;
 	}
-	wunlock(map);
+	wunlock(&map->RWLock);
 	return rv;	
 }
 
@@ -162,13 +162,13 @@ deletekey(Intmap *map, uint32_t id)
 	Intlist **lf, *f;
 	void *ov;
 
-	wlock(map);
+	wlock(&map->RWLock);
 	if(f = *(lf = llookup(map, id))){
 		ov = f->aux;
 		*lf = f->link;
 		free(f);
 	}else
 		ov = nil;
-	wunlock(map);
+	wunlock(&map->RWLock);
 	return ov;
 }

+ 0 - 1
sys/src/lib9p/lib9p.json

@@ -1,7 +1,6 @@
 {
 	"lib9p": {
 		"Cflags": [
-			"-fplan9-extensions",
 			"-Werror"
 		],
 		"Include": [

+ 8 - 8
sys/src/lib9p/srv.c

@@ -120,17 +120,17 @@ filewalk(Req *r)
 	f = r->fid->file;
 	assert(f != nil);
 
-	incref(f);
+	incref(&f->Ref);
 	for(i=0; i<r->ifcall.nwname; i++)
 		if(f = walkfile(f, r->ifcall.wname[i]))
-			r->ofcall.wqid[i] = f->qid;
+			r->ofcall.wqid[i] = f->Dir.qid;
 		else
 			break;
 
 	r->ofcall.nwqid = i;
 	if(f){
 		r->newfid->file = f;
-		r->newfid->qid = r->newfid->file->qid;
+		r->newfid->qid = r->newfid->file->Dir.qid;
 	}
 	respond(r, nil);
 }
@@ -227,8 +227,8 @@ sattach(Srv *srv, Req *r)
 	r->fid->uid = estrdup9p(r->ifcall.uname);
 	if(srv->tree){
 		r->fid->file = srv->tree->root;
-		incref(r->fid->file);
-		r->ofcall.qid = r->fid->file->qid;
+		incref(&r->fid->file->Ref);
+		r->ofcall.qid = r->fid->file->Dir.qid;
 		r->fid->qid = r->ofcall.qid;
 	}
 	if(srv->attach)
@@ -410,7 +410,7 @@ sopen(Srv *srv, Req *r)
 			respond(r, Eperm);
 			return;
 		}
-		r->ofcall.qid = r->fid->file->qid;
+		r->ofcall.qid = r->fid->file->Dir.qid;
 		if((r->ofcall.qid.type&QTDIR)
 		&& (r->fid->rdir = opendirfile(r->fid->file)) == nil){
 			respond(r, "opendirfile failed");
@@ -545,7 +545,7 @@ rwrite(Req *r, char *error)
 	if(error)
 		return;
 	if(r->fid->file)
-		r->fid->file->qid.vers++;
+		r->fid->file->Dir.qid.vers++;
 }
 
 static void
@@ -586,7 +586,7 @@ rremove(Req *r, char *error, char *errbuf)
 	if(r->fid->file){
 		if(removefile(r->fid->file) < 0){
 			snprint(errbuf, ERRMAX, "remove %s: %r", 
-				r->fid->file->name);
+				r->fid->file->Dir.name);
 			r->error = errbuf;
 		}
 		r->fid->file = nil;

+ 5 - 5
sys/src/lib9p/uid.c

@@ -23,18 +23,18 @@ hasperm(File *f, char *uid, int p)
 {
 	int m;
 
-	m = f->mode & 7;	/* other */
+	m = f->Dir.mode & 7;	/* other */
 	if((p & m) == p)
 		return 1;
 
-	if(strcmp(f->uid, uid) == 0) {
-		m |= (f->mode>>6) & 7;
+	if(strcmp(f->Dir.uid, uid) == 0) {
+		m |= (f->Dir.mode>>6) & 7;
 		if((p & m) == p)
 			return 1;
 	}
 
-	if(strcmp(f->gid, uid) == 0) {
-		m |= (f->mode>>3) & 7;
+	if(strcmp(f->Dir.gid, uid) == 0) {
+		m |= (f->Dir.mode>>3) & 7;
 		if((p & m) == p)
 			return 1;
 	}