summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2019-09-04 02:44:39 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2019-09-04 02:44:39 +0200
commit0cb4115b8234946b5468f3f0fe29d4c6a94f1026 (patch)
tree356cdc72530934939e3147e4849b2fe2dc6ea87b
parent4088f72903121c5b39cd5ce9445b2fdb2783c4c1 (diff)
kernel: get rid of tmperrbuf and use syserrstr swapping instead in namec()
-rw-r--r--sys/src/9/port/chan.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/sys/src/9/port/chan.c b/sys/src/9/port/chan.c
index 1d539912c..cce88ba3e 100644
--- a/sys/src/9/port/chan.c
+++ b/sys/src/9/port/chan.c
@@ -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;