ref: 7327bd43c039d0ce2f4052afac04204718d9e69c
parent: 37567f07d18aa69824d41dca45ecdbd46e583f2a
author: cinap_lenrek <[email protected]>
date: Sun May 7 14:13:37 EDT 2017
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.
--- a/sys/src/9/port/chan.c
+++ b/sys/src/9/port/chan.c
@@ -1204,19 +1204,7 @@
}
}
-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 @@
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);