summaryrefslogtreecommitdiff
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 10:10:36 -0500
commitc3a6c8fd2dc156d2d2636d23af3fdf07ed00c3bd (patch)
tree5c6694034368a561ae60247c518a41c8b60823cb
parentf556c31aea25e189b1f6dfae0a541e3575a8a9f5 (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
-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 3b2195a30..e6ecd794f 100644
--- a/formats/format_g719.c
+++ b/formats/format_g719.c
@@ -40,20 +40,15 @@
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 fff6ed07b..a88d132d9 100644
--- a/formats/format_g723.c
+++ b/formats/format_g723.c
@@ -40,7 +40,7 @@
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 ? */
@@ -65,15 +65,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 33f963953..366f85d8d 100644
--- a/formats/format_g726.c
+++ b/formats/format_g726.c
@@ -117,22 +117,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 91dc855f1..324371c33 100644
--- a/formats/format_g729.c
+++ b/formats/format_g729.c
@@ -46,20 +46,16 @@
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 b737c97e5..70600b47f 100644
--- a/formats/format_gsm.c
+++ b/formats/format_gsm.c
@@ -53,19 +53,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 586e2d8e5..97bca21f0 100644
--- a/formats/format_h263.c
+++ b/formats/format_h263.c
@@ -67,7 +67,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;
@@ -85,15 +85,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 9230129e7..8860d8831 100644
--- a/formats/format_h264.c
+++ b/formats/format_h264.c
@@ -59,7 +59,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;
@@ -77,15 +77,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 8b41ab228..326a04ebd 100644
--- a/formats/format_ilbc.c
+++ b/formats/format_ilbc.c
@@ -45,19 +45,15 @@
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 4891f7ed5..b4fd3b36a 100644
--- a/formats/format_pcm.c
+++ b/formats/format_pcm.c
@@ -78,21 +78,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 e15e20f46..d39096a21 100644
--- a/formats/format_siren14.c
+++ b/formats/format_siren14.c
@@ -40,20 +40,15 @@
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 298992c3c..839675072 100644
--- a/formats/format_siren7.c
+++ b/formats/format_siren7.c
@@ -40,20 +40,15 @@
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 5a5cde777..20985ef90 100644
--- a/formats/format_sln.c
+++ b/formats/format_sln.c
@@ -34,20 +34,15 @@
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 c3da4ab94..82379f641 100644
--- a/formats/format_vox.c
+++ b/formats/format_vox.c
@@ -40,20 +40,15 @@
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 ce8a8bf0a..b4e1f34f2 100644
--- a/formats/format_wav.c
+++ b/formats/format_wav.c
@@ -369,7 +369,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;
@@ -391,16 +391,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 8d7d87f65..cd1cc6a2a 100644
--- a/formats/format_wav_gsm.c
+++ b/formats/format_wav_gsm.c
@@ -419,18 +419,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;
}