aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/stdlib
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>2002-08-09 10:16:24 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>2002-08-09 10:16:24 +0000
commitf42f7c54c87916f22e22e03055bcf5ef9836cf92 (patch)
tree9e6c76055bc8308c6d09279f18ad60408daf163a /lib/libc/stdlib
parent9d6d1ee63ea463c4098f40ab21fd26ee9f64827c (diff)
downloadsrc-f42f7c54c87916f22e22e03055bcf5ef9836cf92.tar.gz
src-f42f7c54c87916f22e22e03055bcf5ef9836cf92.zip
Make sure we set errno sensibly in case of failure.
Spotted by: ache
Notes
Notes: svn path=/head/; revision=101568
Diffstat (limited to 'lib/libc/stdlib')
-rw-r--r--lib/libc/stdlib/malloc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c
index 3bf29322e9a7..d97e87241df6 100644
--- a/lib/libc/stdlib/malloc.c
+++ b/lib/libc/stdlib/malloc.c
@@ -1093,6 +1093,7 @@ malloc(size_t size)
wrtwarning("recursive call\n");
malloc_active--;
THREAD_UNLOCK();
+ errno = EDOFUS;
return (0);
}
if (!malloc_started)
@@ -1108,6 +1109,8 @@ malloc(size_t size)
THREAD_UNLOCK();
if (malloc_xmalloc && !r)
wrterror("out of memory\n");
+ if (!r)
+ errno = ENOMEM;
return (r);
}
@@ -1120,6 +1123,7 @@ free(void *ptr)
wrtwarning("recursive call\n");
malloc_active--;
THREAD_UNLOCK();
+ errno = EDOFUS;
return;
}
if (ptr != ZEROSIZEPTR)
@@ -1142,6 +1146,7 @@ realloc(void *ptr, size_t size)
wrtwarning("recursive call\n");
malloc_active--;
THREAD_UNLOCK();
+ errno = EDOFUS;
return (0);
}
if (ptr && !malloc_started) {
@@ -1170,6 +1175,8 @@ realloc(void *ptr, size_t size)
THREAD_UNLOCK();
if (malloc_xmalloc && err)
wrterror("out of memory\n");
+ if (err)
+ errno = ENOMEM;
return (r);
}