Browse code

cmdutils: check fread() return value

Janne Grunau authored on 2011/10/30 23:34:32
Showing 1 changed files
... ...
@@ -787,6 +787,7 @@ int read_yesno(void)
787 787
 
788 788
 int read_file(const char *filename, char **bufptr, size_t *size)
789 789
 {
790
+    int ret;
790 791
     FILE *f = fopen(filename, "rb");
791 792
 
792 793
     if (!f) {
... ...
@@ -802,11 +803,22 @@ int read_file(const char *filename, char **bufptr, size_t *size)
802 802
         fclose(f);
803 803
         return AVERROR(ENOMEM);
804 804
     }
805
-    fread(*bufptr, 1, *size, f);
806
-    (*bufptr)[*size++] = '\0';
805
+    ret = fread(*bufptr, 1, *size, f);
806
+    if (ret < *size) {
807
+        av_free(*bufptr);
808
+        if (ferror(f)) {
809
+            av_log(NULL, AV_LOG_ERROR, "Error while reading file '%s': %s\n",
810
+                   filename, strerror(errno));
811
+            ret = AVERROR(errno);
812
+        } else
813
+            ret = AVERROR_EOF;
814
+    } else {
815
+        ret = 0;
816
+        (*bufptr)[*size++] = '\0';
817
+    }
807 818
 
808 819
     fclose(f);
809
-    return 0;
820
+    return ret;
810 821
 }
811 822
 
812 823
 void init_pts_correction(PtsCorrectionContext *ctx)