Skip to content

Commit fca2232

Browse files
authored
Merge pull request odin-lang#5856 from A1029384756/master
[core:os/os2] zeroed `n` value on failed file operations
2 parents 788ef8e + 7afbe23 commit fca2232

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

core/os/os2/file_linux.odin

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ _seek :: proc(f: ^File_Impl, offset: i64, whence: io.Seek_From) -> (ret: i64, er
198198
case .NONE:
199199
return n, nil
200200
case:
201-
return -1, _get_platform_error(errno)
201+
return 0, _get_platform_error(errno)
202202
}
203203
}
204204

@@ -209,7 +209,7 @@ _read :: proc(f: ^File_Impl, p: []byte) -> (i64, Error) {
209209

210210
n, errno := linux.read(f.fd, p[:min(len(p), MAX_RW)])
211211
if errno != .NONE {
212-
return -1, _get_platform_error(errno)
212+
return 0, _get_platform_error(errno)
213213
}
214214
return i64(n), io.Error.EOF if n == 0 else nil
215215
}
@@ -223,7 +223,7 @@ _read_at :: proc(f: ^File_Impl, p: []byte, offset: i64) -> (i64, Error) {
223223
}
224224
n, errno := linux.pread(f.fd, p[:min(len(p), MAX_RW)], offset)
225225
if errno != .NONE {
226-
return -1, _get_platform_error(errno)
226+
return 0, _get_platform_error(errno)
227227
}
228228
if n == 0 {
229229
return 0, .EOF
@@ -276,7 +276,7 @@ _file_size :: proc(f: ^File_Impl) -> (n: i64, err: Error) {
276276
s: linux.Stat = ---
277277
errno := linux.fstat(f.fd, &s)
278278
if errno != .NONE {
279-
return -1, _get_platform_error(errno)
279+
return 0, _get_platform_error(errno)
280280
}
281281

282282
if s.mode & linux.S_IFMT == linux.S_IFREG {

core/os/os2/file_posix.odin

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -382,12 +382,14 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
382382
}
383383

384384
to_read := uint(min(len(p), MAX_RW))
385-
n = i64(posix.read(fd, raw_data(p), to_read))
385+
_n := i64(posix.read(fd, raw_data(p), to_read))
386386
switch {
387-
case n == 0:
387+
case _n == 0:
388388
err = .EOF
389-
case n < 0:
389+
case _n < 0:
390390
err = .Unknown
391+
case:
392+
n = _n
391393
}
392394
return
393395

@@ -402,12 +404,14 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
402404
}
403405

404406
to_read := uint(min(len(p), MAX_RW))
405-
n = i64(posix.pread(fd, raw_data(p), to_read, posix.off_t(offset)))
407+
_n := i64(posix.pread(fd, raw_data(p), to_read, posix.off_t(offset)))
406408
switch {
407-
case n == 0:
409+
case _n == 0:
408410
err = .EOF
409-
case n < 0:
411+
case _n < 0:
410412
err = .Unknown
413+
case:
414+
n = _n
411415
}
412416
return
413417

@@ -460,15 +464,18 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
460464
return
461465
}
462466

463-
n = i64(posix.lseek(fd, posix.off_t(offset), posix.Whence(whence)))
464-
if n < 0 {
467+
_n := i64(posix.lseek(fd, posix.off_t(offset), posix.Whence(whence)))
468+
if _n < 0 {
465469
#partial switch posix.get_errno() {
466470
case .EINVAL:
467471
err = .Invalid_Offset
468472
case:
469473
err = .Unknown
470474
}
475+
return
471476
}
477+
478+
n = _n
472479
return
473480

474481
case .Size:

0 commit comments

Comments
 (0)