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.
This commit is contained in:
cinap_lenrek 2017-05-07 18:13:37 +02:00
parent 37567f07d1
commit 7327bd43c0

View file

@ -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);