commit 508fe889b1e71b2ba1c2d277cbdef6f52f0f1e64
parent f2672ad628b886d47afe2494291232bc936d8f2b
Author: Christian Grothoff <christian@grothoff.org>
Date: Tue, 24 Apr 2012 18:27:29 +0000
-LRN: deduplication and fix
Diffstat:
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;