From 6932383e66329cbf1df65213707f1ca1f103db48 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Tue, 27 Sep 2011 23:21:29 +0000 Subject: [PATCH] Improving deassembling of buffers --- src/arch.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/arch.c b/src/arch.c index 557b9cb..927462d 100644 --- a/src/arch.c +++ b/src/arch.c @@ -729,13 +729,23 @@ static off_t _arch_seek_buffer(Arch * arch, off_t offset, int whence) { if(whence == SEEK_SET) { - if(offset < 0 || (size_t)offset > arch->buffer_cnt) + if(offset < 0 || (size_t)offset >= arch->buffer_cnt) return -error_set_code(1, "%s", "Invalid seek"); arch->buffer_pos = offset; - return offset; } - /* FIXME implement */ - return -error_set_code(1, "%s", "Not implemented"); + else if(whence == SEEK_CUR) + { + if(arch->buffer_pos + offset < 0) + return -error_set_code(1, "%s", "Invalid seek"); + if(offset > 0 && (size_t)offset + arch->buffer_pos + >= arch->buffer_cnt) + return -error_set_code(1, "%s", "Invalid seek"); + arch->buffer_pos += offset; + } + else + /* FIXME implement */ + return -error_set_code(1, "%s", "Not implemented"); + return arch->buffer_pos; }