aboutsummaryrefslogtreecommitdiffhomepage
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/POSIX/stubs.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/runtime/POSIX/stubs.c b/runtime/POSIX/stubs.c
index bb528ad4..6b87ad8d 100644
--- a/runtime/POSIX/stubs.c
+++ b/runtime/POSIX/stubs.c
@@ -7,8 +7,6 @@
//
//===----------------------------------------------------------------------===//
-#define _XOPEN_SOURCE 700
-
#include <errno.h>
#include <limits.h>
#include <signal.h>
@@ -265,7 +263,15 @@ gnu_dev_type gnu_dev_makedev(unsigned int __major, unsigned int __minor) {
char *canonicalize_file_name (const char *name) __attribute__((weak));
char *canonicalize_file_name (const char *name) {
- return realpath(name, NULL);
+ // Although many C libraries allocate resolved_name in realpath() if it is NULL,
+ // this behaviour is implementation-defined (POSIX) and not implemented in uclibc.
+ char * resolved_name = malloc(PATH_MAX);
+ if (!resolved_name) return NULL;
+ if (!realpath(name, resolved_name)) {
+ free(resolved_name);
+ return NULL;
+ }
+ return resolved_name;
}
int getloadavg(double loadavg[], int nelem) __attribute__((weak));