From: Mark Spencer Date: Wed, 9 Jun 2004 20:55:20 +0000 (+0000) Subject: Merge rmarchev's vox fixes (bug #1812) X-Git-Tag: 1.0.0-rc1~274 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8800bd6b1f61a838be4243789a1068aa51e37da6;p=thirdparty%2Fasterisk.git Merge rmarchev's vox fixes (bug #1812) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3183 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/formats/format_vox.c b/formats/format_vox.c index 095332a515..92f4f4e565 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()