X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=sys%2Fsrc%2F9%2Fport%2Fchan.c;h=cce88ba3e4d6c1e21fa9c7e10782d15fa5c2a32f;hb=a609c1a2f8d58d21727c13970725445ce4d2f6fa;hp=77bc9951dc376619be0f963c23ddd460deeb5856;hpb=7327bd43c039d0ce2f4052afac04204718d9e69c;p=plan9front.git diff --git a/sys/src/9/port/chan.c b/sys/src/9/port/chan.c index 77bc9951d..cce88ba3e 100644 --- a/sys/src/9/port/chan.c +++ b/sys/src/9/port/chan.c @@ -1277,12 +1277,13 @@ Chan* namec(char *aname, int amode, int omode, ulong perm) { int len, n, t, nomount; - Chan *c, *cnew; - Path *path; + Chan *c; + Chan *volatile cnew; + Path *volatile path; Elemlist e; Rune r; Mhead *m; - char *createerr, tmperrbuf[ERRMAX]; + char *err; char *name; if(aname[0] == '\0') @@ -1359,13 +1360,15 @@ namec(char *aname, int amode, int omode, ulong perm) */ if(e.nerror == 0) nexterror(); - strcpy(tmperrbuf, up->errstr); if(e.off[e.nerror]==0) print("nerror=%d but off=%d\n", e.nerror, e.off[e.nerror]); len = e.prefix+e.off[e.nerror]; free(e.off); - namelenerror(aname, len, tmperrbuf); + err = up->errstr; + up->errstr = up->syserrstr; + up->syserrstr = err; + namelenerror(aname, len, err); } /* @@ -1583,14 +1586,16 @@ namec(char *aname, int amode, int omode, ulong perm) if(omode & OEXCL) nexterror(); /* save error */ - createerr = up->errstr; - up->errstr = tmperrbuf; + err = up->errstr; + up->errstr = up->syserrstr; + up->syserrstr = err; /* note: we depend that walk does not error */ - if(walk(&c, e.elems+e.nelems-1, 1, nomount, nil) < 0){ - up->errstr = createerr; - error(createerr); /* report true error */ - } - up->errstr = createerr; + if(walk(&c, e.elems+e.nelems-1, 1, nomount, nil) < 0) + error(err); /* report true error */ + /* restore error */ + err = up->syserrstr; + up->syserrstr = up->errstr; + up->errstr = err; omode |= OTRUNC; goto Open;