aboutsummaryrefslogtreecommitdiff
path: root/sdl2/rwops.ha
diff options
context:
space:
mode:
Diffstat (limited to 'sdl2/rwops.ha')
-rw-r--r--sdl2/rwops.ha20
1 files changed, 13 insertions, 7 deletions
diff --git a/sdl2/rwops.ha b/sdl2/rwops.ha
index 9b9a190..4c9077b 100644
--- a/sdl2/rwops.ha
+++ b/sdl2/rwops.ha
@@ -16,8 +16,8 @@ export type SDL_RWops = struct {
sz: *fn(ctx: *SDL_RWops) i64,
seek: *fn(ctx: *SDL_RWops, offs: i64, whence: int) i64,
read: *fn(ctx: *SDL_RWops, ptr: *void, sz: size, maxnum: size) size,
- write: *fn(ctx: *SDL_RWops, ptr: *void, sz: size, num: size) size,
- close: *fn(ctx: *SDL_RWops) void,
+ write: *fn(ctx: *SDL_RWops, ptr: *const void, sz: size, num: size) size,
+ close: *fn(ctx: *SDL_RWops) int,
type_: rwops_type,
// XXX: This union is platform-specific
@@ -105,24 +105,30 @@ fn stream_read(ctx: *SDL_RWops, ptr: *void, sz: size, maxnum: size) size = {
let buf = ptr: *[*]u8;
match (io::readall(handle, buf[..sz * maxnum])) {
case let n: size =>
- return n;
+ return n / sz;
+ case io::EOF =>
+ return 0;
case io::error =>
return 0;
};
};
-fn stream_write(ctx: *SDL_RWops, ptr: *void, sz: size, num: size) size = {
+fn stream_write(ctx: *SDL_RWops, ptr: *const void, sz: size, num: size) size = {
const handle = *(&ctx.hidden.unknown.data1: *io::handle);
- let buf = ptr: *[*]u8;
+ let buf = ptr: *[*]const u8;
match (io::writeall(handle, buf[..sz * num])) {
case let n: size =>
- return n;
+ return n / sz;
case io::error =>
return 0;
};
};
-fn stream_close(ctx: *SDL_RWops) void = {
+fn stream_close(ctx: *SDL_RWops) int = {
const handle = *(&ctx.hidden.unknown.data1: *io::handle);
free(ctx);
+ match (io::close(handle)) {
+ case void => return 0;
+ case io::error => return -1;
+ };
};