Browse Source

fix eof logic

Laytan Laats 1 year ago
parent
commit
0b2f357bbe
1 changed files with 12 additions and 7 deletions
  1. 12 7
      core/os/stream.odin

+ 12 - 7
core/os/stream.odin

@@ -27,19 +27,31 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
 	case .Read:
 	case .Read:
 		n_int, os_err = read(fd, p)
 		n_int, os_err = read(fd, p)
 		n = i64(n_int)
 		n = i64(n_int)
+		if n == 0 && os_err == 0 {
+			err = .EOF
+		}
 
 
 	case .Read_At:
 	case .Read_At:
 		when !(ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD) {
 		when !(ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD) {
 			n_int, os_err = read_at(fd, p, offset)
 			n_int, os_err = read_at(fd, p, offset)
 			n = i64(n_int)
 			n = i64(n_int)
+			if n == 0 && os_err == 0 {
+				err = .EOF
+			}
 		}
 		}
 	case .Write:
 	case .Write:
 		n_int, os_err = write(fd, p)
 		n_int, os_err = write(fd, p)
 		n = i64(n_int)
 		n = i64(n_int)
+		if n == 0 && os_err == 0 {
+			err = .EOF
+		}
 	case .Write_At:
 	case .Write_At:
 		when !(ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD) {
 		when !(ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD) {
 			n_int, os_err = write_at(fd, p, offset)
 			n_int, os_err = write_at(fd, p, offset)
 			n = i64(n_int)
 			n = i64(n_int)
+			if n == 0 && os_err == 0 {
+				err = .EOF
+			}
 		}
 		}
 	case .Seek:
 	case .Seek:
 		n, os_err = seek(fd, offset, int(whence))
 		n, os_err = seek(fd, offset, int(whence))
@@ -63,12 +75,5 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
 		}
 		}
 		err = .Unknown
 		err = .Unknown
 	}
 	}
-
-	when ODIN_OS != .Windows {
-		if err == nil && os_err == 0 && n == 0 {
-			err = .EOF
-		}
-	}
-
 	return
 	return
 }
 }