From 8800bd6b1f61a838be4243789a1068aa51e37da6 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Wed, 9 Jun 2004 20:55:20 +0000 Subject: Merge rmarchev's vox fixes (bug #1812) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3183 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- formats/format_vox.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'formats') diff --git a/formats/format_vox.c b/formats/format_vox.c index 095332a51..92f4f4e56 100755 --- a/formats/format_vox.c +++ b/formats/format_vox.c @@ -167,17 +167,36 @@ static char *vox_getcomment(struct ast_filestream *s) static int vox_seek(struct ast_filestream *fs, long sample_offset, int whence) { - return -1; + off_t offset=0,min,cur,max,distance; + + min = 0; + cur = lseek(fs->fd, 0, SEEK_CUR); + max = lseek(fs->fd, 0, SEEK_END); + /* have to fudge to frame here, so not fully to sample */ + distance = sample_offset/2; + if(whence == SEEK_SET) + offset = distance; + else if(whence == SEEK_CUR || whence == SEEK_FORCECUR) + offset = distance + cur; + else if(whence == SEEK_END) + offset = max - distance; + if (whence != SEEK_FORCECUR) { + offset = (offset > max)?max:offset; + offset = (offset < min)?min:offset; + } + return lseek(fs->fd, offset, SEEK_SET); } static int vox_trunc(struct ast_filestream *fs) { - return -1; + return ftruncate(fs->fd, lseek(fs->fd,0,SEEK_CUR)); } static long vox_tell(struct ast_filestream *fs) { - return -1; + off_t offset; + offset = lseek(fs->fd, 0, SEEK_CUR); + return offset; } int load_module() -- cgit v1.2.3