diff --git a/inc/lektor/reg.h b/inc/lektor/reg.h index 8d4e1e204d76077f01b1e1e8a2f737110e11c492..ba8a6021bd4400bccfc1e833e11f7bdc7feace54 100644 --- a/inc/lektor/reg.h +++ b/inc/lektor/reg.h @@ -48,7 +48,7 @@ struct lkt_module { /* Call a function from a reg. */ #define MOD_CALL(module, name, ...) \ - reg_call((module).reg, name, 1 + (GET_VA_COUNT(__VA_ARGS__)), (module).data, __VA_ARGS__) + reg_call((module).reg, name, 1 + (GET_VA_COUNT(__VA_ARGS__)), &(module).data, __VA_ARGS__) int reg_call(struct module_reg *reg, const char *name, int count, ...); /* Import a module, from a file (mod is a filepath) or from the __reg__ in the diff --git a/src/main/server.c b/src/main/server.c index 3c5340738b3ce9f1f9fc24791a029566407c1cfe..eb9054adff6f3dca159e2efb1fa555c3a1102274 100644 --- a/src/main/server.c +++ b/src/main/server.c @@ -122,9 +122,10 @@ normal_launch: reg_import("repo", &srv.repo_mod.reg, &srv.repo_mod.handle); free(module); - srv.repo_mod.data = safe_zero_malloc(sizeof(struct lkt_repo)); - MOD_CALL(srv.repo_mod, "new", &srv, srv.repo_mod.handle); - MOD_CALL(srv.window_mod, "new", &srv.queue, srv.db); + if (MOD_CALL(srv.repo_mod, "new", &srv, srv.repo_mod.handle)) + return 100; + if (MOD_CALL(srv.window_mod, "new", &srv.queue, srv.db)) + return 101; /* Get ENV */ /* Not working -> race condition with player module */ diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c index 775f1b696525e5bfc9bbde65bb40575abbf6dcaf..718852bad32dc6e5a2920aef230cbaeaa2a2d72f 100644 --- a/src/module/module_sdl2.c +++ b/src/module/module_sdl2.c @@ -118,9 +118,9 @@ int mod_new(va_list *va) { va_list copy; + struct module_sdl2_window **win; va_copy(copy, *va); - void **win_void = va_arg(copy, void **); - struct module_sdl2_window **win = (struct module_sdl2_window **) win_void; + win = (struct module_sdl2_window **) va_arg(copy, void **); struct queue *queue = va_arg(copy, struct queue *); volatile sqlite3 *db = va_arg(copy, volatile sqlite3 *); bool ret = module_sdl2_new(win, queue, db); @@ -132,9 +132,10 @@ int mod_close(va_list *va) { va_list copy; + struct module_sdl2_window **win; va_copy(copy, *va); - struct module_sdl2_window *win = va_arg(copy, void *); - module_sdl2_close(win); + win = (struct module_sdl2_window **) va_arg(copy, void **); + module_sdl2_close(*win); va_end(copy); return 0; } @@ -143,9 +144,10 @@ int mod_free(va_list *va) { va_list copy; + struct module_sdl2_window **win; va_copy(copy, *va); - struct module_sdl2_window *win = va_arg(copy, void *); - module_sdl2_free(win); + win = (struct module_sdl2_window **) va_arg(copy, void **); + module_sdl2_free(*win); va_end(copy); return 0; } @@ -154,9 +156,10 @@ int mod_toggle_pause(va_list *va) { va_list copy; + struct module_sdl2_window **win; va_copy(copy, *va); - struct module_sdl2_window *win = va_arg(copy, void *); - bool ret = module_sdl2_toggle_pause(win); + win = (struct module_sdl2_window **) va_arg(copy, void **); + bool ret = module_sdl2_toggle_pause(*win); va_end(copy); return ! ret; } @@ -165,10 +168,11 @@ int mod_load_file(va_list *va) { va_list copy; + struct module_sdl2_window **win; va_copy(copy, *va); - struct module_sdl2_window *win = va_arg(copy, void *); + win = (struct module_sdl2_window **) va_arg(copy, void **); const char *file = va_arg(copy, const char *); - bool ret = module_sdl2_load_file(win, file); + bool ret = module_sdl2_load_file(*win, file); va_end(copy); return ! ret; } @@ -177,10 +181,11 @@ int mod_set_volume(va_list *va) { va_list copy; + struct module_sdl2_window **win; va_copy(copy, *va); - struct module_sdl2_window *win = va_arg(copy, void *); + win = (struct module_sdl2_window **) va_arg(copy, void **); int volume = va_arg(copy, int); - bool ret = module_sdl2_set_volume(win, volume); + bool ret = module_sdl2_set_volume(*win, volume); va_end(copy); return ! ret; } @@ -189,10 +194,11 @@ int mod_get_duration(va_list *va) { va_list copy; + struct module_sdl2_window **win; va_copy(copy, *va); - struct module_sdl2_window *win = va_arg(copy, void *); + win = (struct module_sdl2_window **) va_arg(copy, void **); int *duration = va_arg(copy, int *); - bool ret = module_sdl2_get_duration(win, duration); + bool ret = module_sdl2_get_duration(*win, duration); va_end(copy); return ! ret; } @@ -201,10 +207,11 @@ int mod_get_elapsed(va_list *va) { va_list copy; + struct module_sdl2_window **win; va_copy(copy, *va); - struct module_sdl2_window *win = va_arg(copy, void *); + win = (struct module_sdl2_window **) va_arg(copy, void **); int *elapsed = va_arg(copy, int *); - bool ret = module_sdl2_get_elapsed(win, elapsed); + bool ret = module_sdl2_get_elapsed(*win, elapsed); va_end(copy); return ! ret; } diff --git a/src/module/repo.c b/src/module/repo.c index dba9a1b954a1d8c57efee8a87f7890be893fe79d..84f8967a1623dab65a361ae611c98a1229ab9070 100644 --- a/src/module/repo.c +++ b/src/module/repo.c @@ -96,9 +96,13 @@ load_repo_https(va_list *va) { va_list copy; va_copy(copy, *va); - struct lkt_repo *repo = va_arg(copy, void *); + struct lkt_repo **repo = (struct lkt_repo **) va_arg(copy, void **); struct lkt_state *srv = va_arg(copy, struct lkt_state *); - int ret = repo_new(repo, srv); + if (!*repo) + *repo = malloc(sizeof(struct lkt_repo)); + if (!*repo) + return 1; + int ret = repo_new(*repo, srv); va_end(copy); return ret; }