aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2021-12-12 13:06:13 +0100
committerDrew DeVault <sir@cmpwn.com>2021-12-12 13:06:13 +0100
commitaad6ff05cc6110da6b458d9631604dacb44bcc61 (patch)
tree9b1704f455bcbc19233f61cfd78276fc56143a5b
parentsdl2::mixer: initial commit (diff)
downloadhare-chip8-aad6ff05cc6110da6b458d9631604dacb44bcc61.tar.gz
all: add error handling on init
-rw-r--r--cmd/demo/main.ha4
-rw-r--r--sdl2/image/image.ha10
-rw-r--r--sdl2/sdl2.ha6
3 files changed, 13 insertions, 7 deletions
diff --git a/cmd/demo/main.ha b/cmd/demo/main.ha
index 73a5517..2b662a2 100644
--- a/cmd/demo/main.ha
+++ b/cmd/demo/main.ha
@@ -30,9 +30,9 @@ export fn main() void = {
};
fn run() (void | sdl2::error) = {
- sdl2::init(sdl2::init_flags::VIDEO | sdl2::init_flags::GAMECONTROLLER);
+ sdl2::init(sdl2::init_flags::VIDEO | sdl2::init_flags::GAMECONTROLLER)!;
defer sdl2::quit();
- image::init(image::init_flags::PNG | image::init_flags::JPG);
+ image::init(image::init_flags::PNG | image::init_flags::JPG)!;
defer image::quit();
mixer::init(mixer::init_flags::OGG)!;
diff --git a/sdl2/image/image.ha b/sdl2/image/image.ha
index 6cabee2..8a48009 100644
--- a/sdl2/image/image.ha
+++ b/sdl2/image/image.ha
@@ -12,11 +12,13 @@ export type init_flags = enum int {
WEBP = 0x00000008,
};
+@symbol("IMG_Init") fn _init(flags: init_flags) int;
+
// Loads dynamic libraries and prepares them for use. Flags should be one or
-// more flags from IMG_InitFlags OR'd together.
-//
-// Returns the flags successfully initialized, or 0 on failure.
-export @symbol("IMG_Init") fn init(flags: init_flags) int;
+// more flags from [[init_flags]] OR'd together.
+export fn init(flags: init_flags) (void | sdl2::error) = {
+ return sdl2::wrapvoid(_init(flags));
+};
// Unloads libraries loaded with [[init]]
export @symbol("IMG_Quit") fn quit() void;
diff --git a/sdl2/sdl2.ha b/sdl2/sdl2.ha
index b71c890..08e1234 100644
--- a/sdl2/sdl2.ha
+++ b/sdl2/sdl2.ha
@@ -13,8 +13,12 @@ export type init_flags = enum uint {
EVERYTHING = TIMER | AUDIO | VIDEO | EVENTS | JOYSTICK | HAPTIC | GAMECONTROLLER | SENSOR,
};
+@symbol("SDL_Init") fn _init(flags: init_flags) int;
+
// This function initializes the subsystems specified by 'flags'.
-export @symbol("SDL_Init") fn init(flags: init_flags) void;
+export fn init(flags: init_flags) (void | error) = {
+ return wrapvoid(_init(flags));
+};
// This function cleans up all initialized subsystems. You should call it upon
// all exit conditions.