[PATCH] valloc declaration in stdlib.h

Hi, Current uClibc-ng have issue with several different valloc declarations. malloc.h: #ifdef __UCLIBC_SUSV2_LEGACY__ /* Allocate SIZE bytes on a page boundary. */ extern __malloc_ptr_t valloc __MALLOC_P ((size_t __size)) __attribute_malloc__; #endif stdlib.h: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED /* Allocate SIZE bytes on a page boundary. The storage cannot be freed. */ extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur; #endif The second declaration doesn't use the define __UCLIBC_SUSV2_LEGACY__. That leads to compile time problems. The attached patch fixes this diffrence. -- Best regards, Eugene

Hi Eugene, Eugene Yudin wrote,
Hi,
Current uClibc-ng have issue with several different valloc declarations.
malloc.h: #ifdef __UCLIBC_SUSV2_LEGACY__ /* Allocate SIZE bytes on a page boundary. */ extern __malloc_ptr_t valloc __MALLOC_P ((size_t __size)) __attribute_malloc__; #endif
stdlib.h: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED /* Allocate SIZE bytes on a page boundary. The storage cannot be freed. */ extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur; #endif
The second declaration doesn't use the define __UCLIBC_SUSV2_LEGACY__. That leads to compile time problems.
Can you explain in which situations this leads to compile time problems? best regards Waldemar

Sorry. I made a typo. Of course It's a runtime error. Requirements: * uClibc-ng with disabled option "Enable SuSv2 LEGACY functions" (UCLIBC_SUSV2_LEGACY symbol). Test progam: $ cat test_valloc.c #include <stdlib.h> int main(int argc, char *argv[]) { void *p; p = valloc(1); if (p == NULL) return EXIT_FAILURE; free(p); return EXIT_SUCCESS; } The program above compiles without problems because of declaration in "stdio.h", but it segfaults in runtime: $ ./test_valloc Segmentation fault Definition of valloc also depends from UCLIBC_SUSV2_LEGACY (libc/stdlib/Makefile.in): CSRC-$(UCLIBC_SUSV2_LEGACY) += valloc.c The patch transforms the issue to compile time error. On Mon, Jul 24, 2017 at 11:29 PM, Waldemar Brodkorb <wbx@uclibc-ng.org> wrote:
Hi Eugene, Eugene Yudin wrote,
Hi,
Current uClibc-ng have issue with several different valloc declarations.
malloc.h: #ifdef __UCLIBC_SUSV2_LEGACY__ /* Allocate SIZE bytes on a page boundary. */ extern __malloc_ptr_t valloc __MALLOC_P ((size_t __size)) __attribute_malloc__; #endif
stdlib.h: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED /* Allocate SIZE bytes on a page boundary. The storage cannot be freed. */ extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur; #endif
The second declaration doesn't use the define __UCLIBC_SUSV2_LEGACY__. That leads to compile time problems.
Can you explain in which situations this leads to compile time problems?
best regards Waldemar
-- С уважением, Евгений Юдин
participants (2)
-
Eugene Yudin
-
Waldemar Brodkorb