04ddaa4bc5
add cmirror version OBS-URL: https://build.opensuse.org/request/show/236202 OBS-URL: https://build.opensuse.org/package/show/Base:System/lvm2?expand=0&rev=96
66 lines
2.3 KiB
Diff
66 lines
2.3 KiB
Diff
Index: LVM2.2.02.98/lib/commands/toolcontext.c
|
|
===================================================================
|
|
--- LVM2.2.02.98.orig/lib/commands/toolcontext.c 2014-04-14 14:06:23.245391597 +0800
|
|
+++ LVM2.2.02.98/lib/commands/toolcontext.c 2014-04-14 14:06:47.761421565 +0800
|
|
@@ -1315,6 +1315,7 @@ struct cmd_context *create_toolcontext(u
|
|
{
|
|
struct cmd_context *cmd;
|
|
FILE *new_stream;
|
|
+ int flags;
|
|
|
|
#ifdef M_MMAP_MAX
|
|
mallopt(M_MMAP_MAX, 0);
|
|
@@ -1358,7 +1359,10 @@ struct cmd_context *create_toolcontext(u
|
|
goto out;
|
|
}
|
|
|
|
- if (is_valid_fd(STDIN_FILENO)) {
|
|
+ /* nohup might set stdin O_WRONLY ! */
|
|
+ if (is_valid_fd(STDIN_FILENO) &&
|
|
+ ((flags = fcntl(STDIN_FILENO, F_GETFL)) > 0) &&
|
|
+ (flags & O_ACCMODE) != O_WRONLY) {
|
|
if (!_reopen_stream(stdin, STDIN_FILENO, "r", "stdin", &new_stream))
|
|
goto_out;
|
|
stdin = new_stream;
|
|
@@ -1368,7 +1372,9 @@ struct cmd_context *create_toolcontext(u
|
|
}
|
|
}
|
|
|
|
- if (is_valid_fd(STDOUT_FILENO)) {
|
|
+ if (is_valid_fd(STDOUT_FILENO) &&
|
|
+ ((flags = fcntl(STDOUT_FILENO, F_GETFL)) > 0) &&
|
|
+ (flags & O_ACCMODE) != O_RDONLY) {
|
|
if (!_reopen_stream(stdout, STDOUT_FILENO, "w", "stdout", &new_stream))
|
|
goto_out;
|
|
stdout = new_stream;
|
|
@@ -1629,6 +1635,7 @@ void destroy_toolcontext(struct cmd_cont
|
|
{
|
|
struct dm_config_tree *cft_cmdline;
|
|
FILE *new_stream;
|
|
+ int flags;
|
|
|
|
if (cmd->dump_filter)
|
|
persistent_filter_dump(cmd->filter, 1);
|
|
@@ -1654,7 +1661,9 @@ void destroy_toolcontext(struct cmd_cont
|
|
#ifndef VALGRIND_POOL
|
|
if (cmd->linebuffer) {
|
|
/* Reset stream buffering to defaults */
|
|
- if (is_valid_fd(STDIN_FILENO)) {
|
|
+ if (is_valid_fd(STDIN_FILENO) &&
|
|
+ ((flags = fcntl(STDIN_FILENO, F_GETFL)) > 0) &&
|
|
+ (flags & O_ACCMODE) != O_WRONLY) {
|
|
if (_reopen_stream(stdin, STDIN_FILENO, "r", "stdin", &new_stream)) {
|
|
stdin = new_stream;
|
|
setlinebuf(stdin);
|
|
@@ -1662,7 +1671,9 @@ void destroy_toolcontext(struct cmd_cont
|
|
cmd->linebuffer = NULL; /* Leave buffer in place (deliberate leak) */
|
|
}
|
|
|
|
- if (is_valid_fd(STDOUT_FILENO)) {
|
|
+ if (is_valid_fd(STDOUT_FILENO) &&
|
|
+ ((flags = fcntl(STDOUT_FILENO, F_GETFL)) > 0) &&
|
|
+ (flags & O_ACCMODE) != O_RDONLY) {
|
|
if (_reopen_stream(stdout, STDOUT_FILENO, "w", "stdout", &new_stream)) {
|
|
stdout = new_stream;
|
|
setlinebuf(stdout);
|