#include #include #include #include #include #include #define MNT_DETACH 2 int main(void) { char tmpdir[] = "/var/tmp/d_path-bug"; char path[PATH_MAX]; int status = 1; if (mkdir(tmpdir, 0777) != 0 || mount(tmpdir, tmpdir, NULL, MS_BIND, NULL) != 0 || chdir(tmpdir) != 0 || umount2(tmpdir, MNT_DETACH) != 0) { perror(tmpdir); goto out; } if (mkdir("subdir", 0777) != 0 || chdir("subdir") != 0) { perror("subdir"); goto out2; } if (getcwd(path, sizeof(path)) == NULL) { perror("getcwd"); goto out2; } printf("getcwd returned %s\n", path); status = 0; out2: chdir(".."); rmdir("subdir"); chdir("/"); out: umount(tmpdir); rmdir(tmpdir); return status; }