aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-04-24 18:27:29 +0000
committerChristian Grothoff <christian@grothoff.org>2012-04-24 18:27:29 +0000
commit508fe889b1e71b2ba1c2d277cbdef6f52f0f1e64 (patch)
treeecbed3e1b11dcc214592c2f038d14a40e1e87ee5
parentf2672ad628b886d47afe2494291232bc936d8f2b (diff)
downloadlibextractor-508fe889b1e71b2ba1c2d277cbdef6f52f0f1e64.tar.gz
libextractor-508fe889b1e71b2ba1c2d277cbdef6f52f0f1e64.zip
-LRN: deduplication and fix
-rw-r--r--src/main/extractor.c14
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;