summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdlib
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2003-09-27 18:58:26 +0000
committerphk <phk@FreeBSD.org>2003-09-27 18:58:26 +0000
commit732b6aad5c017a0c1a6e430e45f6cd204f9d74a5 (patch)
treef9c624e8826f8c2fb106cb69d7c63a07889a87bf /lib/libc/stdlib
parenta461eb4d508fd373f0074c5c4adde3eb5e36f2ce (diff)
downloadFreeBSD-src-732b6aad5c017a0c1a6e430e45f6cd204f9d74a5.zip
FreeBSD-src-732b6aad5c017a0c1a6e430e45f6cd204f9d74a5.tar.gz
More style fixes to improve diffability with OpenBSD.
Pull 'A' evilness for realloc(3) from OpenBSD.
Diffstat (limited to 'lib/libc/stdlib')
-rw-r--r--lib/libc/stdlib/malloc.c100
1 files changed, 54 insertions, 46 deletions
diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c
index ab171a1..150cf97 100644
--- a/lib/libc/stdlib/malloc.c
+++ b/lib/libc/stdlib/malloc.c
@@ -439,7 +439,7 @@ malloc_init ()
} else {
p = _malloc_options;
}
- for (; p && *p; p++) {
+ for (; p != NULL && *p != '\0'; p++) {
switch (*p) {
case '>': malloc_cache <<= 1; break;
case '<': malloc_cache >>= 1; break;
@@ -509,6 +509,9 @@ malloc_init ()
malloc_ninfo = malloc_pagesize / sizeof *page_dir;
+ /* Been here, done that */
+ malloc_started++;
+
/* Recalculate the cache size in bytes, and make sure it's nonzero */
if (!malloc_cache)
@@ -521,9 +524,6 @@ malloc_init ()
* We can sbrk(2) further back when we keep this on a low address.
*/
px = (struct pgfree *) imalloc (sizeof *px);
-
- /* Been here, done that */
- malloc_started++;
}
/*
@@ -532,14 +532,14 @@ malloc_init ()
static void *
malloc_pages(size_t size)
{
- void *p, *delay_free = 0;
+ void *p, *delay_free = NULL;
size_t i;
struct pgfree *pf;
u_long index;
size = pageround(size);
- p = 0;
+ p = NULL;
/* Look for free pages before asking for more */
for(pf = free_list.next; pf; pf = pf->next) {
@@ -566,7 +566,7 @@ malloc_pages(size_t size)
if (pf->size == size) {
p = pf->page;
- if (pf->next)
+ if (pf->next != NULL)
pf->next->prev = pf->prev;
pf->prev->next = pf->next;
delay_free = pf;
@@ -580,17 +580,17 @@ malloc_pages(size_t size)
}
#ifdef MALLOC_EXTRA_SANITY
- if (p && page_dir[ptr2index(p)] != MALLOC_FREE)
+ if (p != NULL && page_dir[ptr2index(p)] != MALLOC_FREE)
wrterror("(ES): allocated non-free page on free-list.\n");
#endif /* MALLOC_EXTRA_SANITY */
size >>= malloc_pageshift;
/* Map new pages */
- if (!p)
+ if (p == NULL)
p = map_pages(size);
- if (p) {
+ if (p != NULL) {
index = ptr2index(p);
page_dir[index] = MALLOC_FIRST;
@@ -602,7 +602,7 @@ malloc_pages(size_t size)
}
if (delay_free) {
- if (!px)
+ if (px == NULL)
px = delay_free;
else
ifree(delay_free);
@@ -624,7 +624,7 @@ malloc_make_chunks(int bits)
/* Allocate a new bucket */
pp = malloc_pages(malloc_pagesize);
- if (!pp)
+ if (pp == NULL)
return (0);
/* Find length of admin structure */
@@ -637,7 +637,7 @@ malloc_make_chunks(int bits)
bp = (struct pginfo *)pp;
} else {
bp = (struct pginfo *)imalloc(l);
- if (!bp) {
+ if (bp == NULL) {
ifree(pp);
return (0);
}
@@ -704,7 +704,7 @@ malloc_bytes(size_t size)
j++;
/* If it's empty, make a page more of that size chunks */
- if (!page_dir[j] && !malloc_make_chunks(j))
+ if (page_dir[j] == NULL && !malloc_make_chunks(j))
return (NULL);
bp = page_dir[j];
@@ -725,7 +725,7 @@ malloc_bytes(size_t size)
/* If there are no more free, remove from free-list */
if (!--bp->free) {
page_dir[j] = bp->next;
- bp->next = 0;
+ bp->next = NULL;
}
/* Adjust to the real offset of that chunk */
@@ -746,6 +746,9 @@ imalloc(size_t size)
{
void *result;
+ if (!malloc_started)
+ malloc_init();
+
if (suicide)
abort();
@@ -758,6 +761,9 @@ imalloc(size_t size)
else
result = malloc_pages(size);
+ if (malloc_abort && result == NULL)
+ wrterror("allocation failed.\n");
+
if (malloc_zero && result != NULL)
memset(result, 0, size);
@@ -778,6 +784,11 @@ irealloc(void *ptr, size_t size)
if (suicide)
abort();
+ if (!malloc_started) {
+ wrtwarning("malloc() has never been called.\n");
+ return (NULL);
+ }
+
index = ptr2index(ptr);
if (index < malloc_pageshift) {
@@ -801,12 +812,14 @@ irealloc(void *ptr, size_t size)
}
/* Find the size in bytes */
- for (osize = malloc_pagesize; *++mp == MALLOC_FOLLOW;)
+ for (osize = malloc_pagesize; *(++mp) == MALLOC_FOLLOW;)
osize += malloc_pagesize;
- if (!malloc_realloc && /* unless we have to, */
+ if (!malloc_realloc && /* Unless we have to, */
size <= osize && /* .. or are too small, */
size > (osize - malloc_pagesize)) { /* .. or can free a page, */
+ if (malloc_junk)
+ memset((char *)ptr + size, SOME_JUNK, osize-size);
return (ptr); /* ..don't do anything else. */
}
@@ -830,9 +843,11 @@ irealloc(void *ptr, size_t size)
osize = (*mp)->size;
if (!malloc_realloc && /* Unless we have to, */
- size < osize && /* ..or are too small, */
+ size <= osize && /* ..or are too small, */
(size > osize/2 || /* ..or could use a smaller size, */
osize == malloc_minsize)) { /* ..(if there is one) */
+ if (malloc_junk)
+ memset((char *)ptr + size, SOME_JUNK, osize-size);
return (ptr); /* ..don't do anything else. */
}
@@ -843,7 +858,7 @@ irealloc(void *ptr, size_t size)
p = imalloc(size);
- if (p) {
+ if (p != NULL) {
/* copy the lesser of the two sizes, and free the old one */
if (!size || !osize)
;
@@ -864,7 +879,7 @@ static __inline__ void
free_pages(void *ptr, u_long index, struct pginfo const *info)
{
u_long i;
- struct pgfree *pf, *pt=0;
+ struct pgfree *pf, *pt=NULL;
u_long l;
void *tail;
@@ -899,26 +914,27 @@ free_pages(void *ptr, u_long index, struct pginfo const *info)
tail = (char *)ptr+l;
/* add to free-list */
- if (!px)
- px = imalloc(sizeof *pt); /* This cannot fail... */
+ if (px == NULL)
+ px = imalloc(sizeof *px); /* This cannot fail... */
px->page = ptr;
px->end = tail;
px->size = l;
- if (!free_list.next) {
+ if (free_list.next == NULL) {
/* Nothing on free list, put this at head */
px->next = free_list.next;
px->prev = &free_list;
free_list.next = px;
pf = px;
- px = 0;
+ px = NULL;
} else {
/* Find the right spot, leave pf pointing to the modified entry. */
tail = (char *)ptr+l;
- for(pf = free_list.next; pf->end < ptr && pf->next; pf = pf->next)
+ for(pf = free_list.next; pf->end < ptr && pf->next != NULL;
+ pf = pf->next)
; /* Race ahead here */
if (pf->page > tail) {
@@ -928,38 +944,38 @@ free_pages(void *ptr, u_long index, struct pginfo const *info)
pf->prev = px;
px->prev->next = px;
pf = px;
- px = 0;
+ px = NULL;
} else if (pf->end == ptr ) {
/* Append to the previous entry */
pf->end = (char *)pf->end + l;
pf->size += l;
- if (pf->next && pf->end == pf->next->page ) {
+ if (pf->next != NULL && pf->end == pf->next->page ) {
/* And collapse the next too. */
pt = pf->next;
pf->end = pt->end;
pf->size += pt->size;
pf->next = pt->next;
- if (pf->next)
+ if (pf->next != NULL)
pf->next->prev = pf;
}
} else if (pf->page == tail) {
/* Prepend to entry */
pf->size += l;
pf->page = ptr;
- } else if (!pf->next) {
+ } else if (pf->next == NULL) {
/* Append at tail of chain */
- px->next = 0;
+ px->next = NULL;
px->prev = pf;
pf->next = px;
pf = px;
- px = 0;
+ px = NULL;
} else {
wrterror("freelist is destroyed.\n");
}
}
/* Return something to OS ? */
- if (!pf->next && /* If we're the last one, */
+ if (pf->next == NULL && /* If we're the last one, */
pf->size > malloc_cache && /* ..and the cache is full, */
pf->end == malloc_brk && /* ..and none behind us, */
malloc_brk == sbrk(0)) { /* ..and it's OK to do... */
@@ -983,7 +999,7 @@ free_pages(void *ptr, u_long index, struct pginfo const *info)
/* XXX: We could realloc/shrink the pagedir here I guess. */
}
- if (pt)
+ if (pt != NULL)
ifree(pt);
}
@@ -1060,7 +1076,7 @@ ifree(void *ptr)
u_long index;
/* This is legal */
- if (!ptr)
+ if (ptr == NULL)
return;
if (!malloc_started) {
@@ -1112,10 +1128,8 @@ malloc(size_t size)
errno = EDOOFUS;
return (NULL);
}
- if (!malloc_started)
- malloc_init();
if (malloc_sysv && !size)
- r = 0;
+ r = NULL;
else if (!size)
r = ZEROSIZEPTR;
else
@@ -1123,9 +1137,9 @@ malloc(size_t size)
UTRACE(0, size, r);
malloc_active--;
_MALLOC_UNLOCK();
- if (malloc_xmalloc && !r)
+ if (malloc_xmalloc && r == NULL)
wrterror("out of memory.\n");
- if (!r)
+ if (r == NULL)
errno = ENOMEM;
return (r);
}
@@ -1165,12 +1179,6 @@ realloc(void *ptr, size_t size)
errno = EDOOFUS;
return (NULL);
}
- if (ptr && !malloc_started) {
- wrtwarning("malloc() has never been called.\n");
- ptr = 0;
- }
- if (!malloc_started)
- malloc_init();
if (ptr == ZEROSIZEPTR)
ptr = NULL;
if (malloc_sysv && !size) {
@@ -1179,7 +1187,7 @@ realloc(void *ptr, size_t size)
} else if (!size) {
ifree(ptr);
r = ZEROSIZEPTR;
- } else if (!ptr) {
+ } else if (ptr == NULL) {
r = imalloc(size);
err = (r == NULL);
} else {
OpenPOWER on IntegriCloud