+2024-11-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ openat: don’t lose track of save_cwd errno
+ * lib/openat.c (openat_permissive): When ‘close’ is called
+ after save_cwd failed, don’t lose track of save_cwd’s errno.
+ This fixes a recently-introduced unlikely bug.
+
2024-11-20 Bruno Haible <bruno@clisp.org>
c-stack: Avoid a busy-looping test on macOS.
}
}
- bool save_failed = save_cwd (&saved_cwd) < 0;
+ int save_failed = save_cwd (&saved_cwd) < 0 ? errno : 0;
/* If save_cwd allocated a descriptor DFD other than FD, do another
save_cwd and then close DFD, so that the later open (if successful)
int dfd = saved_cwd.desc;
if (0 <= dfd && dfd != fd)
{
- save_failed = save_cwd (&saved_cwd) < 0;
+ save_failed = save_cwd (&saved_cwd) < 0 ? errno : 0;
close (dfd);
dfd = saved_cwd.desc;
}
if (save_failed)
{
if (! cwd_errno)
- openat_save_fail (errno);
- *cwd_errno = errno;
+ openat_save_fail (save_failed);
+ *cwd_errno = save_failed;
}
err = fchdir (fd);