diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-08-06 10:15:07 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-08-06 10:15:07 +0200 |
commit | 86eb8ea6bbbf031d71cf0fa58f468cd3ddc4e7f3 (patch) | |
tree | d1bce67f94620239e83258e7cc040b13702aac77 /sys/src | |
parent | 8d196aeec728fea0450c0b42db114127e85d64e0 (diff) |
kernel: change vmemchr() length argument to ulong and simplify
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/9/port/fault.c | 12 | ||||
-rw-r--r-- | sys/src/9/port/portfns.h | 2 | ||||
-rw-r--r-- | sys/src/9/port/syscallfmt.c | 2 | ||||
-rw-r--r-- | sys/src/9/port/sysproc.c | 2 |
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)); |