aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-09-03 14:06:39 +0000
committerChristian Grothoff <christian@grothoff.org>2012-09-03 14:06:39 +0000
commit0f8ae18c98101a92b0608c6b719bb8a4af7743f0 (patch)
tree96cc392bc3cab6ba74b4323549c4e99d942eb053
parent864bea070af30ab3c763f110a323fa7b128e4038 (diff)
downloadlibextractor-0f8ae18c98101a92b0608c6b719bb8a4af7743f0.tar.gz
libextractor-0f8ae18c98101a92b0608c6b719bb8a4af7743f0.zip
-simplify logic
-rw-r--r--src/main/extractor_datasource.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/main/extractor_datasource.c b/src/main/extractor_datasource.c
index 0aaafcb..f15321f 100644
--- a/src/main/extractor_datasource.c
+++ b/src/main/extractor_datasource.c
@@ -320,15 +320,13 @@ static int64_t
320bfds_seek (struct BufferedFileDataSource *bfds, 320bfds_seek (struct BufferedFileDataSource *bfds,
321 int64_t pos, int whence) 321 int64_t pos, int whence)
322{ 322{
323 uint64_t npos;
324
323 switch (whence) 325 switch (whence)
324 { 326 {
325 case SEEK_CUR: 327 case SEEK_CUR:
326 if (bfds->fpos + bfds->buffer_pos + pos < 0) 328 npos = bfds->fpos + bfds->buffer_pos + pos;
327 { 329 if (npos > bfds->fsize)
328 LOG ("Invalid seek operation\n");
329 return -1;
330 }
331 if (bfds->fpos + bfds->buffer_pos + pos > bfds->fsize)
332 { 330 {
333 LOG ("Invalid seek operation to %lld from %llu (max is %llu)\n", 331 LOG ("Invalid seek operation to %lld from %llu (max is %llu)\n",
334 (long long) pos, 332 (long long) pos,
@@ -341,15 +339,15 @@ bfds_seek (struct BufferedFileDataSource *bfds,
341 (bfds->buffer_pos + pos >= 0) ) ) 339 (bfds->buffer_pos + pos >= 0) ) )
342 { 340 {
343 bfds->buffer_pos += pos; 341 bfds->buffer_pos += pos;
344 return bfds->buffer_pos + bfds->fpos; 342 return npos;
345 } 343 }
346 if (0 != bfds_pick_next_buffer_at (bfds, 344 if (0 != bfds_pick_next_buffer_at (bfds,
347 bfds->fpos + bfds->buffer_pos + pos)) 345 npos))
348 { 346 {
349 LOG ("seek operation failed\n"); 347 LOG ("seek operation failed\n");
350 return -1; 348 return -1;
351 } 349 }
352 return bfds->fpos; 350 return npos;
353 case SEEK_END: 351 case SEEK_END:
354 if (pos > 0) 352 if (pos > 0)
355 { 353 {