diff options
author | Liong Sauw Ming <ming@teluu.com> | 2013-06-18 04:08:08 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2013-06-18 04:08:08 +0000 |
commit | 7949b9e53b97281cfa4526ffe5cf7c7d887b7025 (patch) | |
tree | 00ffee454e1528a56aa44a93eb0ee4da83bfb13e /pjmedia | |
parent | 060b9ffbf5ef8b92feee9cbe009cd7e4f2cb49b7 (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.c | 38 |
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; |