| plan 9 kernel history: overview | file list | diff list |
1991/0705/port/devenv.c (diff list | history)
| 1991/0427/sys/src/9/port/devenv.c:211,225 – 1991/0705/sys/src/9/port/devenv.c:211,225 (short | long | prev | next) | ||
| 1990/0227 | envgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp) { Env *e; | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | int ans; | |
| 1991/0705 | eg = u->p->egrp; lock(eg); if(s >= eg->nenv) | |
| 1990/0227 | ans = -1; else{ | |
| 1991/0705 | e = eg->etab[s].env; | |
| 1990/0227 | if(e == 0) ans = 0; else{ | |
| 1991/0427/sys/src/9/port/devenv.c:229,235 – 1991/0705/sys/src/9/port/devenv.c:229,235 | ||
| 1990/0227 | ans = 1; } } | |
| 1991/0705 | unlock(eg); | |
| 1990/0227 | return ans; } | |
| 1991/0427/sys/src/9/port/devenv.c:242,254 – 1991/0705/sys/src/9/port/devenv.c:242,254 | ||
| 1990/0227 | Chan* envclone(Chan *c, Chan *nc) { | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | ||
| 1990/11211 | if(!(c->qid.path&CHDIR)){ | |
| 1990/0227 |
| |
| 1990/11211 |
| |
| 1990/0227 |
| |
| 1991/0705 | eg = u->p->egrp; lock(eg); eg->etab[c->qid.path-1].chref++; unlock(eg); | |
| 1990/0227 | } return devclone(c, nc); } | |
| 1991/0427/sys/src/9/port/devenv.c:256,269 – 1991/0705/sys/src/9/port/devenv.c:256,269 | ||
| 1990/0227 | int envwalk(Chan *c, char *name) { | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | if(devwalk(c, name, 0, 0, envgen)){ | |
| 1990/11211 | if(!(c->qid.path&CHDIR)){ | |
| 1990/0227 |
| |
| 1990/11211 |
| |
| 1990/0227 |
| |
| 1991/0705 | eg = u->p->egrp; lock(eg); eg->etab[c->qid.path-1].chref++; unlock(eg); | |
| 1990/0227 | return 1; } } | |
| 1991/0427/sys/src/9/port/devenv.c:281,297 – 1991/0705/sys/src/9/port/devenv.c:281,297 | ||
| 1990/0227 | { Env *e, *ne; Envp *ep; | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | if(omode & (OWRITE|OTRUNC)){ | |
| 1990/11211 | if(c->qid.path & CHDIR) error(Eperm); | |
| 1990/0227 |
| |
| 1990/11211 |
| |
| 1991/0705 | eg = u->p->egrp; lock(eg); ep = &eg->etab[c->qid.path-1]; | |
| 1990/0227 | e = ep->env; if(!e){ | |
| 1991/0705 | unlock(eg); | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } lock(&envalloc); | |
| 1991/0427/sys/src/9/port/devenv.c:299,305 – 1991/0705/sys/src/9/port/devenv.c:299,305 | ||
| 1990/0227 | if(waserror()){ unlock(e); unlock(&envalloc); | |
| 1990/03042 |
| |
| 1991/0705 | unlock(eg); | |
| 1990/0227 | nexterror(); } if(e->pgref == 0) | |
| 1991/0427/sys/src/9/port/devenv.c:318,324 – 1991/0705/sys/src/9/port/devenv.c:318,324 | ||
| 1990/0227 | poperror(); unlock(e); unlock(&envalloc); | |
| 1991/0705 | unlock(eg); | |
| 1990/0227 | } c->mode = openmode(omode); c->flag |= COPEN; | |
| 1991/0427/sys/src/9/port/devenv.c:330,346 – 1991/0705/sys/src/9/port/devenv.c:330,346 | ||
| 1990/0227 | envcreate(Chan *c, char *name, int omode, ulong perm) { Env *e; | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | int i; | |
| 1990/11211 | if(c->qid.path != CHDIR) error(Eperm); | |
| 1990/0227 |
| |
| 1991/0705 | eg = u->p->egrp; lock(eg); | |
| 1990/0227 | lock(&envalloc); if(waserror()){ unlock(&envalloc); | |
| 1991/0705 | unlock(eg); | |
| 1990/0227 | nexterror(); } e = envalloc.efree; | |
| 1991/0427/sys/src/9/port/devenv.c:352,372 – 1991/0705/sys/src/9/port/devenv.c:352,372 | ||
| 1990/0227 | e->next = 0; e->pgref = 1; strncpy(e->name, name, NAMELEN); | |
| 1991/0705 | if(eg->nenv == conf.npgenv){ for(i = 0; i<eg->nenv; i++) if(eg->etab[i].chref == 0) | |
| 1990/0227 | break; | |
| 1991/0705 | if(i == eg->nenv){ print("out of egroup envs\n"); | |
| 1990/11211 | error(Enoenv); | |
| 1990/0227 | } }else | |
| 1991/0705 | i = eg->nenv++; | |
| 1990/11211 | c->qid.path = i+1; | |
| 1990/0227 |
| |
| 1991/0705 | eg->etab[i].env = e; eg->etab[i].chref = 1; | |
| 1990/0227 | unlock(&envalloc); | |
| 1991/0705 | unlock(eg); | |
| 1990/0227 | c->offset = 0; c->mode = openmode(omode); poperror(); | |
| 1991/0427/sys/src/9/port/devenv.c:378,399 – 1991/0705/sys/src/9/port/devenv.c:378,399 | ||
| 1990/0227 | { Env *e; Envp *ep; | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | ||
| 1990/11211 | if(c->qid.path & CHDIR) error(Eperm); | |
| 1990/0227 |
| |
| 1990/11211 |
| |
| 1991/0705 | eg = u->p->egrp; lock(eg); ep = &eg->etab[c->qid.path-1]; | |
| 1990/0227 | e = ep->env; if(!e){ | |
| 1991/0705 | unlock(eg); | |
| 1990/11211 | error(Enonexist); | |
| 1990/0227 | } ep->env = 0; ep->chref--; envpgclose(e); | |
| 1991/0705 | unlock(eg); | |
| 1990/0227 | } void | |
| 1991/0427/sys/src/9/port/devenv.c:407,420 – 1991/0705/sys/src/9/port/devenv.c:407,420 | ||
| 1990/0227 | void envclose(Chan * c) { | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | ||
| 1990/11211 | if(c->qid.path & CHDIR) | |
| 1990/0227 | return; | |
| 1990/11211 |
| |
| 1990/0227 |
| |
| 1991/0705 | eg = u->p->egrp; lock(eg); eg->etab[c->qid.path-1].chref--; unlock(eg); | |
| 1990/0227 | } void | |
| 1991/0427/sys/src/9/port/devenv.c:441,456 – 1991/0705/sys/src/9/port/devenv.c:441,456 | ||
| 1990/0227 | Envval *ev; char *p; long vn; | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | char *a = va; | |
| 1990/11211 | if(c->qid.path & CHDIR) | |
| 1990/0227 | return devdirread(c, a, n, 0, 0, envgen); | |
| 1990/11211 |
| |
| 1991/0705 | eg = u->p->egrp; lock(eg); e = eg->etab[c->qid.path-1].env; | |
| 1990/0227 | if(!e){ | |
| 1991/0705 | unlock(eg); | |
| 1990/11211 | error(Eio); | |
| 1990/0227 | } lock(e); | |
| 1991/0427/sys/src/9/port/devenv.c:463,469 – 1991/0705/sys/src/9/port/devenv.c:463,469 | ||
| 1990/0227 | else | |
| 1991/0411 | memmove(a, ev->dat+offset, n); | |
| 1990/0227 | unlock(e); | |
| 1991/0705 | unlock(eg); | |
| 1990/0227 | return n; } | |
| 1991/0427/sys/src/9/port/devenv.c:474,489 – 1991/0705/sys/src/9/port/devenv.c:474,489 | ||
| 1990/0227 | char *p; Envval *ev; long vn; | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | char *a = va; if(n <= 0) return 0; | |
| 1990/11211 |
| |
| 1991/0705 | eg = u->p->egrp; lock(eg); e = eg->etab[c->qid.path-1].env; /* caller checks for CHDIR */ | |
| 1990/0227 | if(!e){ | |
| 1991/0705 | unlock(eg); | |
| 1990/11211 | error(Eio); | |
| 1990/0227 | } lock(&envalloc); | |
| 1991/0427/sys/src/9/port/devenv.c:491,497 – 1991/0705/sys/src/9/port/devenv.c:491,497 | ||
| 1990/0227 | if(waserror()){ unlock(e); unlock(&envalloc); | |
| 1991/0705 | unlock(eg); | |
| 1990/0227 | nexterror(); } if(e->pgref>1) | |
| 1991/0427/sys/src/9/port/devenv.c:506,512 – 1991/0705/sys/src/9/port/devenv.c:506,512 | ||
| 1990/0227 | poperror(); unlock(e); unlock(&envalloc); | |
| 1991/0705 | unlock(eg); | |
| 1990/0227 | return n; } | |
| 1991/0427/sys/src/9/port/devenv.c:516,527 – 1991/0705/sys/src/9/port/devenv.c:516,527 | ||
| 1990/0227 | Env *e; Envp *ep; Envval *ev; | |
| 1991/0705 | Egrp *eg; | |
| 1990/0227 | int i; char hold; | |
| 1991/0705 | eg = u->p->egrp; for(ep=eg->etab, i=0; i<eg->nenv; i++, ep++) | |
| 1990/0227 | print("P%d(%lux %d)",i, ep->env, ep->chref); for(e=envalloc.earena; e<&envalloc.earena[conf.nenv]; e++) if(e->pgref){ | |