summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2013-06-18 04:08:08 +0000
committerLiong Sauw Ming <ming@teluu.com>2013-06-18 04:08:08 +0000
commit7949b9e53b97281cfa4526ffe5cf7c7d887b7025 (patch)
tree00ffee454e1528a56aa44a93eb0ee4da83bfb13e /pjmedia
parent060b9ffbf5ef8b92feee9cbe009cd7e4f2cb49b7 (diff)
Closed #1678: Proper error handling in WAV writer
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4536 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia/wav_writer.c38
1 files changed, 30 insertions, 8 deletions
diff --git a/pjmedia/src/pjmedia/wav_writer.c b/pjmedia/src/pjmedia/wav_writer.c
index d1636276..e1d0d66c 100644
--- a/pjmedia/src/pjmedia/wav_writer.c
+++ b/pjmedia/src/pjmedia/wav_writer.c
@@ -398,7 +398,10 @@ static pj_status_t file_on_destroy(pjmedia_port *this_port)
/* Get file size. */
status = pj_file_getpos(fport->fd, &file_size);
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_file_close(fport->fd);
+ return status;
+ }
/* Calculate wave fields */
wave_file_len = (pj_uint32_t)(file_size - 8);
@@ -411,12 +414,18 @@ static pj_status_t file_on_destroy(pjmedia_port *this_port)
/* Seek to the file_len field. */
status = pj_file_setpos(fport->fd, FILE_LEN_POS, PJ_SEEK_SET);
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_file_close(fport->fd);
+ return status;
+ }
/* Write file_len */
bytes = sizeof(wave_file_len);
status = pj_file_write(fport->fd, &wave_file_len, &bytes);
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_file_close(fport->fd);
+ return status;
+ }
/* Write samples_len in FACT chunk */
if (fport->fmt_tag != PJMEDIA_WAVE_FMT_TAG_PCM) {
@@ -430,26 +439,39 @@ static pj_status_t file_on_destroy(pjmedia_port *this_port)
/* Seek to samples_len field. */
status = pj_file_setpos(fport->fd, SAMPLES_LEN_POS, PJ_SEEK_SET);
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_file_close(fport->fd);
+ return status;
+ }
/* Write samples_len */
bytes = sizeof(wav_samples_len);
status = pj_file_write(fport->fd, &wav_samples_len, &bytes);
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_file_close(fport->fd);
+ return status;
+ }
}
/* Seek to data_len field. */
status = pj_file_setpos(fport->fd, data_len_pos, PJ_SEEK_SET);
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_file_close(fport->fd);
+ return status;
+ }
/* Write file_len */
bytes = sizeof(wave_data_len);
status = pj_file_write(fport->fd, &wave_data_len, &bytes);
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_file_close(fport->fd);
+ return status;
+ }
/* Close file */
status = pj_file_close(fport->fd);
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS)
+ return status;
/* Done. */
return PJ_SUCCESS;