aboutsummaryrefslogtreecommitdiff
path: root/raylib/src/external/qoi.h
diff options
context:
space:
mode:
authorUneven Prankster <unevenprankster@protonmail.com>2023-11-16 21:12:27 -0300
committerUneven Prankster <unevenprankster@protonmail.com>2023-11-16 21:12:27 -0300
commit2bbf92ad5ae7708bf18ac7ef333e9a979d8d1bde (patch)
treec9d22bb0d73d9cc0c8586e4d31c93a561ea8e910 /raylib/src/external/qoi.h
parent1c0cc775732201f4c4d3ee0d6772be786b3b4aa1 (diff)
Working so hard like a soldiermain
Can't afford a thing on TV
Diffstat (limited to 'raylib/src/external/qoi.h')
-rw-r--r--raylib/src/external/qoi.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/raylib/src/external/qoi.h b/raylib/src/external/qoi.h
index 6734ac4..f2800b0 100644
--- a/raylib/src/external/qoi.h
+++ b/raylib/src/external/qoi.h
@@ -594,7 +594,7 @@ void *qoi_decode(const void *data, int size, qoi_desc *desc, int channels) {
int qoi_write(const char *filename, const void *data, const qoi_desc *desc) {
FILE *f = fopen(filename, "wb");
- int size;
+ int size, err;
void *encoded;
if (!f) {
@@ -608,10 +608,12 @@ int qoi_write(const char *filename, const void *data, const qoi_desc *desc) {
}
fwrite(encoded, 1, size, f);
+ fflush(f);
+ err = ferror(f);
fclose(f);
QOI_FREE(encoded);
- return size;
+ return err ? 0 : size;
}
void *qoi_read(const char *filename, qoi_desc *desc, int channels) {
@@ -625,11 +627,10 @@ void *qoi_read(const char *filename, qoi_desc *desc, int channels) {
fseek(f, 0, SEEK_END);
size = ftell(f);
- if (size <= 0) {
+ if (size <= 0 || fseek(f, 0, SEEK_SET) != 0) {
fclose(f);
return NULL;
}
- fseek(f, 0, SEEK_SET);
data = QOI_MALLOC(size);
if (!data) {
@@ -639,8 +640,7 @@ void *qoi_read(const char *filename, qoi_desc *desc, int channels) {
bytes_read = fread(data, 1, size, f);
fclose(f);
-
- pixels = qoi_decode(data, bytes_read, desc, channels);
+ pixels = (bytes_read != size) ? NULL : qoi_decode(data, bytes_read, desc, channels);
QOI_FREE(data);
return pixels;
}