summaryrefslogtreecommitdiff
path: root/libc/unistd/getcwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc/unistd/getcwd.c')
-rw-r--r--libc/unistd/getcwd.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/libc/unistd/getcwd.c b/libc/unistd/getcwd.c
index ad68ed4a7..b5bfeaae8 100644
--- a/libc/unistd/getcwd.c
+++ b/libc/unistd/getcwd.c
@@ -4,6 +4,9 @@
#include <dirent.h>
#include <string.h>
+/* #undef FAST_DIR_SEARCH_POSSIBLE on Linux */
+
+
/* These functions find the absolute path to the current working directory. */
static char *recurser(); /* Routine to go up tree */
@@ -78,13 +81,17 @@ ino_t this_ino;
char *ptr;
int slen;
+#ifdef FAST_DIR_SEARCH_POSSIBLE
/* The test is for ELKS lib 0.0.9, this should be fixed in the real kernel */
int slow_search = (sizeof(ino_t) != sizeof(d->d_ino));
+#endif
if (stat(path_buf, &st) < 0)
return 0;
+#ifdef FAST_DIR_SEARCH_POSSIBLE
if (this_dev != st.st_dev)
slow_search = 1;
+#endif
slen = strlen(path_buf);
ptr = path_buf + slen - 1;
@@ -103,7 +110,9 @@ ino_t this_ino;
return 0;
while ((d = readdir(dp)) != 0) {
+#ifdef FAST_DIR_SEARCH_POSSIBLE
if (slow_search || this_ino == d->d_ino) {
+#endif
if (slen + strlen(d->d_name) > path_size) {
__set_errno(ERANGE);
return 0;
@@ -115,7 +124,9 @@ ino_t this_ino;
closedir(dp);
return path_buf;
}
+#ifdef FAST_DIR_SEARCH_POSSIBLE
}
+#endif
}
closedir(dp);