mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-13 12:58:20 +03:00
fd-util: when re-opening a directory with fd_reopen() go via openat(…, ".", …)
This adds a tiny shortcut to fd_reopen(): if we are about to reopen the fd via O_DIRECTORY then we know it#s a directory and we might as well reopen it via opening "." using the fd as "at fd" in openat(). This has the benefit that we don't need /proc/self/fd/ around for this special case: fewer sources of errors.
This commit is contained in:
parent
e0e914eaf8
commit
b4f73d1e17
@ -654,6 +654,16 @@ int fd_reopen(int fd, int flags) {
|
||||
*
|
||||
* This implicitly resets the file read index to 0. */
|
||||
|
||||
if (FLAGS_SET(flags, O_DIRECTORY)) {
|
||||
/* If we shall reopen the fd as directory we can just go via "." and thus bypass the whole
|
||||
* magic /proc/ directory, and make ourselves independent of that being mounted. */
|
||||
new_fd = openat(fd, ".", flags);
|
||||
if (new_fd < 0)
|
||||
return -errno;
|
||||
|
||||
return new_fd;
|
||||
}
|
||||
|
||||
new_fd = open(FORMAT_PROC_FD_PATH(fd), flags);
|
||||
if (new_fd < 0) {
|
||||
if (errno != ENOENT)
|
||||
|
Loading…
x
Reference in New Issue
Block a user