Merge pull request #268 from N-R-K/stdio_errcheck
More strict stdio error checking
This commit is contained in:
		
							
								
								
									
										12
									
								
								qoi.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								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; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user