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

front
cinap_lenrek 2019-09-04 02:44:39 +02:00
parent 4088f72903
commit 0cb4115b82
1 changed files with 14 additions and 10 deletions

View File

@ -1283,7 +1283,7 @@ namec(char *aname, int amode, int omode, ulong perm)
Elemlist e;
Rune r;
Mhead *m;
char *createerr, tmperrbuf[ERRMAX];
char *err;
char *name;
if(aname[0] == '\0')
@ -1360,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);
}
/*
@ -1584,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;