|
|
@ -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; |
|
|
|
} |
|
|
|