Commit eac52b60 authored by Andrey Vagin's avatar Andrey Vagin Committed by Cyrill Gorcunov

util: reopen_fd_as to return an error if destination descritor is busy

Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Acked-by: 's avatarPavel Emelyanov <xemul@parallels.com>
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
parent f274f160
...@@ -131,7 +131,19 @@ int close_safe(int *fd) ...@@ -131,7 +131,19 @@ int close_safe(int *fd)
int reopen_fd_as(int new_fd, int old_fd) int reopen_fd_as(int new_fd, int old_fd)
{ {
if (old_fd != new_fd) { if (old_fd != new_fd) {
int tmp = dup2(old_fd, new_fd); int tmp;
tmp = fcntl(new_fd, F_GETFD);
if (tmp != -1 || errno != EBADF) {
/* Standard descriptors may be reused */
if (new_fd < 3)
pr_warning("fd=%d is already used\n", new_fd);
else {
pr_perror("fd=%d is already used\n", new_fd);
return -1;
}
}
tmp = dup2(old_fd, new_fd);
if (tmp < 0) { if (tmp < 0) {
pr_perror("Dup on %d -> %d failed\n", old_fd, new_fd); pr_perror("Dup on %d -> %d failed\n", old_fd, new_fd);
return tmp; return tmp;
...@@ -155,6 +167,8 @@ int move_img_fd(int *img_fd, int want_fd) ...@@ -155,6 +167,8 @@ int move_img_fd(int *img_fd, int want_fd)
return -1; return -1;
} }
close(*img_fd);
*img_fd = tmp; *img_fd = tmp;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment