void *acl_default_realloc(const char *filename, int line, void *ptr, size_t len) { const char *myname = "acl_default_realloc"; MBLOCK *real_ptr; size_t old_len, new_len; const char *pname = NULL; if (filename && *filename) SET_FILE(pname, filename); else pname = __FILENAME_UNKNOWN; #ifndef NO_SHARED_EMPTY_STRINGS if (ptr == empty_string) return acl_default_malloc(pname, line, len); #endif if (len < 1) { acl_msg_warn("%s(%d)->%s: realloc: requested length %ld", pname, line, myname, (long) len); len = 128; } if (ptr == NULL) return acl_default_malloc(pname, line, len); CHECK_IN_PTR(ptr, real_ptr, old_len, pname, line); new_len = SPACE_FOR(len); if (new_len <= 0) acl_msg_fatal("%s(%d): new_len(%d) <= 0", myname, __LINE__, (int) new_len); else if (new_len >= __malloc_limit) { acl_msg_warn("%s(%d): new_len(%d) too large", myname, __LINE__, (int) new_len); } #ifdef _USE_GLIB if ((real_ptr = (MBLOCK *) g_realloc((char *) real_ptr, new_len)) == 0) acl_msg_fatal("%s(%d)->%s: realloc: insufficient memory: %s", pname, line, myname, strerror(errno)); #else if ((real_ptr = (MBLOCK *) realloc((char *) real_ptr, new_len)) == 0) acl_msg_fatal("%s(%d)->%s: realloc: insufficient memory: %s", pname, line, myname, strerror(errno)); #endif CHECK_OUT_PTR(ptr, real_ptr, len); #if 0 if (len > old_len) memset((char *) ptr + old_len, FILLER, len - old_len); #endif return ptr; }
char *acl_default_strndup(const char *filename, int line, const char *str, size_t len) { const char *myname = "acl_default_strndup"; char *result; char *cp; const char *pname = NULL; if (filename && *filename) SET_FILE(pname, filename); else pname = __FILENAME_UNKNOWN; if (str == 0) acl_msg_fatal("%s(%d)->%s: null pointer argument", pname, line, myname); #ifndef NO_SHARED_EMPTY_STRINGS if (*str == 0) return ((char *) empty_string); #endif if ((cp = memchr(str, 0, len)) != 0) len = cp - str; result = memcpy(acl_default_malloc(pname, line, len + 1), str, len); result[len] = 0; return (result); }
void *acl_default_calloc(const char *filename, int line, size_t nmemb, size_t size) { void *ptr; int n; n = nmemb * size; ptr = acl_default_malloc(filename, line, n); memset(ptr, FILLER, n); return (ptr); }
static void slice3_mbuf_alloc(ACL_SLICE *slice) { #ifdef _LP64 const char *myname = "slice3_mbuf_alloc"; #endif SLICE3 *slice3 = (SLICE3*) slice; MBUF3 *mbuf; int i, incr_real = 0, n; char *ptr; mbuf = (MBUF3*) acl_default_malloc(__FILE__, __LINE__, slice->page_size); mbuf->mbuf.slice = slice; mbuf->mbuf.nused = 0; mbuf->mbuf.signature = SIGNATURE; ptr = mbuf->payload; slice->nalloc++; mbuf->mslots.slots = NULL; n = slice->page_nslots; MBUF_SLOTS_SPACE(slice, &mbuf->mslots, n, incr_real); acl_assert(mbuf->mslots.islots == 0); for (i = 0; i < slice->page_nslots; i++) { ptr += SLICE3_HEAD_SIZE; #ifdef _LP64 if ((slice->flag & ACL_SLICE_FLAG_LP64_ALIGN) && ((uintptr_t)ptr & 0x7) != 0) /* just for AVL */ { acl_msg_fatal("%s(%d): %s, ptr(%lx) invalid", myname, __LINE__, slice->name, (long) ptr); } #endif *((int*) (ptr - SLICE_OFF_SIZE)) = (int) (ptr - (char*) mbuf); mbuf->mslots.slots[mbuf->mslots.islots++] = ptr; ptr += slice->slice_length; } for (i = slice->page_nslots; i < incr_real; i++) mbuf->mslots.slots[i] = NULL; SLICE_MBUF_SPACE(slice3, 1, incr_real, MBUF3); for (i = slice->nbuf; i < slice3->capacity; i++) slice3->mbufs[i] = NULL; slice3->mbufs[slice->nbuf] = mbuf; mbuf->ibuf = slice->nbuf; slice->nbuf++; slice->length += slice->page_size + sizeof(void*) * slice->page_nslots; }
void *acl_default_memdup(const char *filename, int line, const void *ptr, size_t len) { const char *myname = "acl_default_memdup"; const char *pname = NULL; if (filename && *filename) SET_FILE(pname, filename); else pname = __FILENAME_UNKNOWN; if (ptr == 0) acl_msg_fatal("%s(%d)->%s: null pointer argument", pname, line, myname); return (memcpy(acl_default_malloc(pname, line, len), ptr, len)); }
char *acl_default_strdup(const char *filename, int line, const char *str) { const char *myname = "acl_default_strdup"; const char *pname = NULL; if (filename && *filename) SET_FILE(pname, filename); else pname = __FILENAME_UNKNOWN; if (str == 0) acl_msg_fatal("%s(%d)->%s: null pointer argument", pname, line, myname); #ifndef NO_SHARED_EMPTY_STRINGS if (*str == 0) return ((char *) empty_string); #endif return (strcpy(acl_default_malloc(pname, line, strlen(str) + 1), str)); }