summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-08-06 10:15:07 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2015-08-06 10:15:07 +0200
commit86eb8ea6bbbf031d71cf0fa58f468cd3ddc4e7f3 (patch)
treed1bce67f94620239e83258e7cc040b13702aac77 /sys/src
parent8d196aeec728fea0450c0b42db114127e85d64e0 (diff)
kernel: change vmemchr() length argument to ulong and simplify
Diffstat (limited to 'sys/src')
-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));