diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-02-02 05:47:13 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-02-02 05:47:13 +0100 |
commit | a6fd3cc8e3db0a5c813ccbdc76f9d2259ef37941 (patch) | |
tree | cef3a48342ccf0668e8d8e58ed76a3a2baa54ee4 /sys/src/libc | |
parent | e289fd8ccdfb081f16f02a025e53421aab7f90b7 (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.c | 12 |
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); |