- if (!page || size != fread(page, 1, size, fp)) {
- free(page);
- page = NULL;
- } else {
- *(page + size) = '\0';
+
+ if (page) {
+ clearerr(fp);
+ n = fread(page, 1, size, fp);
+ if (n != size && ferror(fp)) {
+ free(page);
+ page = NULL;
+ } else {
+ *(page + n) = '\0';
+ }