summaryrefslogtreecommitdiff
path: root/formats
diff options
context:
space:
mode:
authorSean Bright <sean.bright@gmail.com>2017-09-05 11:05:48 -0400
committerSean Bright <sean.bright@gmail.com>2017-09-05 11:05:48 -0400
commit3f7d0b63fcbbb995970f8c249e9202c8a2a9114a (patch)
treef3ecf189f152ca4e1954b323357b61bce155e9bb /formats
parent7b240d173436ad828008d1cb3c1eae10932518be (diff)
formats: Restore previous fread() behavior
Some formats are able to handle short reads while others are not, so restore the previous behavior for the format modules so that we don't have spurious errors when playing back files. ASTERISK-27232 #close Reported by: Jens T. Change-Id: Iab7f52b25a394f277566c8a2a4b15a692280a300
Diffstat (limited to 'formats')
-rw-r--r--formats/format_g719.c17
-rw-r--r--formats/format_g723.c15
-rw-r--r--formats/format_g726.c15
-rw-r--r--formats/format_g729.c16
-rw-r--r--formats/format_gsm.c15
-rw-r--r--formats/format_h263.c15
-rw-r--r--formats/format_h264.c15
-rw-r--r--formats/format_ilbc.c16
-rw-r--r--formats/format_pcm.c20
-rw-r--r--formats/format_siren14.c17
-rw-r--r--formats/format_siren7.c17
-rw-r--r--formats/format_sln.c19
-rw-r--r--formats/format_vox.c17
-rw-r--r--formats/format_wav.c17
-rw-r--r--formats/format_wav_gsm.c17
15 files changed, 87 insertions, 161 deletions
diff --git a/formats/format_g719.c b/formats/format_g719.c
index 667858587..e27822df7 100644
--- a/formats/format_g719.c
+++ b/formats/format_g719.c
@@ -42,20 +42,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static struct ast_frame *g719read(struct ast_filestream *s, int *whennext)
{
- int res;
- /* Send a frame from the file to the appropriate channel */
+ size_t res;
+ /* Send a frame from the file to the appropriate channel */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, BUF_SIZE);
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_g723.c b/formats/format_g723.c
index 11821246c..9b770336d 100644
--- a/formats/format_g723.c
+++ b/formats/format_g723.c
@@ -42,7 +42,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static struct ast_frame *g723_read(struct ast_filestream *s, int *whennext)
{
unsigned short size;
- int res;
+ size_t res;
int delay;
/* Read the delay for the next packet, and schedule again if necessary */
/* XXX is this ignored ? */
@@ -67,15 +67,10 @@ static struct ast_frame *g723_read(struct ast_filestream *s, int *whennext)
/* Read the data into the buffer */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, size);
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_g726.c b/formats/format_g726.c
index 94623f441..50b558ec4 100644
--- a/formats/format_g726.c
+++ b/formats/format_g726.c
@@ -119,22 +119,17 @@ static int g726_16_rewrite(struct ast_filestream *s, const char *comment)
static struct ast_frame *g726_read(struct ast_filestream *s, int *whennext)
{
- int res;
+ size_t res;
struct g726_desc *fs = (struct g726_desc *)s->_private;
/* Send a frame from the file to the appropriate channel */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, frame_size[fs->rate]);
s->fr.samples = 8 * FRAME_TIME;
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_g729.c b/formats/format_g729.c
index 843644659..35c68bd0c 100644
--- a/formats/format_g729.c
+++ b/formats/format_g729.c
@@ -48,20 +48,16 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static struct ast_frame *g729_read(struct ast_filestream *s, int *whennext)
{
- int res;
+ size_t res;
+
/* Send a frame from the file to the appropriate channel */
s->fr.samples = G729A_SAMPLES;
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, BUF_SIZE);
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res && res != 10) /* XXX what for ? */ {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_gsm.c b/formats/format_gsm.c
index cfc9452ef..783d9553e 100644
--- a/formats/format_gsm.c
+++ b/formats/format_gsm.c
@@ -55,19 +55,14 @@ static const char gsm_silence[] = /* 33 */
static struct ast_frame *gsm_read(struct ast_filestream *s, int *whennext)
{
- int res;
+ size_t res;
AST_FRAME_SET_BUFFER(&(s->fr), s->buf, AST_FRIENDLY_OFFSET, GSM_FRAME_SIZE);
if ((res = fread(s->fr.data.ptr, 1, GSM_FRAME_SIZE, s->f)) != GSM_FRAME_SIZE) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), GSM_FRAME_SIZE, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), GSM_FRAME_SIZE, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_h263.c b/formats/format_h263.c
index 5d59972de..be8e1df7a 100644
--- a/formats/format_h263.c
+++ b/formats/format_h263.c
@@ -69,7 +69,7 @@ static int h263_open(struct ast_filestream *s)
static struct ast_frame *h263_read(struct ast_filestream *s, int *whennext)
{
- int res;
+ size_t res;
uint32_t mark;
unsigned short len;
unsigned int ts;
@@ -87,15 +87,10 @@ static struct ast_frame *h263_read(struct ast_filestream *s, int *whennext)
}
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, len);
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_h264.c b/formats/format_h264.c
index f8906f423..30604004e 100644
--- a/formats/format_h264.c
+++ b/formats/format_h264.c
@@ -61,7 +61,7 @@ static int h264_open(struct ast_filestream *s)
static struct ast_frame *h264_read(struct ast_filestream *s, int *whennext)
{
- int res;
+ size_t res;
int mark = 0;
unsigned short len;
unsigned int ts;
@@ -79,15 +79,10 @@ static struct ast_frame *h264_read(struct ast_filestream *s, int *whennext)
}
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, len);
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_ilbc.c b/formats/format_ilbc.c
index 6e06ef335..d4fbe96e7 100644
--- a/formats/format_ilbc.c
+++ b/formats/format_ilbc.c
@@ -47,19 +47,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static struct ast_frame *ilbc_read(struct ast_filestream *s, int *whennext)
{
- int res;
+ size_t res;
+
/* Send a frame from the file to the appropriate channel */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, ILBC_BUF_SIZE);
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_pcm.c b/formats/format_pcm.c
index bd7cf7776..7b0648234 100644
--- a/formats/format_pcm.c
+++ b/formats/format_pcm.c
@@ -80,21 +80,15 @@ static int pcma_rewrite(struct ast_filestream *s, const char *comment)
static struct ast_frame *pcm_read(struct ast_filestream *s, int *whennext)
{
- int res;
-
- /* Send a frame from the file to the appropriate channel */
+ size_t res;
+ /* Send a frame from the file to the appropriate channel */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, BUF_SIZE);
- if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) < 1) {
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_siren14.c b/formats/format_siren14.c
index 5aaa1f130..3e42bef9a 100644
--- a/formats/format_siren14.c
+++ b/formats/format_siren14.c
@@ -42,20 +42,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static struct ast_frame *siren14read(struct ast_filestream *s, int *whennext)
{
- int res;
- /* Send a frame from the file to the appropriate channel */
+ size_t res;
+ /* Send a frame from the file to the appropriate channel */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, BUF_SIZE);
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_siren7.c b/formats/format_siren7.c
index 87e1372b3..f1bde0012 100644
--- a/formats/format_siren7.c
+++ b/formats/format_siren7.c
@@ -42,20 +42,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static struct ast_frame *siren7read(struct ast_filestream *s, int *whennext)
{
- int res;
- /* Send a frame from the file to the appropriate channel */
+ size_t res;
+ /* Send a frame from the file to the appropriate channel */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, BUF_SIZE);
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_sln.c b/formats/format_sln.c
index 2f4cc57ea..48bad8ae7 100644
--- a/formats/format_sln.c
+++ b/formats/format_sln.c
@@ -36,20 +36,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static struct ast_frame *generic_read(struct ast_filestream *s, int *whennext, unsigned int buf_size)
{
- int res;
- /* Send a frame from the file to the appropriate channel */
+ size_t res;
+ /* Send a frame from the file to the appropriate channel */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, buf_size);
- if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) < 1) {
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_vox.c b/formats/format_vox.c
index 26d4169e1..813dabf21 100644
--- a/formats/format_vox.c
+++ b/formats/format_vox.c
@@ -42,20 +42,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static struct ast_frame *vox_read(struct ast_filestream *s, int *whennext)
{
- int res;
+ size_t res;
/* Send a frame from the file to the appropriate channel */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, BUF_SIZE);
- if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) < 1) {
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_wav.c b/formats/format_wav.c
index 2903992ab..cead61c5b 100644
--- a/formats/format_wav.c
+++ b/formats/format_wav.c
@@ -371,7 +371,7 @@ static void wav_close(struct ast_filestream *s)
static struct ast_frame *wav_read(struct ast_filestream *s, int *whennext)
{
- int res;
+ size_t res;
int samples; /* actual samples read */
#if __BYTE_ORDER == __BIG_ENDIAN
int x;
@@ -393,16 +393,11 @@ static struct ast_frame *wav_read(struct ast_filestream *s, int *whennext)
/* ast_debug(1, "here: %d, maxlen: %d, bytes: %d\n", here, s->maxlen, bytes); */
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, bytes);
- if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) == 0) {
+ if (res) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
+ strerror(errno));
}
return NULL;
}
diff --git a/formats/format_wav_gsm.c b/formats/format_wav_gsm.c
index 2f80a9a46..423dfe48a 100644
--- a/formats/format_wav_gsm.c
+++ b/formats/format_wav_gsm.c
@@ -421,18 +421,13 @@ static struct ast_frame *wav_read(struct ast_filestream *s, int *whennext)
} else {
/* read and convert */
unsigned char msdata[MSGSM_FRAME_SIZE];
- int res;
-
+ size_t res;
+
if ((res = fread(msdata, 1, MSGSM_FRAME_SIZE, s->f)) != MSGSM_FRAME_SIZE) {
- if (feof(s->f)) {
- if (res) {
- ast_debug(3, "Incomplete frame data at end of %s file "
- "(expected %d bytes, read %d)\n",
- ast_format_get_name(s->fr.subclass.format), MSGSM_FRAME_SIZE, res);
- }
- } else {
- ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
- ast_format_get_name(s->fr.subclass.format), strerror(errno));
+ if (res && res != 1) {
+ ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
+ ast_format_get_name(s->fr.subclass.format), MSGSM_FRAME_SIZE, res,
+ strerror(errno));
}
return NULL;
}