diff options
Diffstat (limited to 'libc')
-rw-r--r-- | libc/stdio/_trans2r.c | 4 | ||||
-rw-r--r-- | libc/stdio/_trans2w.c | 4 | ||||
-rw-r--r-- | libc/stdlib/malloc-standard/free.c | 62 | ||||
-rw-r--r-- | libc/stdlib/malloc-standard/mallinfo.c | 24 |
4 files changed, 51 insertions, 43 deletions
diff --git a/libc/stdio/_trans2r.c b/libc/stdio/_trans2r.c index d33d9eba8..9afb75428 100644 --- a/libc/stdio/_trans2r.c +++ b/libc/stdio/_trans2r.c @@ -41,9 +41,13 @@ int __stdio_trans2r(FILE * __restrict stream) #endif if (stream->__modeflags & __FLAG_WRITEONLY) { +#if defined(__UCLIBC_HAS_WCHAR__) || !defined(__UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION__) DO_EBADF: +#endif __set_errno(EBADF); +#ifdef __UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION__ ERROR: +#endif __STDIO_STREAM_SET_ERROR(stream); __STDIO_STREAM_VALIDATE(stream); return EOF; diff --git a/libc/stdio/_trans2w.c b/libc/stdio/_trans2w.c index fdde2bebf..7ab3403c0 100644 --- a/libc/stdio/_trans2w.c +++ b/libc/stdio/_trans2w.c @@ -40,9 +40,13 @@ int __stdio_trans2w(FILE * __restrict stream) #endif if (stream->__modeflags & __FLAG_READONLY) { +#if defined(__UCLIBC_HAS_WCHAR__) || !defined(__UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION__) DO_EBADF: +#endif __set_errno(EBADF); +#ifdef __UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION__ ERROR: +#endif __STDIO_STREAM_SET_ERROR(stream); __STDIO_STREAM_VALIDATE(stream); return EOF; diff --git a/libc/stdlib/malloc-standard/free.c b/libc/stdlib/malloc-standard/free.c index ec4debd56..94e1d65b1 100644 --- a/libc/stdlib/malloc-standard/free.c +++ b/libc/stdlib/malloc-standard/free.c @@ -17,37 +17,6 @@ #include "malloc.h" -/* ------------------------- malloc_trim ------------------------- - malloc_trim(size_t pad); - - If possible, gives memory back to the system (via negative - arguments to sbrk) if there is unused memory at the `high' end of - the malloc pool. You can call this after freeing large blocks of - memory to potentially reduce the system-level memory requirements - of a program. However, it cannot guarantee to reduce memory. Under - some allocation patterns, some large free blocks of memory will be - locked between two used chunks, so they cannot be given back to - the system. - - The `pad' argument to malloc_trim represents the amount of free - trailing space to leave untrimmed. If this argument is zero, - only the minimum amount of memory to maintain internal data - structures will be left (one page or less). Non-zero arguments - can be supplied to maintain enough trailing space to service - future expected allocations without having to re-obtain memory - from the system. - - Malloc_trim returns 1 if it actually released any memory, else 0. - On systems that do not support "negative sbrks", it will always - return 0. -*/ -int malloc_trim(size_t pad) -{ - mstate av = get_malloc_state(); - __malloc_consolidate(av); - return __malloc_trim(pad, av); -} - /* ------------------------- __malloc_trim ------------------------- __malloc_trim is an inverse of sorts to __malloc_alloc. It gives memory back to the system (via negative arguments to sbrk) if there is unused @@ -109,6 +78,37 @@ static int __malloc_trim(size_t pad, mstate av) return 0; } +/* ------------------------- malloc_trim ------------------------- + malloc_trim(size_t pad); + + If possible, gives memory back to the system (via negative + arguments to sbrk) if there is unused memory at the `high' end of + the malloc pool. You can call this after freeing large blocks of + memory to potentially reduce the system-level memory requirements + of a program. However, it cannot guarantee to reduce memory. Under + some allocation patterns, some large free blocks of memory will be + locked between two used chunks, so they cannot be given back to + the system. + + The `pad' argument to malloc_trim represents the amount of free + trailing space to leave untrimmed. If this argument is zero, + only the minimum amount of memory to maintain internal data + structures will be left (one page or less). Non-zero arguments + can be supplied to maintain enough trailing space to service + future expected allocations without having to re-obtain memory + from the system. + + Malloc_trim returns 1 if it actually released any memory, else 0. + On systems that do not support "negative sbrks", it will always + return 0. +*/ +int malloc_trim(size_t pad) +{ + mstate av = get_malloc_state(); + __malloc_consolidate(av); + return __malloc_trim(pad, av); +} + /* Initialize a malloc_state struct. diff --git a/libc/stdlib/malloc-standard/mallinfo.c b/libc/stdlib/malloc-standard/mallinfo.c index f35aab00f..51ac423fe 100644 --- a/libc/stdlib/malloc-standard/mallinfo.c +++ b/libc/stdlib/malloc-standard/mallinfo.c @@ -88,19 +88,19 @@ void malloc_stats(FILE *file) } mi = mallinfo(); - fprintf(file, "total bytes allocated = %10lu\n", (unsigned int)(mi.arena + mi.hblkhd)); - fprintf(file, "total bytes in use bytes = %10lu\n", (unsigned int)(mi.uordblks + mi.hblkhd)); - fprintf(file, "total non-mmapped bytes allocated = %10lu\n", (unsigned int)(mi.arena)); - fprintf(file, "number of mmapped regions = %10lu\n", (unsigned int)(mi.hblks)); - fprintf(file, "total allocated mmap space = %10lu\n", (unsigned int)(mi.hblkhd)); - fprintf(file, "total allocated sbrk space = %10lu\n", (unsigned int)(mi.uordblks)); + fprintf(file, "total bytes allocated = %10u\n", (unsigned int)(mi.arena + mi.hblkhd)); + fprintf(file, "total bytes in use bytes = %10u\n", (unsigned int)(mi.uordblks + mi.hblkhd)); + fprintf(file, "total non-mmapped bytes allocated = %10d\n", mi.arena); + fprintf(file, "number of mmapped regions = %10d\n", mi.hblks); + fprintf(file, "total allocated mmap space = %10d\n", mi.hblkhd); + fprintf(file, "total allocated sbrk space = %10d\n", mi.uordblks); #if 0 - fprintf(file, "number of free chunks = %10lu\n", (unsigned int)(mi.ordblks)); - fprintf(file, "number of fastbin blocks = %10lu\n", (unsigned int)(mi.smblks)); - fprintf(file, "space in freed fastbin blocks = %10lu\n", (unsigned int)(mi.fsmblks)); + fprintf(file, "number of free chunks = %10d\n", mi.ordblks); + fprintf(file, "number of fastbin blocks = %10d\n", mi.smblks); + fprintf(file, "space in freed fastbin blocks = %10d\n", mi.fsmblks); #endif - fprintf(file, "maximum total allocated space = %10lu\n", (unsigned int)(mi.usmblks)); - fprintf(file, "total free space = %10lu\n", (unsigned int)(mi.fordblks)); - fprintf(file, "memory releasable via malloc_trim = %10lu\n", (unsigned int)(mi.keepcost)); + fprintf(file, "maximum total allocated space = %10d\n", mi.usmblks); + fprintf(file, "total free space = %10d\n", mi.fordblks); + fprintf(file, "memory releasable via malloc_trim = %10d\n", mi.keepcost); } |