--- mem_align.c 2002/03/20 00:27:57 1.2 +++ mem_align.c 2002/03/21 00:28:33 1.3 @@ -4,35 +4,37 @@ void *xvid_malloc(size_t size, uint8_t alignment) { - uint8_t *mem_ptr; + uint8_t *mem_ptr; - if(alignment == 0) - { - if((mem_ptr = (uint8_t *) malloc(size + 1)) != NULL) { - *mem_ptr = 0; - return (void *) mem_ptr++; - } - } - else - { - uint8_t *tmp; + if(alignment == 0) + { + if((mem_ptr = (uint8_t *) malloc(size + 1)) != NULL) { + *mem_ptr = 0; + return (void *) mem_ptr++; + } + } + else + { + uint8_t *tmp; - if((tmp = (uint8_t *) malloc(size + alignment)) != NULL) { - mem_ptr = (uint8_t *) (((uint32_t) tmp / alignment) * alignment + alignment); - *(mem_ptr - 1) = (alignment - 1) - ((uint32_t) tmp % alignment); - return (void *) mem_ptr; - } - } + if((tmp = (uint8_t *) malloc(size + alignment)) != NULL) { + mem_ptr = (uint8_t *)((uint32_t)(tmp + alignment - 1)&(~(uint32_t)(alignment - 1))); + *(mem_ptr - 1) = (uint8_t)(mem_ptr - tmp); + return (void *) mem_ptr; + } + } + + return NULL; - return NULL; } void xvid_free(void *mem_ptr) { - uint8_t *tmp; - tmp = (uint8_t *) mem_ptr - 1; - mem_ptr = tmp - *tmp; + uint8_t *real_ptr; + + real_ptr = (uint8_t*)mem_ptr; + + free(real_ptr - *(real_ptr -1)); - free(mem_ptr); }