diff options
author | Neal H. Walfield <neal@g10code.com> | 2015-12-15 13:09:27 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@g10code.com> | 2015-12-15 13:09:50 +0100 |
commit | f369efd6712148dc7ed40dba6d1ff5b0e169431a (patch) | |
tree | 49ee59d35181b65a7f7062b6235db207870020d7 /kbx | |
parent | gpg: Improve the keyblock cache's transparency. (diff) | |
download | gnupg2-f369efd6712148dc7ed40dba6d1ff5b0e169431a.tar.xz gnupg2-f369efd6712148dc7ed40dba6d1ff5b0e169431a.zip |
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 <neal@g10code.com>
Diffstat (limited to 'kbx')
-rw-r--r-- | kbx/keybox-search.c | 29 | ||||
-rw-r--r-- | kbx/keybox.h | 4 |
2 files changed, 31 insertions, 2 deletions
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; +} diff --git a/kbx/keybox.h b/kbx/keybox.h index c91a28299..8b75db45c 100644 --- a/kbx/keybox.h +++ b/kbx/keybox.h @@ -77,8 +77,6 @@ int keybox_set_ephemeral (KEYBOX_HANDLE hd, int yes); int keybox_lock (KEYBOX_HANDLE hd, int yes); -off_t keybox_offset (KEYBOX_HANDLE hd); - /*-- keybox-file.c --*/ /* Fixme: This function does not belong here: Provide a better interface to create a new keybox file. */ @@ -97,6 +95,8 @@ int keybox_search (KEYBOX_HANDLE hd, KEYBOX_SEARCH_DESC *desc, size_t ndesc, keybox_blobtype_t want_blobtype, size_t *r_descindex, unsigned long *r_skipped); +off_t keybox_offset (KEYBOX_HANDLE hd); +gpg_error_t keybox_seek (KEYBOX_HANDLE hd, off_t offset); /*-- keybox-update.c --*/ gpg_error_t keybox_insert_keyblock (KEYBOX_HANDLE hd, |