diff --git a/libretro-common/formats/png/rpng_nbio.c b/libretro-common/formats/png/rpng_nbio.c index 2688ca0b8b..eb507ff11e 100644 --- a/libretro-common/formats/png/rpng_nbio.c +++ b/libretro-common/formats/png/rpng_nbio.c @@ -322,23 +322,23 @@ bool rpng_nbio_load_image_argb(const char *path, uint32_t **data, unsigned *width, unsigned *height) { size_t file_len; - struct nbio_t* nbread = NULL; struct rpng_t rpng = {0}; bool ret = true; - void* ptr = NULL; + + struct nbio_t* nbread = (struct nbio_t*)rpng.userdata; { bool looped = false; nbread = nbio_open(path, NBIO_READ); - ptr = nbio_get_ptr(nbread, &file_len); + rpng.ptr = nbio_get_ptr(nbread, &file_len); nbio_begin_read(nbread); - while (!nbio_iterate(nbread)) looped=true; - ptr = nbio_get_ptr(nbread, &file_len); - (void)ptr; + while (!nbio_iterate(nbread)) + looped=true; + rpng.ptr = nbio_get_ptr(nbread, &file_len); (void)looped; - rpng.buff_data = (uint8_t*)ptr; + rpng.buff_data = (uint8_t*)rpng.ptr; } { @@ -377,7 +377,7 @@ bool rpng_nbio_load_image_argb(const char *path, uint32_t **data, width, height); end: - nbio_free(nbread); + nbio_free((struct nbio_t*)rpng.userdata); if (!ret) free(*data); if (rpng.idat_buf.data) diff --git a/libretro-common/include/formats/rpng.h b/libretro-common/include/formats/rpng.h index c33359f07b..1f702d085b 100644 --- a/libretro-common/include/formats/rpng.h +++ b/libretro-common/include/formats/rpng.h @@ -65,6 +65,8 @@ struct rpng_t size_t inflate_buf_size; uint8_t *buff_data; uint32_t palette[256]; + void *userdata; + void *ptr; }; bool rpng_load_image_argb(const char *path, uint32_t **data,