From f6996f990518824f910ee31a730a47632ba721af Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Mon, 22 Jan 1996 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1996-01-22 --- port/devtinyfs.c | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/port/devtinyfs.c b/port/devtinyfs.c index 883afb55405040c7135dee0f180a04bf1204bdce..d9a028fa9793d35683c442a2787a707f7f2efe33 100644 --- a/port/devtinyfs.c +++ b/port/devtinyfs.c @@ -17,12 +17,23 @@ enum{ Qmedium, }; +typedef struct FS FS; -struct { +struct FS { QLock; + Ref r; + int dev; + FS *next; Chan *c; - Dirtab file[Nfile+1]; + Dirtab *file; int nfile; + int maxfile; +}; + +struct { + QLock; + FS *l; + int hidev; } tinyfs; void @@ -46,9 +57,34 @@ tinyfsinit(void) Chan * tinyfsattach(char *spec) { - c = namec((char*)arg[0], Aopen, arg[1], 0); + FS *fs, **l; + Chan *c, *cc; + + cc = namec((char*)arg[0], Aopen, arg[1], 0); + qlock(&tinyfs); + l = &tinyfs.l; + for(fs = tinyfs.l; fs != 0; fs = fs->next){ + if(eqchan(c, fs->c)) + break; + l = &(fs->next); + } + if(fs){ + incref(&fs->r); + qunlock(&tinyfs); + close(cc); + } else { + fs = smalloc(sizeof(*fs)); + *l = fs; + fs->c = cc; + incref(&fs->r); + qunlock(&tinyfs); + } + + c = devattach('E', spec); + c->aux = fs; + c->dev = fs->dev; - return devattach('E', spec); + return c; } Chan *