diff options
author | Poul-Henning Kamp <phk@FreeBSD.org> | 2002-08-09 10:16:24 +0000 |
---|---|---|
committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2002-08-09 10:16:24 +0000 |
commit | f42f7c54c87916f22e22e03055bcf5ef9836cf92 (patch) | |
tree | 9e6c76055bc8308c6d09279f18ad60408daf163a /lib/libc/stdlib | |
parent | 9d6d1ee63ea463c4098f40ab21fd26ee9f64827c (diff) | |
download | src-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.c | 7 |
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); } |