From f369efd6712148dc7ed40dba6d1ff5b0e169431a Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Tue, 15 Dec 2015 13:09:27 +0100 Subject: gpg: Improve the keyblock cache's transparency. * kbx/keybox-search.c (keybox_seek): New function. * g10/keydb.c (keydb_search): When reading from the cache, seek to just after the cached record. -- Signed-off-by: Neal H. Walfield --- kbx/keybox-search.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'kbx/keybox-search.c') diff --git a/kbx/keybox-search.c b/kbx/keybox-search.c index df959b67d..1edb4ae38 100644 --- a/kbx/keybox-search.c +++ b/kbx/keybox-search.c @@ -1196,3 +1196,32 @@ keybox_offset (KEYBOX_HANDLE hd) return 0; return ftello (hd->fp); } + +gpg_error_t +keybox_seek (KEYBOX_HANDLE hd, off_t offset) +{ + int err; + + if (hd->error) + return hd->error; /* still in error state */ + + if (! hd->fp) + { + if (offset == 0) + /* No need to open the file. An unopened file is effectively at + offset 0. */ + return 0; + + hd->fp = fopen (hd->kb->fname, "rb"); + if (!hd->fp) + { + hd->error = gpg_error_from_syserror (); + return hd->error; + } + } + + err = fseeko (hd->fp, offset, SEEK_SET); + hd->error = gpg_error_from_errno (err); + + return hd->error; +} -- cgit v1.2.3