diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-05-07 18:13:37 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-05-07 18:13:37 +0200 |
commit | 7327bd43c039d0ce2f4052afac04204718d9e69c (patch) | |
tree | c31fb104c7d23c41ff3b6f1e427c1dd4a2b712c1 /sys/src/9/port/chan.c | |
parent | 37567f07d18aa69824d41dca45ecdbd46e583f2a (diff) |
kernel: fix namelenerror(), avoid memrchr() and make it static
make sure the loop terminates and doesnt get stuck at
name == aname. avoid memrchr() as it conflicts with
libc on unix (drawterm). declare namelenerror() as
static.
Diffstat (limited to 'sys/src/9/port/chan.c')
-rw-r--r-- | sys/src/9/port/chan.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/sys/src/9/port/chan.c b/sys/src/9/port/chan.c index 24eb72d70..77bc9951d 100644 --- a/sys/src/9/port/chan.c +++ b/sys/src/9/port/chan.c @@ -1204,19 +1204,7 @@ parsename(char *aname, Elemlist *e) } } -void* -memrchr(void *va, int c, long n) -{ - uchar *a, *e; - - a = va; - for(e=a+n-1; e>a; e--) - if(*e == c) - return e; - return nil; -} - -void +static void namelenerror(char *aname, int len, char *err) { char *ename, *name, *next; @@ -1237,9 +1225,11 @@ namelenerror(char *aname, int len, char *err) next = ename; do{ name = next; - next = memrchr(aname, '/', name-aname); - if(next == nil) - next = aname; + if(next == aname) + break; + while(next > aname) + if(*--next == '/') + break; len = ename-next; }while(len < ERRMAX/3 || len + errlen < 2*ERRMAX/3); |