kernel: get rid of tmperrbuf and use syserrstr swapping instead in namec()

This commit is contained in:
cinap_lenrek 2019-09-04 02:44:39 +02:00
parent 4088f72903
commit 0cb4115b82

View file

@ -1283,7 +1283,7 @@ namec(char *aname, int amode, int omode, ulong perm)
Elemlist e; Elemlist e;
Rune r; Rune r;
Mhead *m; Mhead *m;
char *createerr, tmperrbuf[ERRMAX]; char *err;
char *name; char *name;
if(aname[0] == '\0') if(aname[0] == '\0')
@ -1360,13 +1360,15 @@ namec(char *aname, int amode, int omode, ulong perm)
*/ */
if(e.nerror == 0) if(e.nerror == 0)
nexterror(); nexterror();
strcpy(tmperrbuf, up->errstr);
if(e.off[e.nerror]==0) if(e.off[e.nerror]==0)
print("nerror=%d but off=%d\n", print("nerror=%d but off=%d\n",
e.nerror, e.off[e.nerror]); e.nerror, e.off[e.nerror]);
len = e.prefix+e.off[e.nerror]; len = e.prefix+e.off[e.nerror];
free(e.off); free(e.off);
namelenerror(aname, len, tmperrbuf); err = up->errstr;
up->errstr = up->syserrstr;
up->syserrstr = err;
namelenerror(aname, len, err);
} }
/* /*
@ -1584,14 +1586,16 @@ namec(char *aname, int amode, int omode, ulong perm)
if(omode & OEXCL) if(omode & OEXCL)
nexterror(); nexterror();
/* save error */ /* save error */
createerr = up->errstr; err = up->errstr;
up->errstr = tmperrbuf; up->errstr = up->syserrstr;
up->syserrstr = err;
/* note: we depend that walk does not error */ /* note: we depend that walk does not error */
if(walk(&c, e.elems+e.nelems-1, 1, nomount, nil) < 0){ if(walk(&c, e.elems+e.nelems-1, 1, nomount, nil) < 0)
up->errstr = createerr; error(err); /* report true error */
error(createerr); /* report true error */ /* restore error */
} err = up->syserrstr;
up->errstr = createerr; up->syserrstr = up->errstr;
up->errstr = err;
omode |= OTRUNC; omode |= OTRUNC;
goto Open; goto Open;