diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-04-24 18:27:29 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-04-24 18:27:29 +0000 |
commit | 508fe889b1e71b2ba1c2d277cbdef6f52f0f1e64 (patch) | |
tree | ecbed3e1b11dcc214592c2f038d14a40e1e87ee5 | |
parent | f2672ad628b886d47afe2494291232bc936d8f2b (diff) | |
download | libextractor-508fe889b1e71b2ba1c2d277cbdef6f52f0f1e64.tar.gz libextractor-508fe889b1e71b2ba1c2d277cbdef6f52f0f1e64.zip |
-LRN: deduplication and fix
-rw-r--r-- | src/main/extractor.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/main/extractor.c b/src/main/extractor.c index cc39e6d..f7b9cb9 100644 --- a/src/main/extractor.c +++ b/src/main/extractor.c | |||
@@ -2538,15 +2538,17 @@ pl_seek (struct EXTRACTOR_PluginList *plugin, int64_t pos, int whence) | |||
2538 | { | 2538 | { |
2539 | pl_pick_next_buffer_at (plugin, plugin->fpos + plugin->map_size + pos, 0); | 2539 | pl_pick_next_buffer_at (plugin, plugin->fpos + plugin->map_size + pos, 0); |
2540 | } | 2540 | } |
2541 | if (plugin->fsize + pos - 1 >= plugin->fpos && plugin->fsize + pos - 1 <= plugin->fpos + plugin->map_size) | 2541 | if (plugin->fsize + pos - 1 < plugin->fpos || plugin->fsize + pos - 1 > plugin->fpos + plugin->map_size) |
2542 | { | 2542 | { |
2543 | plugin->shm_pos = plugin->fsize + pos - plugin->fpos; | 2543 | if (0 != pl_pick_next_buffer_at (plugin, plugin->fsize - MAX_READ, 0)) |
2544 | return plugin->fpos + plugin->shm_pos - 1; | 2544 | return -1; |
2545 | } | 2545 | } |
2546 | if (0 != pl_pick_next_buffer_at (plugin, plugin->fsize - MAX_READ, 0)) | ||
2547 | return -1; | ||
2548 | plugin->shm_pos = plugin->fsize + pos - plugin->fpos; | 2546 | plugin->shm_pos = plugin->fsize + pos - plugin->fpos; |
2549 | return plugin->fsize + pos - 1; | 2547 | if (plugin->shm_pos < 0) |
2548 | plugin->shm_pos = 0; | ||
2549 | else if (plugin->shm_pos >= plugin->map_size) | ||
2550 | plugin->shm_pos = plugin->map_size - 1; | ||
2551 | return plugin->fpos + plugin->shm_pos - 1; | ||
2550 | break; | 2552 | break; |
2551 | } | 2553 | } |
2552 | return -1; | 2554 | return -1; |