fix get_current_dir_name behavior
authorRich Felker <dalias@aerifal.cx>
Sat, 18 Feb 2012 04:56:28 +0000 (23:56 -0500)
committerRich Felker <dalias@aerifal.cx>
Sat, 18 Feb 2012 04:56:28 +0000 (23:56 -0500)
src/misc/get_current_dir_name.c

index 212edf3..e0f463b 100644 (file)
@@ -2,11 +2,15 @@
 #include <string.h>
 #include <limits.h>
 #include <unistd.h>
 #include <string.h>
 #include <limits.h>
 #include <unistd.h>
+#include <sys/stat.h>
 
 char *get_current_dir_name(void) {
 
 char *get_current_dir_name(void) {
+       struct stat a, b;
        char buf[PATH_MAX];
        char buf[PATH_MAX];
-       char* res = getenv("PWD");
-       if(res && *res) return strdup(res);
+       char *res = getenv("PWD");
+       if (res && *res && !stat(res, &a) && !stat(".", &b)
+           && (a.st_dev == b.st_dev) && (a.st_ino == b.st_ino))
+               return strdup(res);
        if(!getcwd(buf, sizeof(buf))) return NULL;
        return strdup(buf);
 }
        if(!getcwd(buf, sizeof(buf))) return NULL;
        return strdup(buf);
 }