summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2018-08-31 11:19:33 +0200
committerAraq <rumpf_a@web.de>2018-08-31 11:19:42 +0200
commitbacf08e65d614f515b0feb73e549090dce012f3f (patch)
tree46e3e7140302a1dc97f440cb3b37f6dd17c0ddf3
parent47c7fd037ed28b7de3d120b003d059d30e18f128 (diff)
downloadNim-bacf08e65d614f515b0feb73e549090dce012f3f.tar.gz
merged #8624 manually; fixes #8442; closes #8575
-rw-r--r--lib/pure/osproc.nim6
-rw-r--r--tests/osproc/tstderr.nim32
2 files changed, 36 insertions, 2 deletions
diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim
index f86acfc49..faeb01407 100644
--- a/lib/pure/osproc.nim
+++ b/lib/pure/osproc.nim
@@ -884,9 +884,11 @@ elif not defined(useNimRtl):
         chck posix_spawn_file_actions_adddup2(fops, data.pStdin[readIdx], readIdx)
         chck posix_spawn_file_actions_addclose(fops, data.pStdout[readIdx])
         chck posix_spawn_file_actions_adddup2(fops, data.pStdout[writeIdx], writeIdx)
-        if (poStdErrToStdOut in data.options):
-          chck posix_spawn_file_actions_addclose(fops, data.pStderr[readIdx])
+        chck posix_spawn_file_actions_addclose(fops, data.pStderr[readIdx])
+        if poStdErrToStdOut in data.options:
           chck posix_spawn_file_actions_adddup2(fops, data.pStdout[writeIdx], 2)
+        else:
+          chck posix_spawn_file_actions_adddup2(fops, data.pStderr[writeIdx], 2)
 
       var res: cint
       if data.workingDir.len > 0:
diff --git a/tests/osproc/tstderr.nim b/tests/osproc/tstderr.nim
new file mode 100644
index 000000000..7a39522a3
--- /dev/null
+++ b/tests/osproc/tstderr.nim
@@ -0,0 +1,32 @@
+discard """
+  output: '''--------------------------------------
+to stderr
+to stderr
+--------------------------------------
+'''
+"""
+import osproc, os, streams
+
+const filename = "ta_out".addFileExt(ExeExt)
+
+doAssert fileExists(getCurrentDir() / "tests" / "osproc" / filename)
+
+var p = startProcess(filename, getCurrentDir() / "tests" / "osproc",
+                     options={})
+
+try:
+  let stdoutStream = p.outputStream
+  let stderrStream = p.errorStream
+  var x = newStringOfCap(120)
+  var output = ""
+  while stderrStream.readLine(x.TaintedString):
+    output.add(x & "\n")
+
+  echo "--------------------------------------"
+  stdout.flushFile()
+  stderr.write output
+  stderr.flushFile()
+  echo "--------------------------------------"
+  stdout.flushFile()
+finally:
+  p.close()