static struct varent * madrof(Char *pat, struct varent *vp) { struct varent *vp1; for (vp = vp->v_left; vp; vp = vp->v_right) { if (vp->v_left && (vp1 = madrof(pat, vp)) != NULL) return vp1; if (Gmatch(vp->v_name, pat)) return vp; } return vp; }
void unset1(Char *v[], struct varent *head) { struct varent *vp; int cnt; while (*++v) { cnt = 0; while ((vp = madrof(*v, head->v_left)) != NULL) unsetv1(vp), cnt++; if (cnt == 0) setname(vis_str(*v)); } }
void unset1(Char *v[], struct varent *head) { struct varent *vp; int cnt; while (*++v) { cnt = 0; while ((vp = madrof(*v, head)) != NULL) if (vp->v_flags & VAR_READONLY) stderror(ERR_READONLY|ERR_NAME, vp->v_name); else unsetv1(vp), cnt++; if (cnt == 0) setname(short2str(*v)); } }