--- /sys/src/9/port/devsrv.c Sat Jun 22 17:25:03 2013+++ ../frontmods/port/devsrv.c Fri Dec 22 02:26:47 2017@@ -6,19 +6,7 @@ #include "../port/error.h" -typedef struct Srv Srv;-struct Srv-{- char *name;- char *owner;- ulong perm;- Chan *chan;- Srv *link;- ulong path;-};- static QLock srvlk;-static Srv *srv; static int qidpath; static Srv*@@ -26,7 +14,7 @@ { Srv *sp; - for(sp = srv; sp != nil; sp = sp->link) {+ for(sp = up->sgrp->srvgrp; sp != nil; sp = sp->link) { if(sp->path == qidpath || (name != nil && strcmp(sp->name, name) == 0)) return sp; }@@ -48,7 +36,7 @@ if(name != nil) sp = srvlookup(name, -1); else {- for(sp = srv; sp != nil && s > 0; sp = sp->link)+ for(sp = up->sgrp->srvgrp; sp != nil && s > 0; sp = sp->link) s--; } if(sp == nil || (name != nil && (strlen(sp->name) >= sizeof(up->genbuf)))) {@@ -95,7 +83,7 @@ s = nil; qlock(&srvlk);- for(sp = srv; sp != nil; sp = sp->link) {+ for(sp = up->sgrp->srvgrp; sp != nil; sp = sp->link) { if(sp->chan == c){ s = malloc(3+strlen(sp->name)+1); if(s != nil)@@ -181,8 +169,8 @@ c->qid.path = sp->path; c->qid.type = QTFILE; - sp->link = srv;- srv = sp;+ sp->link = up->sgrp->srvgrp;+ up->sgrp->srvgrp = sp; qunlock(&srvlk); poperror();@@ -206,7 +194,7 @@ qunlock(&srvlk); nexterror(); }- l = &srv;+ l = &up->sgrp->srvgrp; for(sp = *l; sp != nil; sp = *l) { if(sp->path == c->qid.path) break;@@ -378,12 +366,30 @@ }; void+closesgrp(Sgrp *sg)+{+ Srv *sp;+ Srv *tsp;++ if(decref(sg) == 0){+ sp = sg->srvgrp;+ while(sp!=nil){+ tsp=sp;+ sp=sp->link;+ free(tsp);+ }+ free(sg);+ }+ return;+}++void srvrenameuser(char *old, char *new) { Srv *sp; qlock(&srvlk);- for(sp = srv; sp != nil; sp = sp->link) {+ for(sp = up->sgrp->srvgrp; sp != nil; sp = sp->link) { if(sp->owner != nil && strcmp(old, sp->owner) == 0) kstrdup(&sp->owner, new); }
--- /sys/src/9/port/devsrv.c Sat Jun 22 17:25:03 2013
+++ ../frontmods/port/devsrv.c Fri Dec 22 02:26:47 2017
@@ -6,19 +6,7 @@
#include "../port/error.h"
-typedef struct Srv Srv;
-struct Srv
-{
- char *name;
- char *owner;
- ulong perm;
- Chan *chan;
- Srv *link;
- ulong path;
-};
-
static QLock srvlk;
-static Srv *srv;
static int qidpath;
static Srv*
@@ -26,7 +14,7 @@
{
Srv *sp;
- for(sp = srv; sp != nil; sp = sp->link) {
+ for(sp = up->sgrp->srvgrp; sp != nil; sp = sp->link) {
if(sp->path == qidpath || (name != nil && strcmp(sp->name, name) == 0))
return sp;
}
@@ -48,7 +36,7 @@
if(name != nil)
sp = srvlookup(name, -1);
else {
- for(sp = srv; sp != nil && s > 0; sp = sp->link)
+ for(sp = up->sgrp->srvgrp; sp != nil && s > 0; sp = sp->link)
s--;
}
if(sp == nil || (name != nil && (strlen(sp->name) >= sizeof(up->genbuf)))) {
@@ -95,7 +83,7 @@
s = nil;
qlock(&srvlk);
- for(sp = srv; sp != nil; sp = sp->link) {
+ for(sp = up->sgrp->srvgrp; sp != nil; sp = sp->link) {
if(sp->chan == c){
s = malloc(3+strlen(sp->name)+1);
if(s != nil)
@@ -181,8 +169,8 @@
c->qid.path = sp->path;
c->qid.type = QTFILE;
- sp->link = srv;
- srv = sp;
+ sp->link = up->sgrp->srvgrp;
+ up->sgrp->srvgrp = sp;
qunlock(&srvlk);
poperror();
@@ -206,7 +194,7 @@
qunlock(&srvlk);
nexterror();
}
- l = &srv;
+ l = &up->sgrp->srvgrp;
for(sp = *l; sp != nil; sp = *l) {
if(sp->path == c->qid.path)
break;
@@ -378,12 +366,30 @@
};
void
+closesgrp(Sgrp *sg)
+{
+ Srv *sp;
+ Srv *tsp;
+
+ if(decref(sg) == 0){
+ sp = sg->srvgrp;
+ while(sp!=nil){
+ tsp=sp;
+ sp=sp->link;
+ free(tsp);
+ }
+ free(sg);
+ }
+ return;
+}
+
+void
srvrenameuser(char *old, char *new)
{
Srv *sp;
qlock(&srvlk);
- for(sp = srv; sp != nil; sp = sp->link) {
+ for(sp = up->sgrp->srvgrp; sp != nil; sp = sp->link) {
if(sp->owner != nil && strcmp(old, sp->owner) == 0)
kstrdup(&sp->owner, new);
}