00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <stdlib.h>
00018 #include <errno.h>
00019
00020 #include "mem.h"
00021 #include "mem_internal.h"
00022
00023 void *mem_realloc(void *s, int n)
00024 {
00025 if (!s) {
00026 if (n > 0)
00027 return mem_alloc(n);
00028 else
00029 return NULL;
00030 }
00031
00032 else if (n < 1) {
00033 mem_free(s);
00034 return NULL;
00035 }
00036
00037 _mem_pool_t *p;
00038
00039 mem_for_each(_mem_pool, p)
00040 if (p->mem == s)
00041 break;
00042
00043 if (p->mem != s) {
00044 errno = EINVAL;
00045 return NULL;
00046 }
00047
00048 char *m = realloc(p->mem, n);
00049
00050 if (!m)
00051 return NULL;
00052
00053 p->mem = m;
00054
00055 if (n > p->len)
00056 mem_set(m + p->len, 0, n - p->len);
00057
00058 p->len = n;
00059
00060 return p->mem;
00061 }