- if (have_working_fchdir)
- {
- cwd->desc = open (".", O_RDONLY);
- if (cwd->desc < 0)
- {
- cwd->desc = open (".", O_WRONLY);
- if (cwd->desc < 0)
- {
- cwd->name = xgetcwd ();
- return cwd->name ? 0 : -1;
- }
- }
-
- /* On SunOS 4 and IRIX 5.3, fchdir returns EINVAL when auditing
- is enabled, so we have to fall back to chdir. */
- if (fchdir_needs_testing && fchdir (cwd->desc) != 0)
- {
- int saved_errno = errno;
- close (cwd->desc);
- cwd->desc = -1;
- if (saved_errno != EINVAL)
- {
- errno = saved_errno;
- return -1;
- }
- have_working_fchdir = false;
- }
- }
-
- if (!have_working_fchdir)