summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/9/port/fault.c12
-rw-r--r--sys/src/9/port/portfns.h2
-rw-r--r--sys/src/9/port/syscallfmt.c2
-rw-r--r--sys/src/9/port/sysproc.c2
4 files changed, 10 insertions, 8 deletions
diff --git a/sys/src/9/port/fault.c b/sys/src/9/port/fault.c
index 6565c670a..00c905b8c 100644
--- a/sys/src/9/port/fault.c
+++ b/sys/src/9/port/fault.c
@@ -332,18 +332,20 @@ validaddr(uintptr addr, ulong len, int write)
* &s[0] is known to be a valid address.
*/
void*
-vmemchr(void *s, int c, int n)
+vmemchr(void *s, int c, ulong n)
{
- int m;
uintptr a;
+ ulong m;
void *t;
a = (uintptr)s;
- while(PGROUND(a) != PGROUND(a+n-1)){
- /* spans pages; handle this page */
+ for(;;){
m = BY2PG - (a & (BY2PG-1));
+ if(n <= m)
+ break;
+ /* spans pages; handle this page */
t = memchr((void*)a, c, m);
- if(t)
+ if(t != nil)
return t;
a += m;
n -= m;
diff --git a/sys/src/9/port/portfns.h b/sys/src/9/port/portfns.h
index 15ca191a3..6ca7a54ba 100644
--- a/sys/src/9/port/portfns.h
+++ b/sys/src/9/port/portfns.h
@@ -368,7 +368,7 @@ void validaddr(uintptr, ulong, int);
void validname(char*, int);
char* validnamedup(char*, int);
void validstat(uchar*, int);
-void* vmemchr(void*, int, int);
+void* vmemchr(void*, int, ulong);
Proc* wakeup(Rendez*);
int walk(Chan**, char**, int, int, int*);
void wlock(RWlock*);
diff --git a/sys/src/9/port/syscallfmt.c b/sys/src/9/port/syscallfmt.c
index 224f70b82..12610c866 100644
--- a/sys/src/9/port/syscallfmt.c
+++ b/sys/src/9/port/syscallfmt.c
@@ -44,7 +44,7 @@ fmtuserstring(Fmt* f, char* a, char* suffix)
return;
}
validaddr((uintptr)a, 1, 0);
- n = ((char*)vmemchr(a, 0, 0x7fffffff) - a) + 1;
+ n = ((char*)vmemchr(a, 0, ~0) - a) + 1;
t = smalloc(n+1);
memmove(t, a, n);
t[n] = 0;
diff --git a/sys/src/9/port/sysproc.c b/sys/src/9/port/sysproc.c
index e755bcf5a..597398cb9 100644
--- a/sys/src/9/port/sysproc.c
+++ b/sys/src/9/port/sysproc.c
@@ -390,7 +390,7 @@ sysexec(va_list list)
if(((uintptr)argp&(BY2PG-1)) < BY2WD)
validaddr((uintptr)argp, BY2WD, 0);
validaddr((uintptr)a, 1, 0);
- nbytes += ((char*)vmemchr(a, 0, 0x7FFFFFFF) - a) + 1;
+ nbytes += ((char*)vmemchr(a, 0, ~0) - a) + 1;
nargs++;
}
ssize = BY2WD*(nargs+1) + ((nbytes+(BY2WD-1)) & ~(BY2WD-1));