fix listen on /net.alt Reference: /n/atom/patch/applied2013/xlistennetalt Date: Sun Nov 17 04:06:44 CET 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/aux/xlisten.c Sun Nov 17 04:06:39 2013 +++ /sys/src/cmd/aux/xlisten.c Sun Nov 17 04:06:40 2013 @@ -59,7 +59,8 @@ uvlong length; Ldir *largs; - char *ds; /* dial string */ + char *es; /* exec string */ + char *ds; /* dial string (dial string plus netdir) */ char *proto; int mark; @@ -253,11 +254,11 @@ for(fd = 3; fd < 20; fd++) close(fd); if(Breakexec) - snprint(path, sizeof path, "x%s/%s", l->largs->srv, l->ds); /* broken on purpose */ + snprint(path, sizeof path, "x%s/%s", l->largs->srv, l->es); /* broken on purpose */ else - snprint(path, sizeof path, "%s/%s", l->largs->srv, l->ds); - procexecl(l->pidchan, path, l->ds, l->largs->srv, l->proto, i->cdir, nil); - llog("%s: exec fails: %r", l->ds); + snprint(path, sizeof path, "%s/%s", l->largs->srv, l->es); + procexecl(l->pidchan, path, l->es, l->largs->srv, l->proto, i->cdir, nil); + llog("%s: exec fails: %r", path); /* we can't reject this because we closed the channel already */ threadexits("exec: %r"); @@ -276,7 +277,7 @@ i = recvp(l->incalls); if(i == nil) return -1; - print("%s: recvp %d\n", l->ds, i->slot); + print("%s: recvp slot %d\n", l->ds, i->slot); i->pid = Unset; redux: @@ -397,6 +398,7 @@ freeserver(Listen *l) { cleanserver(l); + free(l->es); free(l->ds); free(l->proto); free(l); @@ -475,14 +477,15 @@ del = 1; for(xx = head; x = *xx; xx = &x->next) - if(strcmp(x->ds, d[i].name) == 0) + if(strcmp(x->es, d[i].name) == 0) break; if(x != nil) x->mark = del; if(x == nil && !del){ x = *xx = malloc(sizeof *x); memset(x, 0, sizeof *x); - x->ds = strdup(d[i].name); + x->es = strdup(d[i].name); + x->ds = smprint("%s/%s", l->netdir, d[i].name); x->proto = strdup(d[i].name); if((s = strchr(x->proto, '!')) != nil) *s = 0;