about summary refs log tree commit diff
path: root/sysdeps/posix/getcwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/posix/getcwd.c')
-rw-r--r--sysdeps/posix/getcwd.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
index af858a2643..05f626f869 100644
--- a/sysdeps/posix/getcwd.c
+++ b/sysdeps/posix/getcwd.c
@@ -180,18 +180,15 @@ extern char *alloca ();
 #define	__lstat	stat
 #endif
 
-#ifndef _LIBC
-#define __getcwd getcwd
-#endif
-
-/* Get the pathname of the current working directory, and put it in SIZE
+/* Get the canonical absolute name of the named directory, and put it in SIZE
    bytes of BUF.  Returns NULL if the directory couldn't be determined or
    SIZE was too small.  If successful, returns BUF.  In GNU, if BUF is
    NULL, an array is allocated with `malloc'; the array is SIZE bytes long,
    unless SIZE <= 0, in which case it is as big as necessary.  */
 
 char *
-__getcwd (buf, size)
+__canonicalize_directory_name_internal (thisdir, buf, size)
+     const char *thisdir;
      char *buf;
      size_t size;
 {
@@ -230,7 +227,7 @@ __getcwd (buf, size)
   pathp = path + size;
   *--pathp = '\0';
 
-  if (__lstat (".", &st) < 0)
+  if (__lstat (thisdir, &st) < 0)
     return NULL;
   thisdev = st.st_dev;
   thisino = st.st_ino;
@@ -369,6 +366,24 @@ __getcwd (buf, size)
     free ((__ptr_t) dotlist);
   return NULL;
 }
+
+/* Get the pathname of the current working directory, and put it in SIZE
+   bytes of BUF.  Returns NULL if the directory couldn't be determined or
+   SIZE was too small.  If successful, returns BUF.  In GNU, if BUF is
+   NULL, an array is allocated with `malloc'; the array is SIZE bytes long,
+   unless SIZE <= 0, in which case it is as big as necessary.  */
+
+#ifndef _LIBC
+#define __getcwd getcwd
+#endif
+
+char *
+__getcwd (buf, size)
+     char *buf;
+     size_t size;
+{
+  return __canonicalize_directory_name_internal (".", buf, size);
+}
 
 #ifdef _LIBC
 weak_alias (__getcwd, getcwd)