From 37e8a493e38421b46967338ee1ec2c534f0d05c3 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 4 Dec 2002 02:34:26 +0000 Subject: Fix the other instance of getcwd --- libc/sysdeps/linux/common/getcwd.c | 39 ++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) (limited to 'libc/sysdeps/linux/common/getcwd.c') diff --git a/libc/sysdeps/linux/common/getcwd.c b/libc/sysdeps/linux/common/getcwd.c index 9e64a3dd8..d1740fa31 100644 --- a/libc/sysdeps/linux/common/getcwd.c +++ b/libc/sysdeps/linux/common/getcwd.c @@ -151,29 +151,32 @@ static char *recurser(char *path_buf, int path_size, dev_t root_dev, ino_t root_ char *getcwd(char *buf, int size) { - struct stat st; + struct stat st; - if (size == 0) { - __set_errno(EINVAL); - return NULL; - } - if (size < 3) { - __set_errno(ERANGE); - return NULL; + if (size == 0) { + if (buf != NULL) { + __set_errno(EINVAL); + return NULL; } + size = PATH_MAX; + } + if (size < 3) { + __set_errno(ERANGE); + return NULL; + } - if (buf == NULL) { - buf = malloc (size); - if (buf == NULL) - return NULL; - } + if (buf == NULL) { + buf = malloc (size); + if (buf == NULL) + return NULL; + } - strcpy(buf, "."); - if (stat("/", &st) < 0) { - return NULL; - } + strcpy(buf, "."); + if (stat("/", &st) < 0) { + return NULL; + } - return recurser(buf, size, st.st_dev, st.st_ino); + return recurser(buf, size, st.st_dev, st.st_ino); } #endif -- cgit v1.2.3