From f515d58506eb047ce367748e16f824951c5d3758 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 19 Apr 1991 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1991-04-19 --- gnot/dat.h | 1 + gnot/devcons.c | 6 ++++++ gnot/devincon.c | 6 ++++++ gnot/devport.c | 6 ++++++ gnot/fns.h | 1 + port/devbit.c | 6 ++++++ port/devboot.c | 6 ++++++ port/devcons.c | 6 ++++++ port/devdk.c | 6 ++++++ port/devdup.c | 6 ++++++ port/devenv.c | 6 ++++++ port/deviproute.c | 8 +++++++- port/devkprof.c | 6 ++++++ port/devlance.c | 6 ++++++ port/devnonet.c | 6 ++++++ port/devpipe.c | 6 ++++++ port/devproc.c | 6 ++++++ port/devroot.c | 6 ++++++ port/devscsi.c | 6 ++++++ port/devsrv.c | 6 ++++++ port/devwren.c | 6 ++++++ port/stream.c | 3 +++ port/sysfile.c | 6 ------ power/dat.h | 1 + power/devhotrod.c | 6 ++++++ power/devhs.c | 6 ++++++ power/devrtc.c | 6 ++++++ power/fns.h | 1 + ss/dat.h | 1 + ss/fns.h | 1 + 30 files changed, 142 insertions(+), 7 deletions(-) diff --git a/gnot/dat.h b/gnot/dat.h index 7c7ffd1485873ffde31fbb3d809e9615dc7f70e2..772dde1ded7579e0de602df9343f205c6b3c58a7 100644 --- a/gnot/dat.h +++ b/gnot/dat.h @@ -176,6 +176,7 @@ struct Dev long (*write)(Chan*, void*, long, ulong); void (*remove)(Chan*); void (*wstat)(Chan*, char*); + Chan *(*clwalk)(Chan*, char*); }; struct Dirtab diff --git a/gnot/devcons.c b/gnot/devcons.c index 77852fc6058a1a2c1b4f38e77365f0e4970ba415..42ed373e4b28944d7cccb9947241edae9983ba9f 100644 --- a/gnot/devcons.c +++ b/gnot/devcons.c @@ -491,6 +491,12 @@ conswalk(Chan *c, char *name) return devwalk(c, name, consdir, NCONS, consgen); } +Chan* +consclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void consstat(Chan *c, char *dp) { diff --git a/gnot/devincon.c b/gnot/devincon.c index f8db939f60f098fdbf0c14d27ad11fc9aed293c2..f4dc06a669619b77863a55656bb33a64f1366d31 100644 --- a/gnot/devincon.c +++ b/gnot/devincon.c @@ -359,6 +359,12 @@ inconwalk(Chan *c, char *name) return devwalk(c, name, 0, 0, streamgen); } +Chan* +inconclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void inconstat(Chan *c, char *dp) { diff --git a/gnot/devport.c b/gnot/devport.c index 2b1d16be59e9d00eb83cb9cdf07775b409f37754..cd4f3e88223a7f8ba5cf3cf05ed25240774e94c4 100644 --- a/gnot/devport.c +++ b/gnot/devport.c @@ -83,6 +83,12 @@ portwalk(Chan *c, char *name) return devwalk(c, name, portdir, NPORT, devgen); } +Chan* +portclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void portstat(Chan *c, char *db) { diff --git a/gnot/fns.h b/gnot/fns.h index 35d2189d8d3f7fce3a7629b7af150724cda0867a..acc3b5afbd69b2d8df054aa56ba2dd9559532749 100644 --- a/gnot/fns.h +++ b/gnot/fns.h @@ -28,6 +28,7 @@ void delete(List**, List*, List*); void delete0(List**, List*); Chan *devattach(int, char*); Chan *devclone(Chan*, Chan*); +Chan *devclwalk(Chan*, char*); void devdir(Chan*, Qid, char*, long, long, Dir*); long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*); Devgen devgen; diff --git a/port/devbit.c b/port/devbit.c index edd524745e5d88fc1de2d6f678bc36044b48b323..0c0b82ff0ae8785608c5288cae03a3a68d3f07b9 100644 --- a/port/devbit.c +++ b/port/devbit.c @@ -191,6 +191,12 @@ bitwalk(Chan *c, char *name) return devwalk(c, name, bitdir, NBIT, devgen); } +Chan* +bitclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void bitstat(Chan *c, char *db) { diff --git a/port/devboot.c b/port/devboot.c index 9e50239f326dafc6e801b1aa4cb45bbf34450109..e32e3e0a3e0aee35ab2b97457a0cdceed8eb6dbe 100644 --- a/port/devboot.c +++ b/port/devboot.c @@ -47,6 +47,12 @@ bootwalk(Chan *c, char *name) return devwalk(c, name, bootdir, NBOOT, devgen); } +Chan* +bootclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void bootstat(Chan *c, char *dp) { diff --git a/port/devcons.c b/port/devcons.c index 63bc661c716d95663b6561ad240ac56ebd088f1d..9f8cad8cf693f4b34eed72c688f1d11842446f66 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -404,6 +404,12 @@ conswalk(Chan *c, char *name) return devwalk(c, name, consdir, NCONS, devgen); } +Chan* +consclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void consstat(Chan *c, char *dp) { diff --git a/port/devdk.c b/port/devdk.c index b21c1ca4588256688d1d19d2a8de693d34f573e2..3571ca5e2f963187f38bda62f9cda0a3c627efae 100644 --- a/port/devdk.c +++ b/port/devdk.c @@ -753,6 +753,12 @@ dkwalk(Chan *c, char *name) return devwalk(c, name, dksubdir, Nsubdir, streamgen); } +Chan* +dkclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void dkstat(Chan *c, char *dp) { diff --git a/port/devdup.c b/port/devdup.c index 4a0ca33f741112bd88a56e38657070233d8deab0..9ec8cd45a549ef71a3db6a48aedc2869998186e3 100644 --- a/port/devdup.c +++ b/port/devdup.c @@ -46,6 +46,12 @@ dupclone(Chan *c, Chan *nc) return devclone(c, nc); } +Chan* +dupclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + int dupwalk(Chan *c, char *name) { diff --git a/port/devenv.c b/port/devenv.c index e450c0ba785c7127997f036d4f0ed1079572b7d5..5f46e9a9b2911f869c82ad98a78d2dd75547b94d 100644 --- a/port/devenv.c +++ b/port/devenv.c @@ -270,6 +270,12 @@ envwalk(Chan *c, char *name) return 0; } +Chan* +envclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void envstat(Chan *c, char *db) { diff --git a/port/deviproute.c b/port/deviproute.c index ba2e0daea2463f97636bedcfe57efd6f001a284a..11621332be154d0ba4988de3ec558a2904db9e11 100644 --- a/port/deviproute.c +++ b/port/deviproute.c @@ -190,7 +190,7 @@ enum{ Qdata, }; Dirtab iproutetab[]={ - "iproute", Qdata, 0, 0600, + "iproute", {Qdata}, 0, 0600, }; #define Niproutetab (sizeof(iproutetab)/sizeof(Dirtab)) @@ -222,6 +222,12 @@ iproutewalk(Chan *c, char *name) return devwalk(c, name, iproutetab, (long)Niproutetab, devgen); } +Chan* +iprouteclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void iproutestat(Chan *c, char *db) { diff --git a/port/devkprof.c b/port/devkprof.c index 09cb6ee78d1c0accc7ea93f1647ed8e17ca0a8ad..ae37d9ddd37882567802f3168457223be5fb458c 100644 --- a/port/devkprof.c +++ b/port/devkprof.c @@ -63,6 +63,12 @@ kprofwalk(Chan *c, char *name) return devwalk(c, name, kproftab, (long)Nkproftab, devgen); } +Chan* +kprofclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void kprofstat(Chan *c, char *db) { diff --git a/port/devlance.c b/port/devlance.c index b8b6045c1a4d302e4258893516197ca680941e9a..613c0e2bf45354078a2c6442572146df96c51ab9 100644 --- a/port/devlance.c +++ b/port/devlance.c @@ -579,6 +579,12 @@ lancewalk(Chan *c, char *name) return devwalk(c, name, 0, 0, streamgen); } +Chan* +lanceclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void lancestat(Chan *c, char *dp) { diff --git a/port/devnonet.c b/port/devnonet.c index 51538ad551635034d090628eec4ddfec2abc26c3..315bdc221114b242aefd33e71c597a06cb233f77 100644 --- a/port/devnonet.c +++ b/port/devnonet.c @@ -202,6 +202,12 @@ nonetwalk(Chan *c, char *name) return devwalk(c, name, nosubdir, Nsubdir, streamgen); } +Chan* +nonetclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void nonetstat(Chan *c, char *dp) { diff --git a/port/devpipe.c b/port/devpipe.c index e41a1b8f87c437005af0b3a4af1ee940a9afbdda..905f3b366d84d030ecc2d64f5b25633a7c1cdf5c 100644 --- a/port/devpipe.c +++ b/port/devpipe.c @@ -125,6 +125,12 @@ pipewalk(Chan *c, char *name) return devwalk(c, name, pipedir, NPIPEDIR, pipegen); } +Chan* +pipeclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void pipestat(Chan *c, char *db) { diff --git a/port/devproc.c b/port/devproc.c index 6ee99317128caa505c9bdb5967cda42b615ee6d4..e89f2459acc195d7e88ae4a47485e5bb1f046b6c 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -101,6 +101,12 @@ procwalk(Chan *c, char *name) return devwalk(c, name, 0, 0, procgen); } +Chan* +procclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void procstat(Chan *c, char *db) { diff --git a/port/devroot.c b/port/devroot.c index 2394b9f97ba5f6e3bc1d82a1b83f46d6418c0888..1318207652b76ef9fc6f39577686b0ec61e073f4 100644 --- a/port/devroot.c +++ b/port/devroot.c @@ -61,6 +61,12 @@ rootwalk(Chan *c, char *name) return devwalk(c, name, rootdir, nroot, devgen); } +Chan* +rootclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void rootstat(Chan *c, char *dp) { diff --git a/port/devscsi.c b/port/devscsi.c index 770062251c80b5990d950e8774066fbd5931102d..72a8713d644e79b7d2f3eee5c3a7e176d3a93a86 100644 --- a/port/devscsi.c +++ b/port/devscsi.c @@ -94,6 +94,12 @@ scsiwalk(Chan *c, char *name) return devwalk(c, name, 0, 0, scsigen); } +Chan* +scsiclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void scsistat(Chan *c, char *db) { diff --git a/port/devsrv.c b/port/devsrv.c index 21ed942feb748e9a348d84b34b43a9fe90a14e78..18d04658acfc3a7a6424e6fb074998fbea0cee7d 100644 --- a/port/devsrv.c +++ b/port/devsrv.c @@ -105,6 +105,12 @@ srvwalk(Chan *c, char *name) return 1; } +Chan* +srvclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void srvstat(Chan *c, char *db) { diff --git a/port/devwren.c b/port/devwren.c index d60ac4b9330f1e7cc6fb0d7a40a2a03f4c706b47..6dc53be1b1ff6b87fcf946bfe4e06469f232b005 100644 --- a/port/devwren.c +++ b/port/devwren.c @@ -175,6 +175,12 @@ wrenwalk(Chan *c, char *name) return devwalk(c, name, wrendir, NWREN, wrengen); } +Chan* +wrenclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void wrenstat(Chan *c, char *db) { diff --git a/port/stream.c b/port/stream.c index 4a3417a2b988212ece9ab0638e958900f30d8a75..544c8edf0cf2ddaa2ff99022408c5c740cd6649b 100644 --- a/port/stream.c +++ b/port/stream.c @@ -223,6 +223,7 @@ allocb(ulong size) /* * return an empty block */ + bp->flags = bcp - bclass; bp->rptr = bp->wptr = bp->base; bp->next = 0; bp->type = M_DATA; @@ -248,6 +249,7 @@ freeb(Block *bp) panic("freeb class"); for(; bp; bp = nbp){ bcp = &bclass[bp->flags & S_CLASS]; + bp->flags = S_CLASS; /* Check for doulbe free */ lock(bcp); bp->rptr = bp->wptr = 0; if(bcp->first) @@ -596,6 +598,7 @@ pullup(Block *bp, int n) /* * if not enough room in the first block, * add another to the front of the list. + */ if(bp->lim - bp->rptr < n){ nbp = allocb(n); nbp->next = bp; diff --git a/port/sysfile.c b/port/sysfile.c index 8a0805fd85e3da13c3d11513341a4556d0340ef6..bd4f3d15c93a5900c29c79705d1ddff09ba8dcac 100644 --- a/port/sysfile.c +++ b/port/sysfile.c @@ -227,10 +227,8 @@ sysread(ulong *arg) c = fdtochan(arg[0], OREAD); validaddr(arg[1], arg[2], 1); qlock(&c->rdl); - qlock(&c->wrl); /* BUG BUG BUG */ if(waserror()){ qunlock(&c->rdl); - qunlock(&c->wrl); /* BUG BUG BUG */ nexterror(); } n = arg[2]; @@ -245,7 +243,6 @@ sysread(ulong *arg) n = (*devtab[c->type].read)(c, (void*)arg[1], n, c->offset); c->offset += n; qunlock(&c->rdl); - qunlock(&c->wrl); /* BUG BUG BUG */ return n; } @@ -257,10 +254,8 @@ syswrite(ulong *arg) c = fdtochan(arg[0], OWRITE); validaddr(arg[1], arg[2], 0); - qlock(&c->rdl); /* BUG BUG BUG */ qlock(&c->wrl); if(waserror()){ - qunlock(&c->rdl); /* BUG BUG BUG */ qunlock(&c->wrl); nexterror(); } @@ -268,7 +263,6 @@ syswrite(ulong *arg) error(Eisdir); n = (*devtab[c->type].write)(c, (void*)arg[1], arg[2], c->offset); c->offset += n; - qunlock(&c->rdl); /* BUG BUG BUG */ qunlock(&c->wrl); return n; } diff --git a/power/dat.h b/power/dat.h index 78760657ffcb14128e2e64023ab2b231b91fcbf6..165e19b694792ab8ce664a44ec782625659231c7 100644 --- a/power/dat.h +++ b/power/dat.h @@ -186,6 +186,7 @@ struct Dev long (*write)(Chan*, void*, long, ulong); void (*remove)(Chan*); void (*wstat)(Chan*, char*); + Chan *(*clwalk)(Chan*, char*); }; struct Dirtab diff --git a/power/devhotrod.c b/power/devhotrod.c index 51af70930fcfb4c5f6fc355fa7b8a2a742889df9..1a1ef940a2007e16b1221593b9639b680903fa5d 100644 --- a/power/devhotrod.c +++ b/power/devhotrod.c @@ -152,6 +152,12 @@ hotrodwalk(Chan *c, char *name) return devwalk(c, name, hotroddir, NHOTRODDIR, devgen); } +Chan* +hotrodclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void hotrodstat(Chan *c, char *dp) { diff --git a/power/devhs.c b/power/devhs.c index 0e890244385962e04bf33e09a3d7c0a564f7d8bb..2538e41b1b0f286fc5dc92a044e8b028833c7ca8 100644 --- a/power/devhs.c +++ b/power/devhs.c @@ -184,6 +184,12 @@ hsvmewalk(Chan *c, char *name) return devwalk(c, name, 0, 0, streamgen); } +Chan* +hsvmeclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void hsvmestat(Chan *c, char *dp) { diff --git a/power/devrtc.c b/power/devrtc.c index c1709ed6279a78da7dfcf6f68316bd173cf751ab..a48ad14ad226f273080b355b8b761b5015847e62 100644 --- a/power/devrtc.c +++ b/power/devrtc.c @@ -104,6 +104,12 @@ rtcwalk(Chan *c, char *name) return 0; } +Chan* +rtcclwalk(Chan *c, char *name) +{ + return devclwalk(c, name); +} + void rtcstat(Chan *c, char *dp) { diff --git a/power/fns.h b/power/fns.h index 29ed30e011f9533408a904c2b57ed0b595f3f497..ad1105794acbf8413d0a64bfacc1a8596dcc34c1 100644 --- a/power/fns.h +++ b/power/fns.h @@ -36,6 +36,7 @@ void delete(List**, List*, List*); void delete0(List**, List*); Chan *devattach(int, char*); Chan *devclone(Chan*, Chan*); +Chan *devclwalk(Chan*, char*); void devdir(Chan*, Qid, char*, long, long, Dir*); long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*); Devgen devgen; diff --git a/ss/dat.h b/ss/dat.h index c54ed2e5948c9104b1fe7758d51ba40f756599e7..eb49e3eed720814600fbd45418671825f649ec17 100644 --- a/ss/dat.h +++ b/ss/dat.h @@ -178,6 +178,7 @@ struct Dev long (*write)(Chan*, void*, long, ulong ); void (*remove)(Chan*); void (*wstat)(Chan*, char*); + Chan *(*clwalk)(Chan*, char*); }; struct Dirtab diff --git a/ss/fns.h b/ss/fns.h index 466e9b7dbde56d4df9a15095b769948fb776dfed..d86e73548d23f8e940b7862a8d07bb38a27fe840 100644 --- a/ss/fns.h +++ b/ss/fns.h @@ -30,6 +30,7 @@ void delete(List**, List*, List*); void delete0(List**, List*); Chan *devattach(int, char*); Chan *devclone(Chan*, Chan*); +Chan *devclwalk(Chan*, char*); void devdir(Chan*, Qid, char*, long, long, Dir*); long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*); Devgen devgen;