svn commit: trunk/uClibc: include libc/stdlib
vda at uclibc.org
vda at uclibc.org
Mon Jul 30 16:51:56 UTC 2007
Author: vda
Date: 2007-07-30 09:51:48 -0700 (Mon, 30 Jul 2007)
New Revision: 19341
Log:
introduce __uc_malloc, so that users can intercept libc internal OOM.
Added:
trunk/uClibc/libc/stdlib/__uc_malloc.c
Modified:
trunk/uClibc/include/malloc.h
trunk/uClibc/libc/stdlib/Makefile.in
Changeset:
Modified: trunk/uClibc/include/malloc.h
===================================================================
--- trunk/uClibc/include/malloc.h 2007-07-30 14:22:25 UTC (rev 19340)
+++ trunk/uClibc/include/malloc.h 2007-07-30 16:51:48 UTC (rev 19341)
@@ -183,6 +183,13 @@
#endif /* __MALLOC_STANDARD__ */
+/* uClibc may use malloc internally in situations where user can not be
+ * notified about out-of-memory condition. In this situation uClibc will
+ * call __uc_malloc_failed if it is non-NULL, and retry allocation
+ * if it returns. If __uc_malloc_failed is NULL, uclubc will _exit(1).
+ * NB: do not use stdio in __uc_malloc_failed handler! */
+extern void *__uc_malloc(size_t size);
+extern void (*__uc_malloc_failed)(size_t size);
#ifdef __cplusplus
} /* end of extern "C" */
Modified: trunk/uClibc/libc/stdlib/Makefile.in
===================================================================
--- trunk/uClibc/libc/stdlib/Makefile.in 2007-07-30 14:22:25 UTC (rev 19340)
+++ trunk/uClibc/libc/stdlib/Makefile.in 2007-07-30 16:51:48 UTC (rev 19341)
@@ -15,7 +15,7 @@
getpt.c ptsname.c grantpt.c unlockpt.c drand48-iter.c jrand48.c \
jrand48_r.c lrand48.c lrand48_r.c mrand48.c mrand48_r.c nrand48.c \
nrand48_r.c rand_r.c srand48.c srand48_r.c seed48.c seed48_r.c \
- valloc.c posix_memalign.c a64l.c l64a.c
+ valloc.c posix_memalign.c a64l.c l64a.c __uc_malloc.c
ifeq ($(UCLIBC_HAS_ARC4RANDOM),y)
CSRC += arc4random.c
endif
Added: trunk/uClibc/libc/stdlib/__uc_malloc.c
===================================================================
--- trunk/uClibc/libc/stdlib/__uc_malloc.c (rev 0)
+++ trunk/uClibc/libc/stdlib/__uc_malloc.c 2007-07-30 16:51:48 UTC (rev 19341)
@@ -0,0 +1,41 @@
+/* vi: set sw=4 ts=4: */
+/* uClibc internal malloc.
+ Copyright (C) 1991, 1992 Free Software Foundation, Inc.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.
+
+ The author may be reached (Email) at the address mike@@ai.mit.edu,
+ or (US mail) as Mike Haertel c/o Free Software Foundation. */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+
+void (*__uc_malloc_failed)(size_t size);
+
+void *__uc_malloc(size_t size)
+{
+ void *p;
+
+ while (1) {
+ p = malloc(size);
+ if (!size || p)
+ return p;
+ if (!__uc_malloc_failed)
+ _exit(1);
+ __uc_malloc_failed(size);
+ }
+}
More information about the uClibc-cvs
mailing list