summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--changelog.md3
-rw-r--r--lib/system/io.nim24
-rw-r--r--tests/exception/t16366.nim11
3 files changed, 8 insertions, 30 deletions
diff --git a/changelog.md b/changelog.md
index f4c31fbc9..849640e06 100644
--- a/changelog.md
+++ b/changelog.md
@@ -24,9 +24,6 @@
 - Type mismatch errors now show more context, use `-d:nimLegacyTypeMismatch` for previous
   behavior.
 
-- `echo` and `debugEcho` will now raise `IOError` if writing to stdout fails.  Previous behavior
-  silently ignored errors.  See #16366.  Use `-d:nimLegacyEchoNoRaise` for previous behavior.
-
 - `math.round` now is rounded "away from zero" in JS backend which is consistent
   with other backends. See #9125. Use `-d:nimLegacyJsRound` for previous behavior.
 
diff --git a/lib/system/io.nim b/lib/system/io.nim
index 62a9d1e18..591ea3e92 100644
--- a/lib/system/io.nim
+++ b/lib/system/io.nim
@@ -227,9 +227,6 @@ when defined(windows):
     # But we cannot call printf directly as the string might contain \0.
     # So we have to loop over all the sections separated by potential \0s.
     var i = c_fprintf(f, "%s", s)
-    if i < 0:
-      if doRaise: raiseEIO("cannot write string to file")
-      return
     while i < s.len:
       if s[i] == '\0':
         let w = c_fputc('\0', f)
@@ -787,13 +784,6 @@ when declared(stdout):
                      not defined(nintendoswitch) and not defined(freertos) and
                      hostOS != "any"
 
-  const echoDoRaise = not defined(nimLegacyEchoNoRaise) and not defined(guiapp) # see PR #16366
-
-  template checkErrMaybe(succeeded: bool): untyped =
-    if not succeeded:
-      when echoDoRaise:
-        checkErr(stdout)
-
   proc echoBinSafe(args: openArray[string]) {.compilerproc.} =
     when defined(androidNDK):
       var s = ""
@@ -806,18 +796,20 @@ when declared(stdout):
         proc flockfile(f: File) {.importc, nodecl.}
         proc funlockfile(f: File) {.importc, nodecl.}
         flockfile(stdout)
-        defer: funlockfile(stdout)
       when defined(windows) and compileOption("threads"):
         acquireSys echoLock
-        defer: releaseSys echoLock
       for s in args:
         when defined(windows):
-          writeWindows(stdout, s, doRaise = echoDoRaise)
+          writeWindows(stdout, s)
         else:
-          checkErrMaybe(c_fwrite(s.cstring, cast[csize_t](s.len), 1, stdout) == s.len)
+          discard c_fwrite(s.cstring, cast[csize_t](s.len), 1, stdout)
       const linefeed = "\n"
-      checkErrMaybe(c_fwrite(linefeed.cstring, linefeed.len, 1, stdout) == linefeed.len)
-      checkErrMaybe(c_fflush(stdout) == 0)
+      discard c_fwrite(linefeed.cstring, linefeed.len, 1, stdout)
+      discard c_fflush(stdout)
+      when stdOutLock:
+        funlockfile(stdout)
+      when defined(windows) and compileOption("threads"):
+        releaseSys echoLock
 
 
 when defined(windows) and not defined(nimscript) and not defined(js):
diff --git a/tests/exception/t16366.nim b/tests/exception/t16366.nim
deleted file mode 100644
index 4bcad79ed..000000000
--- a/tests/exception/t16366.nim
+++ /dev/null
@@ -1,11 +0,0 @@
-discard """
-  action: run
-  exitcode: 0
-  targets: "c cpp"
-  disabled: openbsd
-"""
-
-echo "foo1"
-close stdout
-doAssertRaises(IOError):
-  echo "foo"