libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

commit 508fe889b1e71b2ba1c2d277cbdef6f52f0f1e64
parent f2672ad628b886d47afe2494291232bc936d8f2b
Author: Christian Grothoff <christian@grothoff.org>
Date:   Tue, 24 Apr 2012 18:27:29 +0000

-LRN: deduplication and fix

Diffstat:
Msrc/main/extractor.c | 14++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)

diff --git 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) { pl_pick_next_buffer_at (plugin, plugin->fpos + plugin->map_size + pos, 0); } - if (plugin->fsize + pos - 1 >= plugin->fpos && plugin->fsize + pos - 1 <= plugin->fpos + plugin->map_size) + if (plugin->fsize + pos - 1 < plugin->fpos || plugin->fsize + pos - 1 > plugin->fpos + plugin->map_size) { - plugin->shm_pos = plugin->fsize + pos - plugin->fpos; - return plugin->fpos + plugin->shm_pos - 1; + if (0 != pl_pick_next_buffer_at (plugin, plugin->fsize - MAX_READ, 0)) + return -1; } - if (0 != pl_pick_next_buffer_at (plugin, plugin->fsize - MAX_READ, 0)) - return -1; plugin->shm_pos = plugin->fsize + pos - plugin->fpos; - return plugin->fsize + pos - 1; + if (plugin->shm_pos < 0) + plugin->shm_pos = 0; + else if (plugin->shm_pos >= plugin->map_size) + plugin->shm_pos = plugin->map_size - 1; + return plugin->fpos + plugin->shm_pos - 1; break; } return -1;