Use i64 instead of int for internal procedures

This commit is contained in:
gingerBill
2023-06-14 12:31:57 +01:00
parent 08e466938f
commit a78d6fe0b3
4 changed files with 68 additions and 48 deletions
+6 -2
View File
@@ -37,14 +37,18 @@ _get_platform_error :: proc() -> Error {
case win32.ERROR_NOT_SUPPORTED: case win32.ERROR_NOT_SUPPORTED:
return .Unsupported return .Unsupported
case win32.ERROR_HANDLE_EOF:
return .EOF
case win32.ERROR_INVALID_HANDLE:
return .Invalid_File
case case
win32.ERROR_BAD_ARGUMENTS, win32.ERROR_BAD_ARGUMENTS,
win32.ERROR_INVALID_PARAMETER, win32.ERROR_INVALID_PARAMETER,
win32.ERROR_NOT_ENOUGH_MEMORY, win32.ERROR_NOT_ENOUGH_MEMORY,
win32.ERROR_INVALID_HANDLE,
win32.ERROR_NO_MORE_FILES, win32.ERROR_NO_MORE_FILES,
win32.ERROR_LOCK_VIOLATION, win32.ERROR_LOCK_VIOLATION,
win32.ERROR_HANDLE_EOF,
win32.ERROR_BROKEN_PIPE, win32.ERROR_BROKEN_PIPE,
win32.ERROR_CALL_NOT_IMPLEMENTED, win32.ERROR_CALL_NOT_IMPLEMENTED,
win32.ERROR_INSUFFICIENT_BUFFER, win32.ERROR_INSUFFICIENT_BUFFER,
+32 -8
View File
@@ -71,35 +71,59 @@ name :: proc(f: ^File) -> string {
} }
close :: proc(f: ^File) -> Error { close :: proc(f: ^File) -> Error {
return io.close(f.impl.stream) if f != nil {
return io.close(f.impl.stream)
}
return nil
} }
seek :: proc(f: ^File, offset: i64, whence: io.Seek_From) -> (ret: i64, err: Error) { seek :: proc(f: ^File, offset: i64, whence: io.Seek_From) -> (ret: i64, err: Error) {
return io.seek(f.impl.stream, offset, whence) if f != nil {
return io.seek(f.impl.stream, offset, whence)
}
return 0, .Invalid_File
} }
read :: proc(f: ^File, p: []byte) -> (n: int, err: Error) { read :: proc(f: ^File, p: []byte) -> (n: int, err: Error) {
return io.read(f.impl.stream, p) if f != nil {
return io.read(f.impl.stream, p)
}
return 0, .Invalid_File
} }
read_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) { read_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) {
return io.read_at(f.impl.stream, p, offset) if f != nil {
return io.read_at(f.impl.stream, p, offset)
}
return 0, .Invalid_File
} }
write :: proc(f: ^File, p: []byte) -> (n: int, err: Error) { write :: proc(f: ^File, p: []byte) -> (n: int, err: Error) {
return io.write(f.impl.stream, p) if f != nil {
return io.write(f.impl.stream, p)
}
return 0, .Invalid_File
} }
write_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) { write_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) {
return io.write_at(f.impl.stream, p, offset) if f != nil {
return io.write_at(f.impl.stream, p, offset)
}
return 0, .Invalid_File
} }
file_size :: proc(f: ^File) -> (n: i64, err: Error) { file_size :: proc(f: ^File) -> (n: i64, err: Error) {
return io.size(f.impl.stream) if f != nil {
return io.size(f.impl.stream)
}
return 0, .Invalid_File
} }
flush :: proc(f: ^File) -> Error { flush :: proc(f: ^File) -> Error {
return io.flush(f.impl.stream) if f != nil {
return io.flush(f.impl.stream)
}
return nil
} }
sync :: proc(f: ^File) -> Error { sync :: proc(f: ^File) -> Error {
+14 -18
View File
@@ -116,18 +116,18 @@ _seek :: proc(f: ^File, offset: i64, whence: io.Seek_From) -> (ret: i64, err: Er
return res, nil return res, nil
} }
_read :: proc(f: ^File, p: []byte) -> (n: int, err: Error) { _read :: proc(f: ^File, p: []byte) -> (i64, Error) {
if len(p) == 0 { if len(p) == 0 {
return 0, nil return 0, nil
} }
n = unix.sys_read(f.impl.fd, &p[0], len(p)) n := unix.sys_read(f.impl.fd, &p[0], len(p))
if n < 0 { if n < 0 {
return -1, _get_platform_error(n) return -1, _get_platform_error(n)
} }
return n, nil return i64(n), nil
} }
_read_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) { _read_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: i64, err: Error) {
if offset < 0 { if offset < 0 {
return 0, .Invalid_Offset return 0, .Invalid_Offset
} }
@@ -138,25 +138,25 @@ _read_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) {
if m < 0 { if m < 0 {
return -1, _get_platform_error(m) return -1, _get_platform_error(m)
} }
n += m n += i64(m)
b = b[m:] b = b[m:]
offset += i64(m) offset += i64(m)
} }
return return
} }
_write :: proc(f: ^File, p: []byte) -> (n: int, err: Error) { _write :: proc(f: ^File, p: []byte) -> (i64, Error) {
if len(p) == 0 { if len(p) == 0 {
return 0, nil return 0, nil
} }
n = unix.sys_write(f.impl.fd, &p[0], uint(len(p))) n := unix.sys_write(f.impl.fd, &p[0], uint(len(p)))
if n < 0 { if n < 0 {
return -1, _get_platform_error(n) return -1, _get_platform_error(n)
} }
return int(n), nil return i64(n), nil
} }
_write_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) { _write_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: i64, err: Error) {
if offset < 0 { if offset < 0 {
return 0, .Invalid_Offset return 0, .Invalid_Offset
} }
@@ -167,7 +167,7 @@ _write_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) {
if m < 0 { if m < 0 {
return -1, _get_platform_error(m) return -1, _get_platform_error(m)
} }
n += m n += i64(m)
b = b[m:] b = b[m:]
offset += i64(m) offset += i64(m)
} }
@@ -371,23 +371,19 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
i: int i: int
switch mode { switch mode {
case .Read: case .Read:
i, ferr = _read(f, p) n, ferr = _read(f, p)
n = i64(i)
err = error_to_io_error(ferr) err = error_to_io_error(ferr)
return return
case .Read_At: case .Read_At:
i, ferr = _read_at(f, p, offset) n, ferr = _read_at(f, p, offset)
n = i64(i)
err = error_to_io_error(ferr) err = error_to_io_error(ferr)
return return
case .Write: case .Write:
i, ferr = _write(f, p) n, ferr = _write(f, p)
n = i64(i)
err = error_to_io_error(ferr) err = error_to_io_error(ferr)
return return
case .Write_At: case .Write_At:
i, ferr = _write_at(f, p, offset) n, ferr = _write_at(f, p, offset)
n = i64(i)
err = error_to_io_error(ferr) err = error_to_io_error(ferr)
return return
case .Seek: case .Seek:
+16 -20
View File
@@ -215,7 +215,7 @@ _seek :: proc(f: ^File, offset: i64, whence: io.Seek_From) -> (ret: i64, err: Er
return i64(hi)<<32 + i64(dw_ptr), nil return i64(hi)<<32 + i64(dw_ptr), nil
} }
_read :: proc(f: ^File, p: []byte) -> (n: int, err: Error) { _read :: proc(f: ^File, p: []byte) -> (n: i64, err: Error) {
read_console :: proc(handle: win32.HANDLE, b: []byte) -> (n: int, err: Error) { read_console :: proc(handle: win32.HANDLE, b: []byte) -> (n: int, err: Error) {
if len(b) == 0 { if len(b) == 0 {
return 0, nil return 0, nil
@@ -281,7 +281,7 @@ _read :: proc(f: ^File, p: []byte) -> (n: int, err: Error) {
n, err := read_console(handle, p[total_read:][:to_read]) n, err := read_console(handle, p[total_read:][:to_read])
total_read += n total_read += n
if err != nil { if err != nil {
return int(total_read), err return i64(total_read), err
} }
} else { } else {
ok = win32.ReadFile(handle, &p[total_read], to_read, &single_read_length, nil) ok = win32.ReadFile(handle, &p[total_read], to_read, &single_read_length, nil)
@@ -294,11 +294,11 @@ _read :: proc(f: ^File, p: []byte) -> (n: int, err: Error) {
} }
} }
return int(total_read), err return i64(total_read), err
} }
_read_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) { _read_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: i64, err: Error) {
pread :: proc(f: ^File, data: []byte, offset: i64) -> (n: int, err: Error) { pread :: proc(f: ^File, data: []byte, offset: i64) -> (n: i64, err: Error) {
buf := data buf := data
if len(buf) > MAX_RW { if len(buf) > MAX_RW {
buf = buf[:MAX_RW] buf = buf[:MAX_RW]
@@ -320,7 +320,7 @@ _read_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) {
err = _get_platform_error() err = _get_platform_error()
done = 0 done = 0
} }
n = int(done) n = i64(done)
return return
} }
@@ -336,7 +336,7 @@ _read_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) {
return return
} }
_write :: proc(f: ^File, p: []byte) -> (n: int, err: Error) { _write :: proc(f: ^File, p: []byte) -> (n: i64, err: Error) {
if len(p) == 0 { if len(p) == 0 {
return return
} }
@@ -354,17 +354,17 @@ _write :: proc(f: ^File, p: []byte) -> (n: int, err: Error) {
e := win32.WriteFile(handle, &p[total_write], to_write, &single_write_length, nil) e := win32.WriteFile(handle, &p[total_write], to_write, &single_write_length, nil)
if single_write_length <= 0 || !e { if single_write_length <= 0 || !e {
n = int(total_write) n = i64(total_write)
err = _get_platform_error() err = _get_platform_error()
return return
} }
total_write += i64(single_write_length) total_write += i64(single_write_length)
} }
return int(total_write), nil return i64(total_write), nil
} }
_write_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) { _write_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: i64, err: Error) {
pwrite :: proc(f: ^File, data: []byte, offset: i64) -> (n: int, err: Error) { pwrite :: proc(f: ^File, data: []byte, offset: i64) -> (n: i64, err: Error) {
buf := data buf := data
if len(buf) > MAX_RW { if len(buf) > MAX_RW {
buf = buf[:MAX_RW] buf = buf[:MAX_RW]
@@ -384,7 +384,7 @@ _write_at :: proc(f: ^File, p: []byte, offset: i64) -> (n: int, err: Error) {
err = _get_platform_error() err = _get_platform_error()
done = 0 done = 0
} }
n = int(done) n = i64(done)
return return
} }
@@ -733,23 +733,19 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
i: int i: int
switch mode { switch mode {
case .Read: case .Read:
i, ferr = _read(f, p) n, ferr = _read(f, p)
n = i64(i)
err = error_to_io_error(ferr) err = error_to_io_error(ferr)
return return
case .Read_At: case .Read_At:
i, ferr = _read_at(f, p, offset) n, ferr = _read_at(f, p, offset)
n = i64(i)
err = error_to_io_error(ferr) err = error_to_io_error(ferr)
return return
case .Write: case .Write:
i, ferr = _write(f, p) n, ferr = _write(f, p)
n = i64(i)
err = error_to_io_error(ferr) err = error_to_io_error(ferr)
return return
case .Write_At: case .Write_At:
i, ferr = _write_at(f, p, offset) n, ferr = _write_at(f, p, offset)
n = i64(i)
err = error_to_io_error(ferr) err = error_to_io_error(ferr)
return return
case .Seek: case .Seek: