kbx: Add extra flags to fopen for use by Windows.

* kbx/keybox-search.c (open_file): Use sysopen and sequential.
* kbx/keybox-update.c (create_tmp_file): Ditto.
(blob_filecopy): Ditto.
(keybox_set_flags): Ditto.
(keybox_delete): Ditto.
(keybox_compress): Ditto.
--

Under Windows "sysopen" requests that direct API calls (CreateFile et
al.) are used instead of the libc wrappers.  This may or may not
improve the performance.

Using "sequential" is a hint to Windows to assume that a file is in
general access in a sequential manner.  This will have an affect only
with a future libgpg-error.
This commit is contained in:
Werner Koch 2023-05-04 11:55:26 +02:00
parent 68613a6a9d
commit a7dbf11954
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
3 changed files with 8 additions and 8 deletions

View File

@ -878,7 +878,7 @@ static gpg_error_t
open_file (KEYBOX_HANDLE hd)
{
hd->fp = es_fopen (hd->kb->fname, "rb");
hd->fp = es_fopen (hd->kb->fname, "rb,sysopen,sequential");
if (!hd->fp)
{
hd->error = gpg_error_from_syserror ();

View File

@ -78,7 +78,7 @@ create_tmp_file (const char *template,
err = keybox_tmp_names (template, 0, r_bakfname, r_tmpfname);
if (!err)
{
*r_fp = es_fopen (*r_tmpfname, "wb");
*r_fp = es_fopen (*r_tmpfname, "wb,sysopen,sequential");
if (!*r_fp)
{
err = gpg_error_from_syserror ();
@ -174,12 +174,12 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
if ((ec = gnupg_access (fname, W_OK)))
return gpg_error (ec);
fp = es_fopen (fname, "rb");
fp = es_fopen (fname, "rb,sysopen,sequential");
if (mode == FILECOPY_INSERT && !fp && errno == ENOENT)
{
/* Insert mode but file does not exist:
Create a new keybox file. */
newfp = es_fopen (fname, "wb");
newfp = es_fopen (fname, "wb,sysopen,sequential");
if (!newfp )
return gpg_error_from_syserror ();
@ -536,7 +536,7 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value)
off += flag_pos;
_keybox_close_file (hd);
fp = es_fopen (hd->kb->fname, "r+b");
fp = es_fopen (hd->kb->fname, "r+b,sysopen,sequential");
if (!fp)
return gpg_error_from_syserror ();
@ -601,7 +601,7 @@ keybox_delete (KEYBOX_HANDLE hd)
off += 4;
_keybox_close_file (hd);
fp = es_fopen (hd->kb->fname, "r+b");
fp = es_fopen (hd->kb->fname, "r+b,sysopen,sequential");
if (!fp)
return gpg_error_from_syserror ();
@ -656,7 +656,7 @@ keybox_compress (KEYBOX_HANDLE hd)
if ((ec = gnupg_access (fname, W_OK)))
return gpg_error (ec);
fp = es_fopen (fname, "rb");
fp = es_fopen (fname, "rb,sysopen,sequential");
if (!fp && errno == ENOENT)
return 0; /* Ready. File has been deleted right after the access above. */
if (!fp)

View File

@ -693,7 +693,7 @@ keydb_release (KEYDB_HANDLE hd)
switch (hd->active[i].type)
{
case KEYDB_RESOURCE_TYPE_NONE:
break;
break;
case KEYDB_RESOURCE_TYPE_KEYBOX:
keybox_release (hd->active[i].u.kr);
break;