|
|
|
@ -1864,20 +1864,31 @@ int cmdutils_read_file(const char *filename, char **bufptr, size_t *size) |
|
|
|
|
strerror(errno)); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
fseek(f, 0, SEEK_END); |
|
|
|
|
*size = ftell(f); |
|
|
|
|
fseek(f, 0, SEEK_SET); |
|
|
|
|
if (*size == (size_t)-1) { |
|
|
|
|
|
|
|
|
|
ret = fseek(f, 0, SEEK_END); |
|
|
|
|
if (ret == -1) { |
|
|
|
|
ret = AVERROR(errno); |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "IO error: %s\n", strerror(errno)); |
|
|
|
|
fclose(f); |
|
|
|
|
return ret; |
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ret = ftell(f); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
ret = AVERROR(errno); |
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
*size = ret; |
|
|
|
|
|
|
|
|
|
ret = fseek(f, 0, SEEK_SET); |
|
|
|
|
if (ret == -1) { |
|
|
|
|
ret = AVERROR(errno); |
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
*bufptr = av_malloc(*size + 1); |
|
|
|
|
if (!*bufptr) { |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "Could not allocate file buffer\n"); |
|
|
|
|
fclose(f); |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
ret = fread(*bufptr, 1, *size, f); |
|
|
|
|
if (ret < *size) { |
|
|
|
@ -1893,6 +1904,8 @@ int cmdutils_read_file(const char *filename, char **bufptr, size_t *size) |
|
|
|
|
(*bufptr)[(*size)++] = '\0'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
out: |
|
|
|
|
av_log(NULL, AV_LOG_ERROR, "IO error: %s\n", av_err2str(ret)); |
|
|
|
|
fclose(f); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|