Skip to content

Commit c0f5305

Browse files
committed
fix #9634 debugging a program using execCmdEx now works
1 parent 2fad7f1 commit c0f5305

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

lib/system/io.nim

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ proc strerror(errnum: cint): cstring {.importc, header: "<string.h>".}
141141
when not defined(NimScript):
142142
var
143143
errno {.importc, header: "<errno.h>".}: cint ## error variable
144+
EINTR {.importc: "EINTR", header: "<errno.h>".}: cint
144145

145146
proc checkErr(f: File) =
146147
when not defined(NimScript):
@@ -158,8 +159,17 @@ proc readBuffer*(f: File, buffer: pointer, len: Natural): int {.
158159
## reads `len` bytes into the buffer pointed to by `buffer`. Returns
159160
## the actual number of bytes that have been read which may be less than
160161
## `len` (if not as many bytes are remaining), but not greater.
161-
result = cast[int](c_fread(buffer, 1, cast[csize_t](len), f))
162-
if result != len: checkErr(f)
162+
while true:
163+
result = cast[int](c_fread(buffer, 1, cast[csize_t](len), f))
164+
if result == len: return result
165+
when not defined(NimScript):
166+
if errno == EINTR:
167+
errno = 0
168+
c_clearerr(f)
169+
doAssert result == 0 # check whether we need to handle result > 0 (ie short read)
170+
continue
171+
checkErr(f)
172+
break
163173

164174
proc readBytes*(f: File, a: var openArray[int8|uint8], start, len: Natural): int {.
165175
tags: [ReadIOEffect], benign.} =

0 commit comments

Comments
 (0)