| ... | ... |
@@ -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) |