summaryrefslogtreecommitdiff
path: root/sys/src/libc
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-02-02 05:47:13 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2014-02-02 05:47:13 +0100
commita6fd3cc8e3db0a5c813ccbdc76f9d2259ef37941 (patch)
treecef3a48342ccf0668e8d8e58ed76a3a2baa54ee4 /sys/src/libc
parente289fd8ccdfb081f16f02a025e53421aab7f90b7 (diff)
mallocalign: make sure alignptr offset is modulo align when -offset > align
Diffstat (limited to 'sys/src/libc')
-rw-r--r--sys/src/libc/port/pool.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/src/libc/port/pool.c b/sys/src/libc/port/pool.c
index 5069a619b..1f9b26a64 100644
--- a/sys/src/libc/port/pool.c
+++ b/sys/src/libc/port/pool.c
@@ -1042,11 +1042,12 @@ alignptr(void *v, ulong align, long offset)
c = v;
if(align){
- off = (uintptr)c%align;
+ off = ((ulong)(uintptr)c) % align;
if(off != offset){
- c += offset - off;
- if(off > offset)
- c += align;
+ offset -= off;
+ if(offset < 0)
+ offset += align;
+ c += offset;
}
}
return c;
@@ -1080,8 +1081,7 @@ poolallocalignl(Pool *p, ulong dsize, ulong align, long offset, ulong span)
if(align){
if(offset < 0)
offset = align - ((-offset)%align);
- else
- offset %= align;
+ offset %= align;
}
asize = dsize+align;
v = poolallocl(p, asize);