From 5a8932cb21f63af86dffa419ec5da5f4a5d29d70 Mon Sep 17 00:00:00 2001 From: Harry Jeffery Date: Fri, 14 Apr 2017 16:49:17 +0100 Subject: Refactor loader to new style --- src/loader.c | 7 +++++-- src/loader.h | 8 ++++---- src/main.c | 18 +++++++++--------- test/loader.c | 15 ++++++++------- 4 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/loader.c b/src/loader.c index d70b66d..c5b64a6 100644 --- a/src/loader.c +++ b/src/loader.c @@ -44,15 +44,17 @@ static int is_thread_cancelled(void) return sigismember(&sigmask, SIGUSR1); } -void imv_init_loader(struct imv_loader *ldr) +struct imv_loader *imv_loader_create(void) { + struct imv_loader *ldr = malloc(sizeof(struct imv_loader)); memset(ldr, 0, sizeof(struct imv_loader)); pthread_mutex_init(&ldr->lock, NULL); /* ignore this signal in case we accidentally receive it */ block_usr1_signal(); + return ldr; } -void imv_destroy_loader(struct imv_loader *ldr) +void imv_loader_free(struct imv_loader *ldr) { /* wait for any existing bg thread to finish */ pthread_join(ldr->bg_thread, NULL); @@ -70,6 +72,7 @@ void imv_destroy_loader(struct imv_loader *ldr) if(ldr->path) { free(ldr->path); } + free(ldr); } void imv_loader_load(struct imv_loader *ldr, const char *path, diff --git a/src/loader.h b/src/loader.h index d2418a2..04dc640 100644 --- a/src/loader.h +++ b/src/loader.h @@ -44,11 +44,11 @@ struct imv_loader { double frame_time; }; -/* Initialises an instance of imv_loader */ -void imv_init_loader(struct imv_loader *img); +/* Creates an instance of imv_loader */ +struct imv_loader *imv_loader_create(void); -/* Cleans up all resources owned by a imv_loader instance */ -void imv_destroy_loader(struct imv_loader *img); +/* Cleans up an imv_loader instance */ +void imv_loader_free(struct imv_loader *ldr); /* Asynchronously load the given file */ void imv_loader_load(struct imv_loader *ldr, const char *path, diff --git a/src/main.c b/src/main.c index 56971c1..e2c0654 100644 --- a/src/main.c +++ b/src/main.c @@ -174,7 +174,7 @@ static void parse_args(int argc, char** argv) struct { struct imv_navigator nav; - struct imv_loader ldr; + struct imv_loader *ldr; struct imv_texture tex; struct imv_viewport view; struct imv_commands *cmds; @@ -354,8 +354,8 @@ int main(int argc, char** argv) fprintf(stderr, "Error loading font: %s\n", TTF_GetError()); } - /* create our main classes on the stack*/ - imv_init_loader(&g_state.ldr); + /* create our main classes */ + g_state.ldr = imv_loader_create(); imv_init_texture(&g_state.tex, g_state.renderer); @@ -506,7 +506,7 @@ int main(int argc, char** argv) } break; case SDLK_PERIOD: - imv_loader_load_next_frame(&g_state.ldr); + imv_loader_load_next_frame(g_state.ldr); break; case SDLK_SPACE: if(!e.key.repeat) { @@ -557,7 +557,7 @@ int main(int argc, char** argv) } /* check if an image failed to load, if so, remove it from our image list */ - char *err_path = imv_loader_get_error(&g_state.ldr); + char *err_path = imv_loader_get_error(g_state.ldr); if(err_path) { imv_navigator_remove(&g_state.nav, err_path); if (strncmp(err_path, "-", 2) == 0) { @@ -593,7 +593,7 @@ int main(int argc, char** argv) scaling_label[g_options.scaling]); imv_viewport_set_title(&g_state.view, title); - imv_loader_load(&g_state.ldr, current_path, stdin_buffer, stdin_buffer_size); + imv_loader_load(g_state.ldr, current_path, stdin_buffer, stdin_buffer_size); g_state.view.playing = 1; } @@ -604,7 +604,7 @@ int main(int argc, char** argv) /* check if a new image is available to display */ FIBITMAP *bmp; int is_new_image; - if(imv_loader_get_image(&g_state.ldr, &bmp, &is_new_image)) { + if(imv_loader_get_image(g_state.ldr, &bmp, &is_new_image)) { imv_texture_set_image(&g_state.tex, bmp); iw = FreeImage_GetWidth(bmp); ih = FreeImage_GetHeight(bmp); @@ -635,7 +635,7 @@ int main(int argc, char** argv) if(dt > 100) { dt = 100; } - imv_loader_time_passed(&g_state.ldr, dt / 1000.0); + imv_loader_time_passed(g_state.ldr, dt / 1000.0); } /* handle slideshow */ @@ -770,7 +770,7 @@ int main(int argc, char** argv) free(g_state.command_buffer); } - imv_destroy_loader(&g_state.ldr); + imv_loader_free(g_state.ldr); imv_destroy_texture(&g_state.tex); imv_navigator_destroy(&g_state.nav); imv_destroy_viewport(&g_state.view); diff --git a/test/loader.c b/test/loader.c index bbbb8d7..e8791c0 100644 --- a/test/loader.c +++ b/test/loader.c @@ -10,24 +10,25 @@ static void test_jpeg_rotation(void **state) { (void)state; - struct imv_loader ldr; + struct imv_loader *ldr = imv_loader_create(); void *retval; char *error; unsigned int width; - imv_init_loader(&ldr); - imv_loader_load(&ldr, "test/orientation.jpg", NULL, 0); - pthread_join(ldr.bg_thread, &retval); + imv_loader_load(ldr, "test/orientation.jpg", NULL, 0); + pthread_join(ldr->bg_thread, &retval); - error = imv_loader_get_error(&ldr); + error = imv_loader_get_error(ldr); assert_false(error); assert_false(retval == PTHREAD_CANCELED); - assert_false(ldr.out_bmp == NULL); + assert_false(ldr->out_bmp == NULL); - width = FreeImage_GetWidth(ldr.out_bmp); + width = FreeImage_GetWidth(ldr->out_bmp); assert_true(width == 1); + + imv_loader_free(ldr); } int main(void) -- cgit v1.2.3