Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gpgme for openSUSE:Factory checked 
in at 2026-06-30 15:11:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gpgme (Old)
 and      /work/SRC/openSUSE:Factory/.gpgme.new.11887 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gpgme"

Tue Jun 30 15:11:16 2026 rev:119 rq:1362358 version:2.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/gpgme/gpgme.changes      2026-06-01 
17:58:39.893032549 +0200
+++ /work/SRC/openSUSE:Factory/.gpgme.new.11887/gpgme.changes   2026-06-30 
15:11:31.548166627 +0200
@@ -1,0 +2,6 @@
+Mon Jun 29 04:08:23 UTC 2026 - Andreas Stieger <[email protected]>
+
+- Update to 2.1.1:
+  * gpgme_op_export now also returns operational errors
+
+-------------------------------------------------------------------

Old:
----
  gpgme-2.1.0.tar.bz2
  gpgme-2.1.0.tar.bz2.sig

New:
----
  gpgme-2.1.1.tar.bz2
  gpgme-2.1.1.tar.bz2.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gpgme.spec ++++++
--- /var/tmp/diff_new_pack.bHKJeT/_old  2026-06-30 15:11:32.208188983 +0200
+++ /var/tmp/diff_new_pack.bHKJeT/_new  2026-06-30 15:11:32.212189118 +0200
@@ -19,7 +19,7 @@
 
 %define sover 45
 Name:           gpgme
-Version:        2.1.0
+Version:        2.1.1
 Release:        0
 Summary:        Programmatic library interface to GnuPG
 License:        GPL-3.0-or-later AND LGPL-2.1-or-later

++++++ gpgme-2.1.0.tar.bz2 -> gpgme-2.1.1.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/ChangeLog new/gpgme-2.1.1/ChangeLog
--- old/gpgme-2.1.0/ChangeLog   2026-05-18 11:17:49.000000000 +0200
+++ new/gpgme-2.1.1/ChangeLog   2026-06-25 16:05:30.000000000 +0200
@@ -1,3 +1,48 @@
+2026-06-25  Werner Koch  <[email protected]>
+
+       Release 2.1.1.
+       + commit c68741376b5561f6a9885819c55922cd189a5172
+
+
+       w32: Use gpgrt_w32_set_errno if gpgrt is new enough.
+       + commit df6c94f136e5411aabeb3000403f402f2a25092b
+       * src/w32-io.c (_gpgme_io_spawn): Add mapping from Windows error
+         number.
+       (_gpgme_io_select): Ditto.
+
+2026-06-22  Ingo Klöcker  <[email protected]>
+
+       Trace result of gpgme_op_export.
+       + commit c2613252133a959bace04f0f78f913029d247e0b
+       * src/export.c (gpgme_op_export): Trace the returned error.
+
+2026-06-22  Werner Koch  <[email protected]>
+
+       Let gpgme_op_export also return operational errors.
+       + commit 8dad6c1d1ccd042c5700e7fa07025ce00da590fc
+       * src/export.c (gpgme_op_export): On success check and return
+         operational errors.
+
+2026-05-21  NIIBE Yutaka  <[email protected]>
+
+       json:w32: Add CRLF handling for armored output.
+       + commit 95d7cdb6b4309ef77f875edaf09a9632268ea1d3
+       * src/json-core.c (make_data_object): Remove CR for CRLF when
+       it's armored output.
+
+2026-05-20  NIIBE Yutaka  <[email protected]>
+
+       m4: Deprecate AM_PATH_GPGME_GLIB macro.
+       + commit 2e02b9d0243d6c27562b01f18bf4976a816af6f6
+       * src/gpgme.m4 (AM_PATH_GPGME_GLIB): Deprecated.
+
+2026-05-19  NIIBE Yutaka  <[email protected]>
+
+       w32:io: Serialize the access to ctx->* between reader/writer and io.
+       + commit 6ef2d2a4d663d566df419058b93cfa52dd24e9af
+       * src/w32-io.c (reader, writer): Protect shared access to ctx->*
+       correctly, by using the internal buffer.
+
 2026-05-18  Werner Koch  <[email protected]>
 
        Release 2.1.0.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/NEWS new/gpgme-2.1.1/NEWS
--- old/gpgme-2.1.0/NEWS        2026-05-18 11:14:43.000000000 +0200
+++ new/gpgme-2.1.1/NEWS        2026-06-25 16:04:19.000000000 +0200
@@ -1,3 +1,19 @@
+Noteworthy changes in version 2.1.1 (2026-06-25)   [C46/A1/R1]
+------------------------------------------------
+
+ * gpgme_op_export now also returns operational errors.  [T8287]
+
+ * w32: Improve debug output in spawn and selection functions.
+   [rMf5ad431a1c]
+
+ * w32: Improve serialization between reader and writer threads.
+   [T8264]
+
+ * w32: Add CRLF handling for armored output in gpgme-json.  [T8263]
+
+ Release-info: https://dev.gnupg.org/T8269
+
+
 Noteworthy changes in version 2.1.0 (2026-05-18)   [C46/A1/R0]
 ------------------------------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/README new/gpgme-2.1.1/README
--- old/gpgme-2.1.0/README      2025-12-11 09:40:41.000000000 +0100
+++ new/gpgme-2.1.1/README      2026-06-25 16:04:19.000000000 +0200
@@ -1,7 +1,7 @@
                        GPGME - GnuPG Made Easy
                      ---------------------------
 
-Copyright 2001-2025 g10 Code GmbH
+Copyright 2001-2026 g10 Code GmbH
 
 This file is free software; as a special exception the author gives
 unlimited permission to copy and/or distribute it, with or without
@@ -65,30 +65,14 @@
        $ gpg --verify gpgme-x.y.z.tar.gz.sig gpgme-x.y.z.tar.gz
 
    This checks that the detached signature gpgme-x.y.z.tar.gz.sig is
-   indeed a a signature of gpgme-x.y.z.tar.gz.  The key used to create
-   this signature is at least one of:
+   indeed a a signature of gpgme-x.y.z.tar.gz.
 
-     rsa2048 2011-01-12 [expires: 2019-12-31]
-     Key fingerprint = D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
-     Werner Koch (dist sig)
-
-     rsa2048 2014-10-29 [expires: 2019-12-31]
-     Key fingerprint = 46CC 7308 65BB 5C78 EBAB  ADCF 0437 6F3E E085 6959
-     David Shaw (GnuPG Release Signing Key) <dshaw 'at' jabberwocky.com>
-
-     rsa2048 2014-10-29 [expires: 2020-10-30]
-     Key fingerprint = 031E C253 6E58 0D8E A286  A9F2 2071 B08A 33BD 3F06
-     NIIBE Yutaka (GnuPG Release Key) <gniibe 'at' fsij.org>
-
-     rsa3072 2017-03-17 [expires: 2027-03-15]
-     Key fingerprint = 5B80 C575 4298 F0CB 55D8  ED6A BCEF 7E29 4B09 2E28
-     Andre Heinecke (Release Signing Key)
-
-   The keys are available at <https://gnupg.org/signature_key.html>
-   and in released GnuPG tarballs in the file g10/distsigkey.gpg .
-   You have to make sure that these are really the desired keys and
-   not faked one.  You should do this by comparing the fingerprints
-   with the fingerprints published elsewhere.
+   The keys used to create a signature are available at
+   <https://gnupg.org/signature_key.html> and in released GnuPG
+   tarballs in the file g10/distsigkey.gpg .  You have to make sure
+   that these are really the desired keys and not faked one.  You
+   should do this by comparing the fingerprints with the fingerprints
+   published for example with all GnuPG related release announcements.
 
 b) If you don't have any of the above programs, you have to verify
    the SHA1 checksum:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/VERSION new/gpgme-2.1.1/VERSION
--- old/gpgme-2.1.0/VERSION     2026-05-18 11:17:39.000000000 +0200
+++ new/gpgme-2.1.1/VERSION     2026-06-25 16:05:19.000000000 +0200
@@ -1,2 +1,2 @@
-2.1.0
-5bc31cad011192ef5d06304a28f3b8bf1382081c
+2.1.1
+c68741376b5561f6a9885819c55922cd189a5172
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/conf/config.h.in 
new/gpgme-2.1.1/conf/config.h.in
--- old/gpgme-2.1.0/conf/config.h.in    2026-05-18 11:17:47.000000000 +0200
+++ new/gpgme-2.1.1/conf/config.h.in    2026-06-25 16:04:49.000000000 +0200
@@ -360,5 +360,5 @@
 #define GPG_ERR_ENABLE_GETTEXT_MACROS 1
 
 #define CRIGHTBLURB "Copyright (C) 2000 Werner Koch\n" \
-                    "Copyright (C) 2001--2025 g10 Code GmbH\n"
+                    "Copyright (C) 2001--2026 g10 Code GmbH\n"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/configure new/gpgme-2.1.1/configure
--- old/gpgme-2.1.0/configure   2026-05-18 11:17:40.000000000 +0200
+++ new/gpgme-2.1.1/configure   2026-06-25 16:05:20.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for gpgme 2.1.0.
+# Generated by GNU Autoconf 2.71 for gpgme 2.1.1.
 #
 # Report bugs to <https://bugs.gnupg.org>.
 #
@@ -621,8 +621,8 @@
 # Identity of this package.
 PACKAGE_NAME='gpgme'
 PACKAGE_TARNAME='gpgme'
-PACKAGE_VERSION='2.1.0'
-PACKAGE_STRING='gpgme 2.1.0'
+PACKAGE_VERSION='2.1.1'
+PACKAGE_STRING='gpgme 2.1.1'
 PACKAGE_BUGREPORT='https://bugs.gnupg.org'
 PACKAGE_URL=''
 
@@ -1453,7 +1453,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures gpgme 2.1.0 to adapt to many kinds of systems.
+\`configure' configures gpgme 2.1.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1524,7 +1524,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gpgme 2.1.0:";;
+     short | recursive ) echo "Configuration of gpgme 2.1.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1666,7 +1666,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gpgme configure 2.1.0
+gpgme configure 2.1.1
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2323,7 +2323,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by gpgme $as_me 2.1.0, which was
+It was created by gpgme $as_me 2.1.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3095,7 +3095,7 @@
 #
 LIBGPGME_LT_CURRENT=46
 LIBGPGME_LT_AGE=1
-LIBGPGME_LT_REVISION=0
+LIBGPGME_LT_REVISION=1
 ################################################
 
 
@@ -3113,7 +3113,7 @@
 
 VERSION_MAJOR=2
 VERSION_MINOR=1
-VERSION_MICRO=0
+VERSION_MICRO=1
 
 
 
@@ -3634,7 +3634,7 @@
 
 # Define the identity of the package.
  PACKAGE='gpgme'
- VERSION='2.1.0'
+ VERSION='2.1.1'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -6501,7 +6501,7 @@
 
 
 
-VERSION_NUMBER=0x020100
+VERSION_NUMBER=0x020101
 
 
 # We need to compile and run a program on the build machine.  A
@@ -15650,8 +15650,8 @@
 #
 # Provide information about the build.
 #
-BUILD_REVISION="5bc31cad"
-BUILD_COMMITID="5bc31cad011192ef5d06304a28f3b8bf1382081c"
+BUILD_REVISION="c6874137"
+BUILD_COMMITID="c68741376b5561f6a9885819c55922cd189a5172"
 
 
 printf "%s\n" "#define BUILD_REVISION \"$BUILD_REVISION\"" >>confdefs.h
@@ -15661,7 +15661,7 @@
 
 
 BUILD_VERSION=`echo "$PACKAGE_VERSION" | sed 's/\([0-9.]*\).*/\1./'`
-BUILD_VERSION="${BUILD_VERSION}23491"
+BUILD_VERSION="${BUILD_VERSION}50823"
 BUILD_FILEVERSION=`echo "${BUILD_VERSION}" | tr . ,`
 
 
@@ -18206,7 +18206,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by gpgme $as_me 2.1.0, which was
+This file was extended by gpgme $as_me 2.1.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -18274,7 +18274,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-gpgme config.status 2.1.0
+gpgme config.status 2.1.1
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
@@ -20229,7 +20229,7 @@
 echo "
         GPGME v${VERSION} has been configured as follows:
 
-        Revision:          5bc31cad  (23491)
+        Revision:          c6874137  (50823)
         Platform:          $host
 
         UI Server:         $uiserver
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/configure.ac new/gpgme-2.1.1/configure.ac
--- old/gpgme-2.1.0/configure.ac        2026-05-18 11:14:06.000000000 +0200
+++ new/gpgme-2.1.1/configure.ac        2026-06-25 16:04:19.000000000 +0200
@@ -32,7 +32,7 @@
 m4_define([mym4_package],[gpgme])
 m4_define([mym4_major], [2])
 m4_define([mym4_minor], [1])
-m4_define([mym4_micro], [0])
+m4_define([mym4_micro], [1])
 
 # Below is m4 magic to extract and compute the git revision number,
 # the decimalized short revision number, a beta version string and a
@@ -57,7 +57,7 @@
 #
 LIBGPGME_LT_CURRENT=46
 LIBGPGME_LT_AGE=1
-LIBGPGME_LT_REVISION=0
+LIBGPGME_LT_REVISION=1
 ################################################
 
 AC_SUBST(LIBGPGME_LT_CURRENT)
@@ -729,7 +729,7 @@
 #define GPG_ERR_ENABLE_GETTEXT_MACROS 1
 
 #define CRIGHTBLURB "Copyright (C) 2000 Werner Koch\n" \
-                    "Copyright (C) 2001--2025 g10 Code GmbH\n"
+                    "Copyright (C) 2001--2026 g10 Code GmbH\n"
 ])
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/doc/defsincdate 
new/gpgme-2.1.1/doc/defsincdate
--- old/gpgme-2.1.0/doc/defsincdate     2026-05-18 11:17:48.000000000 +0200
+++ new/gpgme-2.1.1/doc/defsincdate     2026-06-25 16:05:29.000000000 +0200
@@ -1 +1 @@
-1779015582
+1782141765
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/doc/gpgme.info 
new/gpgme-2.1.1/doc/gpgme.info
--- old/gpgme-2.1.0/doc/gpgme.info      2026-05-15 15:44:35.000000000 +0200
+++ new/gpgme-2.1.1/doc/gpgme.info      2026-06-25 16:04:54.000000000 +0200
@@ -19,8 +19,8 @@
 
    This file documents the GPGME library.
 
-   This is Edition 2.0.2-beta35, last updated 23 April 2026, of ‘The
-‘GnuPG Made Easy’ Reference Manual’, for Version 2.0.2-beta35.
+   This is Edition 2.1.1-beta9, last updated 22 June 2026, of ‘The
+‘GnuPG Made Easy’ Reference Manual’, for Version 2.1.1-beta9.
 
    Copyright © 2002–2008, 2010, 2012–2018 g10 Code GmbH.
 
@@ -37,131 +37,131 @@
 
 
 Indirect:
-gpgme.info-1: 1683
-gpgme.info-2: 303697
+gpgme.info-1: 1680
+gpgme.info-2: 303687
 
 Tag Table:
 (Indirect)
-Node: Top1683
-Node: Introduction9120
-Node: Getting Started9910
-Node: Features11371
-Node: Overview12759
-Node: Preparation13868
-Node: Header14865
-Node: Building the Source15612
-Node: Largefile Support (LFS)18002
-Node: Using Automake23419
-Node: Using Libtool25131
-Node: Library Version Check25428
-Node: Signal Handling31887
-Node: Multi-Threading33157
-Ref: Multi-Threading-Footnote-134573
-Node: Protocols and Engines34996
-Node: Engine Version Check37747
-Node: Engine Information40796
-Node: Engine Configuration44656
-Node: OpenPGP45960
-Node: Cryptographic Message Syntax46300
-Node: Assuan46613
-Node: Algorithms46987
-Ref: Algorithms-Footnote-147466
-Node: Public Key Algorithms47594
-Node: Hash Algorithms50196
-Node: Error Handling51410
-Node: Error Values53284
-Node: Error Sources58487
-Node: Error Codes60927
-Node: Error Strings65948
-Node: Exchanging Data67755
-Node: Creating Data Buffers69640
-Node: Memory Based Data Buffers70156
-Node: File Based Data Buffers73589
-Node: Callback Based Data Buffers76702
-Node: Destroying Data Buffers80893
-Node: Manipulating Data Buffers82400
-Node: Data Buffer I/O Operations82892
-Node: Data Buffer Meta-Data85265
-Node: Data Buffer Convenience90846
-Node: Contexts93120
-Node: Creating Contexts94239
-Node: Destroying Contexts95086
-Node: Result Management95425
-Node: Context Attributes97006
-Node: Protocol Selection98173
-Node: Crypto Engine99219
-Node: Setting the Sender101108
-Node: ASCII Armor102631
-Node: Text Mode103260
-Node: Offline Mode104194
-Node: Pinentry Mode105725
-Node: Included Certificates107619
-Node: Key Listing Mode109065
-Node: Passphrase Callback115387
-Node: Progress Meter Callback118949
-Node: Status Message Callback120934
-Node: Context Flags122699
-Node: Locale131456
-Node: Additional Logs133048
-Node: Key Management135246
-Node: Key objects136470
-Node: Listing Keys154912
-Node: Information About Keys163565
-Node: Manipulating Keys164873
-Node: Generating Keys168861
-Node: Signing Keys187799
-Node: Exporting Keys193558
-Node: Importing Keys201147
-Ref: Importing Keys-Footnote-1210015
-Node: Deleting Keys210143
-Node: Changing Passphrases212566
-Node: Changing TOFU Data213893
-Node: Advanced Key Editing216001
-Node: Crypto Operations218734
-Node: Decrypt220054
-Node: Verify229655
-Node: Decrypt and Verify245978
-Node: Sign248833
-Node: Selecting Signers249397
-Node: Creating a Signature250956
-Node: Signature Notation Data257442
-Node: Encrypt260309
-Node: Encrypting a Plaintext260680
-Node: Random277910
-Node: Getting Random278186
-Node: Miscellaneous280016
-Node: Running other Programs280428
-Node: Using the Assuan protocol282591
-Node: Checking for updates285389
-Node: Run Control290206
-Node: Waiting For Completion290950
-Node: Using External Event Loops293075
-Node: I/O Callback Interface295047
-Node: Registering I/O Callbacks299975
-Node: I/O Callback Example303697
-Node: I/O Callback Example GTK+310322
-Node: I/O Callback Example GDK312111
-Node: I/O Callback Example Qt313753
-Node: Cancellation316041
-Node: UI Server Protocol318349
-Ref: UI Server Protocol-Footnote-1319784
-Node: UI Server Encrypt319903
-Node: UI Server Sign325261
-Node: UI Server Decrypt327614
-Node: UI Server Verify329269
-Node: UI Server Set Input Files332841
-Node: UI Server Sign/Encrypt Files333911
-Node: UI Server Verify/Decrypt Files335719
-Node: UI Server Import/Export Keys337595
-Node: UI Server Checksum Files338657
-Node: Miscellaneous UI Server Commands340875
-Ref: command SENDER342806
-Node: Debugging344508
-Node: Deprecated Functions346667
-Node: Library Copying357370
-Node: Copying385590
-Node: Concept Index423340
-Node: Function and Data Index438198
+Node: Top1680
+Node: Introduction9114
+Node: Getting Started9904
+Node: Features11365
+Node: Overview12753
+Node: Preparation13862
+Node: Header14859
+Node: Building the Source15606
+Node: Largefile Support (LFS)17996
+Node: Using Automake23413
+Node: Using Libtool25125
+Node: Library Version Check25422
+Node: Signal Handling31881
+Node: Multi-Threading33151
+Ref: Multi-Threading-Footnote-134567
+Node: Protocols and Engines34990
+Node: Engine Version Check37741
+Node: Engine Information40790
+Node: Engine Configuration44650
+Node: OpenPGP45954
+Node: Cryptographic Message Syntax46294
+Node: Assuan46607
+Node: Algorithms46981
+Ref: Algorithms-Footnote-147460
+Node: Public Key Algorithms47588
+Node: Hash Algorithms50190
+Node: Error Handling51404
+Node: Error Values53278
+Node: Error Sources58481
+Node: Error Codes60921
+Node: Error Strings65942
+Node: Exchanging Data67749
+Node: Creating Data Buffers69634
+Node: Memory Based Data Buffers70150
+Node: File Based Data Buffers73583
+Node: Callback Based Data Buffers76696
+Node: Destroying Data Buffers80887
+Node: Manipulating Data Buffers82394
+Node: Data Buffer I/O Operations82886
+Node: Data Buffer Meta-Data85259
+Node: Data Buffer Convenience90840
+Node: Contexts93114
+Node: Creating Contexts94233
+Node: Destroying Contexts95080
+Node: Result Management95419
+Node: Context Attributes97000
+Node: Protocol Selection98167
+Node: Crypto Engine99213
+Node: Setting the Sender101102
+Node: ASCII Armor102625
+Node: Text Mode103254
+Node: Offline Mode104188
+Node: Pinentry Mode105719
+Node: Included Certificates107613
+Node: Key Listing Mode109059
+Node: Passphrase Callback115381
+Node: Progress Meter Callback118943
+Node: Status Message Callback120928
+Node: Context Flags122693
+Node: Locale131450
+Node: Additional Logs133042
+Node: Key Management135240
+Node: Key objects136464
+Node: Listing Keys154906
+Node: Information About Keys163559
+Node: Manipulating Keys164867
+Node: Generating Keys168855
+Node: Signing Keys187793
+Node: Exporting Keys193552
+Node: Importing Keys201141
+Ref: Importing Keys-Footnote-1210009
+Node: Deleting Keys210137
+Node: Changing Passphrases212560
+Node: Changing TOFU Data213887
+Node: Advanced Key Editing215995
+Node: Crypto Operations218728
+Node: Decrypt220048
+Node: Verify229649
+Node: Decrypt and Verify245972
+Node: Sign248827
+Node: Selecting Signers249391
+Node: Creating a Signature250950
+Node: Signature Notation Data257436
+Node: Encrypt260303
+Node: Encrypting a Plaintext260674
+Node: Random277904
+Node: Getting Random278180
+Node: Miscellaneous280009
+Node: Running other Programs280421
+Node: Using the Assuan protocol282584
+Node: Checking for updates285382
+Node: Run Control290199
+Node: Waiting For Completion290943
+Node: Using External Event Loops293068
+Node: I/O Callback Interface295040
+Node: Registering I/O Callbacks299968
+Node: I/O Callback Example303687
+Node: I/O Callback Example GTK+310312
+Node: I/O Callback Example GDK312101
+Node: I/O Callback Example Qt313743
+Node: Cancellation316031
+Node: UI Server Protocol318339
+Ref: UI Server Protocol-Footnote-1319774
+Node: UI Server Encrypt319893
+Node: UI Server Sign325251
+Node: UI Server Decrypt327604
+Node: UI Server Verify329259
+Node: UI Server Set Input Files332831
+Node: UI Server Sign/Encrypt Files333901
+Node: UI Server Verify/Decrypt Files335709
+Node: UI Server Import/Export Keys337585
+Node: UI Server Checksum Files338647
+Node: Miscellaneous UI Server Commands340865
+Ref: command SENDER342796
+Node: Debugging344498
+Node: Deprecated Functions346657
+Node: Library Copying357360
+Node: Copying385580
+Node: Concept Index423330
+Node: Function and Data Index438188
 
 End Tag Table
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/doc/gpgme.info-1 
new/gpgme-2.1.1/doc/gpgme.info-1
--- old/gpgme-2.1.0/doc/gpgme.info-1    2026-05-15 15:44:35.000000000 +0200
+++ new/gpgme-2.1.1/doc/gpgme.info-1    2026-06-25 16:04:54.000000000 +0200
@@ -19,8 +19,8 @@
 
    This file documents the GPGME library.
 
-   This is Edition 2.0.2-beta35, last updated 23 April 2026, of ‘The
-‘GnuPG Made Easy’ Reference Manual’, for Version 2.0.2-beta35.
+   This is Edition 2.1.1-beta9, last updated 22 June 2026, of ‘The
+‘GnuPG Made Easy’ Reference Manual’, for Version 2.1.1-beta9.
 
    Copyright © 2002–2008, 2010, 2012–2018 g10 Code GmbH.
 
@@ -41,8 +41,8 @@
 Main Menu
 *********
 
-This is Edition 2.0.2-beta35, last updated 23 April 2026, of ‘The ‘GnuPG
-Made Easy’ Reference Manual’, for Version 2.0.2-beta35 of the GPGME
+This is Edition 2.1.1-beta9, last updated 22 June 2026, of ‘The ‘GnuPG
+Made Easy’ Reference Manual’, for Version 2.1.1-beta9 of the GPGME
 library.
 
 * Menu:
@@ -6618,7 +6618,7 @@
 
  -- Data type: enum gpgme_random_mode_t
 
-     This enum ist used to select special modes of the random generator.
+     This enum is used to select special modes of the random generator.
 
      ‘GPGME_RANDOM_MODE_NORMAL’
           This is the standard mode, you may also use 0 instead of this
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/doc/gpgme.info-2 
new/gpgme-2.1.1/doc/gpgme.info-2
--- old/gpgme-2.1.0/doc/gpgme.info-2    2026-05-15 15:44:35.000000000 +0200
+++ new/gpgme-2.1.1/doc/gpgme.info-2    2026-06-25 16:04:54.000000000 +0200
@@ -19,8 +19,8 @@
 
    This file documents the GPGME library.
 
-   This is Edition 2.0.2-beta35, last updated 23 April 2026, of ‘The
-‘GnuPG Made Easy’ Reference Manual’, for Version 2.0.2-beta35.
+   This is Edition 2.1.1-beta9, last updated 22 June 2026, of ‘The
+‘GnuPG Made Easy’ Reference Manual’, for Version 2.1.1-beta9.
 
    Copyright © 2002–2008, 2010, 2012–2018 g10 Code GmbH.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/doc/gpgme.texi 
new/gpgme-2.1.1/doc/gpgme.texi
--- old/gpgme-2.1.0/doc/gpgme.texi      2026-05-15 11:29:12.000000000 +0200
+++ new/gpgme-2.1.1/doc/gpgme.texi      2026-06-25 16:04:19.000000000 +0200
@@ -7209,7 +7209,7 @@
 @deftp {Data type} {enum gpgme_random_mode_t}
 @tindex gpgme_random_mode_t
 
-This enum ist used to select special modes of the random generator.
+This enum is used to select special modes of the random generator.
 
 @table @code
 @item GPGME_RANDOM_MODE_NORMAL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/gpgme.spec new/gpgme-2.1.1/gpgme.spec
--- old/gpgme-2.1.0/gpgme.spec  2026-05-18 11:17:49.000000000 +0200
+++ new/gpgme-2.1.1/gpgme.spec  2026-06-25 16:05:30.000000000 +0200
@@ -1,7 +1,7 @@
 # This is a template.  The dist target uses it to create the real file.
 Summary: GPGME - GnuPG Made Easy
 Name: gpgme
-Version: 2.1.0
+Version: 2.1.1
 Release: 1
 URL: https://gnupg.org/gpgme.html
 Source: https://www.gnupg.org/ftp/gcrypt/gpgme/%{name}-%{version}.tar.gz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/lang/cl/gpgme.asd 
new/gpgme-2.1.1/lang/cl/gpgme.asd
--- old/gpgme-2.1.0/lang/cl/gpgme.asd   2026-05-18 11:17:46.000000000 +0200
+++ new/gpgme-2.1.1/lang/cl/gpgme.asd   2026-06-25 16:05:27.000000000 +0200
@@ -27,7 +27,7 @@
 (defsystem gpgme
   :description "GnuPG Made Easy."
   :author "g10 Code GmbH"
-  :version "2.1.0"
+  :version "2.1.1"
   :licence "GPL"
   :defsystem-depends-on ("cffi-grovel")
   :depends-on ("cffi" "gpg-error" "trivial-garbage")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/src/export.c new/gpgme-2.1.1/src/export.c
--- old/gpgme-2.1.0/src/export.c        2026-04-01 15:20:29.000000000 +0200
+++ new/gpgme-2.1.1/src/export.c        2026-06-25 16:04:19.000000000 +0200
@@ -256,8 +256,23 @@
 
   err = export_start (ctx, 1, pattern, mode, keydata);
   if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
+    {
+      err = _gpgme_wait_one (ctx);
+      if (!err)
+        {
+          /* For this synchronous operation we check for operational
+           * errors and return them.  */
+          void *hook;
+          op_data_t opd;
+
+          err = _gpgme_op_data_lookup (ctx, OPDATA_EXPORT, &hook, -1, NULL);
+          opd = hook;
+          if (!err)
+            err = opd->err ? opd->err : opd->failure_code;
+        }
+    }
+
+  return TRACE_ERR (err);
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/src/gpgme.h.in 
new/gpgme-2.1.1/src/gpgme.h.in
--- old/gpgme-2.1.0/src/gpgme.h.in      2026-05-15 11:18:05.000000000 +0200
+++ new/gpgme-2.1.1/src/gpgme.h.in      2026-06-25 16:04:19.000000000 +0200
@@ -1,6 +1,6 @@
 /* gpgme.h - Public interface to GnuPG Made Easy.                   -*- c -*-
  * Copyright (C) 2000 Werner Koch (dd9jn)
- * Copyright (C) 2001-2025 g10 Code GmbH
+ * Copyright (C) 2001-2026 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/src/gpgme.m4 new/gpgme-2.1.1/src/gpgme.m4
--- old/gpgme-2.1.0/src/gpgme.m4        2025-12-11 09:40:41.000000000 +0100
+++ new/gpgme-2.1.1/src/gpgme.m4        2026-06-23 09:50:48.000000000 +0200
@@ -330,8 +330,9 @@
 dnl               [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
 dnl Test for libgpgme-glib and define GPGME_GLIB_CFLAGS and GPGME_GLIB_LIBS.
 dnl
-AC_DEFUN([AM_PATH_GPGME_GLIB],
-[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
+AC_DEFUN([AM_PATH_GPGME_GLIB],[
+  AC_OBSOLETE([$0], [; use AM_PATH_GPGME instead to use GPGME_CFLAGS and 
GPGME_LIBS])dnl
+  AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
   tmp=ifelse([$1], ,1:0.4.2,$1)
   if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
      req_gpgme_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/src/json-core.c 
new/gpgme-2.1.1/src/json-core.c
--- old/gpgme-2.1.0/src/json-core.c     2025-12-11 09:40:41.000000000 +0100
+++ new/gpgme-2.1.1/src/json-core.c     2026-06-23 09:50:48.000000000 +0200
@@ -1195,6 +1195,9 @@
   char *buffer;
   const char *s;
   size_t buflen, n;
+#ifdef HAVE_W32_SYSTEM
+  int armor_enabled = 0;
+#endif
 
   if (!base64 || base64 == -1) /* Make sure that we really have a string.  */
     gpgme_data_write (data, "", 1);
@@ -1225,6 +1228,10 @@
             break;
           }
     }
+#ifdef HAVE_W32_SYSTEM
+  else
+    armor_enabled = !base64;
+#endif
 
   xjson_AddStringToObject (result, "type", type);
   xjson_AddBoolToObject (result, "base64", base64);
@@ -1232,7 +1239,52 @@
   if (base64)
     err = add_base64_to_object (result, "data", buffer, buflen);
   else
-    err = cjson_AddStringToObject (result, "data", buffer);
+    {
+#ifdef HAVE_W32_SYSTEM
+      /*
+       * In armored output on Windows, newline is CRLF.  We need to
+       * convert CRLF into LF so that the JSON representation is
+       * always same.
+       */
+      if (armor_enabled)
+        {
+          char *p, *p_write;
+          const char *p_end = buffer + buflen;
+
+          p = p_write = buffer;
+
+          while (1)
+            {
+              char c0, c1;
+
+              c0 = *p++;
+              if (p >= p_end)
+                {
+                  *p_write++ = c0;
+                  break;
+                }
+
+              if (c0 != '\r')
+                {
+                  *p_write++ = c0;
+                  continue;
+                }
+
+              c1 = *p++;
+              if (c1 == '\n')
+                *p_write++ = c1;
+              else
+                {
+                  *p_write++ = c0;
+                  *p_write++ = c1;
+                }
+              if (p >= p_end)
+                break;
+            }
+        }
+#endif
+      err = cjson_AddStringToObject (result, "data", buffer);
+    }
 
  leave:
   gpgme_free (buffer);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/src/versioninfo.rc.in 
new/gpgme-2.1.1/src/versioninfo.rc.in
--- old/gpgme-2.1.0/src/versioninfo.rc.in       2025-05-05 16:32:11.000000000 
+0200
+++ new/gpgme-2.1.1/src/versioninfo.rc.in       2026-06-25 16:04:19.000000000 
+0200
@@ -39,7 +39,7 @@
             VALUE "FileDescription", "GPGME - GnuPG Made Easy\0"
             VALUE "FileVersion", 
"@LIBGPGME_LT_CURRENT@.@LIBGPGME_LT_AGE@.@LIBGPGME_LT_REVISION@.@BUILD_REVISION@\0"
             VALUE "InternalName", "gpgme\0"
-            VALUE "LegalCopyright", "Copyright � 2001-2025 g10 Code GmbH\0"
+            VALUE "LegalCopyright", "Copyright � 2001-2026 g10 Code GmbH\0"
             VALUE "LegalTrademarks", "\0"
             VALUE "OriginalFilename", "gpgme.dll\0"
             VALUE "PrivateBuild", "\0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gpgme-2.1.0/src/w32-io.c new/gpgme-2.1.1/src/w32-io.c
--- old/gpgme-2.1.0/src/w32-io.c        2026-05-18 11:13:23.000000000 +0200
+++ new/gpgme-2.1.1/src/w32-io.c        2026-06-25 16:04:19.000000000 +0200
@@ -352,9 +352,10 @@
   DWORD nread;
   int sock;
 
-  TRACE_BEG  (DEBUG_SYSIO, "gpgme:reader", ctx->hdd,
-             "hd=%p, sock=%p, thread=%p, refcount=%d",
-              ctx->hdd->hd, (void *)ctx->hdd->sock, ctx->thread_hd,
+  TRACE_BEG (DEBUG_SYSIO, "gpgme:reader", ctx->hdd, "hd=%p", ctx->hdd->hd);
+  LOCK (ctx->mutex);
+  TRACE_LOG ("sock=%p, thread=%p, refcount=%d",
+              (void *)ctx->hdd->sock, ctx->thread_hd,
               ctx->refcount);
 
   if (ctx->hdd->hd != INVALID_HANDLE_VALUE)
@@ -364,7 +365,8 @@
 
   for (;;)
     {
-      LOCK (ctx->mutex);
+      char buffer[READBUF_SIZE];
+
       /* Leave a 1 byte gap so that we can see whether it is empty or
         full.  */
       if ((ctx->writepos + 1) % READBUF_SIZE == ctx->readpos)
@@ -374,22 +376,20 @@
             {
               TRACE_LOG  ("ResetEvent failed: ec=%d", (int) GetLastError ());
             }
-         UNLOCK (ctx->mutex);
          TRACE_LOG  ("waiting for space (refcnt=%d)", ctx->refcount);
+         UNLOCK (ctx->mutex);
          wait_for_single_object (ctx->have_space_ev, INFINITE);
          TRACE_LOG ("got space");
          LOCK (ctx->mutex);
                }
       if (ctx->stop_me)
        {
-         UNLOCK (ctx->mutex);
          break;
         }
       nbytes = (ctx->readpos + READBUF_SIZE
                - ctx->writepos - 1) % READBUF_SIZE;
       if (nbytes > READBUF_SIZE - ctx->writepos)
        nbytes = READBUF_SIZE - ctx->writepos;
-      UNLOCK (ctx->mutex);
 
       TRACE_LOG  ("%s %d bytes", sock? "receiving":"reading", nbytes);
 
@@ -397,7 +397,9 @@
         {
           int n;
 
-          n = recv (ctx->hdd->sock, ctx->buffer + ctx->writepos, nbytes, 0);
+         UNLOCK (ctx->mutex);
+          n = recv (ctx->hdd->sock, buffer, nbytes, 0);
+         LOCK (ctx->mutex);
           if (n < 0)
             {
               ctx->error_code = (int) WSAGetLastError ();
@@ -413,14 +415,11 @@
                   if ( ctx->error_code == WSAECONNABORTED
                        || ctx->error_code == WSAECONNRESET)
                     {
-                      LOCK (ctx->mutex);
                       if (ctx->stop_me)
                         {
-                          UNLOCK (ctx->mutex);
                           TRACE_LOG ("got shutdown");
                           break;
                         }
-                      UNLOCK (ctx->mutex);
                     }
 
                   ctx->error = 1;
@@ -428,12 +427,17 @@
                 }
               break;
             }
+          memcpy (ctx->buffer + ctx->writepos, buffer, n);
           nread = n;
         }
       else
         {
-          if (!ReadFile (ctx->hdd->hd,
-                         ctx->buffer + ctx->writepos, nbytes, &nread, NULL))
+          BOOL res;
+
+          UNLOCK (ctx->mutex);
+          res = ReadFile (ctx->hdd->hd, buffer, nbytes, &nread, NULL);
+          LOCK (ctx->mutex);
+          if (!res)
             {
               ctx->error_code = (int) GetLastError ();
               if (ctx->error_code == ERROR_BROKEN_PIPE)
@@ -453,18 +457,16 @@
                 }
               break;
             }
+          memcpy (ctx->buffer + ctx->writepos, buffer, nread);
         }
-      LOCK (ctx->mutex);
       if (ctx->stop_me)
        {
-         UNLOCK (ctx->mutex);
          break;
         }
       if (!nread)
        {
          ctx->eof = 1;
          TRACE_LOG ("got eof");
-         UNLOCK (ctx->mutex);
          break;
         }
 
@@ -476,7 +478,6 @@
           TRACE_LOG  ("SetEvent (%p) failed: ec=%d", ctx->have_data_ev,
                       (int) GetLastError ());
         }
-      UNLOCK (ctx->mutex);
     }
   /* Indicate that we have an error or EOF.  */
   if (!SetEvent (ctx->have_data_ev))
@@ -485,6 +486,8 @@
                 (int) GetLastError ());
     }
 
+  UNLOCK (ctx->mutex);
+
   TRACE_LOG ("waiting for close");
   wait_for_single_object (ctx->close_ev, INFINITE);
 
@@ -756,10 +759,10 @@
   struct writer_context_s *ctx = arg;
   DWORD nwritten;
   int sock;
-  TRACE_BEG  (DEBUG_SYSIO, "gpgme:writer", ctx->hdd,
-             "hd=%p, sock=%p, thread=%p, refcount=%d",
-              ctx->hdd->hd, (void *)ctx->hdd->sock, ctx->thread_hd,
-              ctx->refcount);
+  TRACE_BEG (DEBUG_SYSIO, "gpgme:writer", ctx->hdd, "hd=%p", ctx->hdd->hd);
+  LOCK (ctx->mutex);
+  TRACE_LOG ("sock=%p, thread=%p, refcount=%d",
+             (void *)ctx->hdd->sock, ctx->thread_hd, ctx->refcount);
 
   if (ctx->hdd->hd != INVALID_HANDLE_VALUE)
     sock = 0;
@@ -768,10 +771,10 @@
 
   for (;;)
     {
-      LOCK (ctx->mutex);
+      char buffer[READBUF_SIZE];
+
       if (ctx->stop_me && !ctx->nbytes)
        {
-         UNLOCK (ctx->mutex);
          break;
         }
       if (!ctx->nbytes)
@@ -788,10 +791,8 @@
                }
       if (ctx->stop_me && !ctx->nbytes)
        {
-         UNLOCK (ctx->mutex);
          break;
         }
-      UNLOCK (ctx->mutex);
 
       TRACE_LOG  ("%s %zd bytes", sock?"sending":"writing", ctx->nbytes);
 
@@ -804,7 +805,11 @@
              be used with WriteFile.  */
           int n;
 
-          n = send (ctx->hdd->sock, ctx->buffer, ctx->nbytes, 0);
+          n = ctx->nbytes;
+          memcpy (buffer, ctx->buffer, n);
+         UNLOCK (ctx->mutex);
+          n = send (ctx->hdd->sock, buffer, n, 0);
+         LOCK (ctx->mutex);
           if (n < 0)
             {
               ctx->error_code = (int) WSAGetLastError ();
@@ -816,8 +821,14 @@
         }
       else
         {
-          if (!WriteFile (ctx->hdd->hd, ctx->buffer,
-                          ctx->nbytes, &nwritten, NULL))
+          BOOL res;
+          int n = ctx->nbytes;
+
+          memcpy (buffer, ctx->buffer, n);
+         UNLOCK (ctx->mutex);
+          res = WriteFile (ctx->hdd->hd, buffer, n, &nwritten, NULL);
+         LOCK (ctx->mutex);
+          if (!res)
             {
              if (GetLastError () == ERROR_BUSY)
                {
@@ -834,14 +845,13 @@
         }
       TRACE_LOG  ("wrote %d bytes", (int) nwritten);
 
-      LOCK (ctx->mutex);
       ctx->nbytes -= nwritten;
-      UNLOCK (ctx->mutex);
     }
   /* Indicate that we have an error.  */
   if (!SetEvent (ctx->is_empty))
     TRACE_LOG  ("SetEvent failed: ec=%d", (int) GetLastError ());
 
+  UNLOCK (ctx->mutex);
   TRACE_LOG ("waiting for close");
   wait_for_single_object (ctx->close_ev, INFINITE);
 
@@ -1674,9 +1684,11 @@
       close (tmp_fd);
       DeleteFileA (tmp_name);
       free (tmp_name);
-
-      /* FIXME: Should translate the error code.  */
+#if GPGRT_VERSION_NUMBER >= 0x013e00  /* gpgrt >= 1.62 */
+      gpgrt_w32_set_errno (lasterr);
+#else
       gpg_err_set_errno (EIO);
+#endif
       return TRACE_SYSRES (-1);
     }
 
@@ -1699,7 +1711,8 @@
       if (!DuplicateHandle (GetCurrentProcess(), ohd,
                            pi.hProcess, &hd, 0, TRUE, DUPLICATE_SAME_ACCESS))
        {
-         TRACE_LOG  ("DuplicateHandle failed: ec=%d", (int) GetLastError ());
+          int lasterr = (int) GetLastError ();
+         TRACE_LOG  ("DuplicateHandle failed: ec=%d", lasterr);
          TerminateProcess (pi.hProcess, 0);
          /* Just in case TerminateProcess didn't work, let the
             process fail on its own.  */
@@ -1711,8 +1724,11 @@
          DeleteFileA (tmp_name);
           free (tmp_name);
 
-         /* FIXME: Should translate the error code.  */
+#if GPGRT_VERSION_NUMBER >= 0x013e00  /* gpgrt >= 1.62 */
+          gpgrt_w32_set_errno (lasterr);
+#else
          gpg_err_set_errno (EIO);
+#else
           UNLOCK (fd_table_lock);
          return TRACE_SYSRES (-1);
         }
@@ -1826,7 +1842,9 @@
   int i;
   int any;
   int count;
+  int errnoset = 0;
   void *dbg_help = NULL;
+
   TRACE_BEG  (DEBUG_SYSIO, "_gpgme_io_select", fds,
              "nfds=%zd, nonblock=%u", nfds, nonblock);
 
@@ -1859,7 +1877,6 @@
                    {
                      TRACE_END (dbg_help, "oops ]");
                      TRACE_LOG ("Too many objects for WFMO!");
-                     /* FIXME: Should translate the error code.  */
                      gpg_err_set_errno (EIO);
                      return TRACE_SYSRES (-1);
                     }
@@ -1882,7 +1899,6 @@
                    {
                      TRACE_END (dbg_help, "oops ]");
                      TRACE_LOG ("Too many objects for WFMO!");
-                     /* FIXME: Should translate the error code.  */
                      gpg_err_set_errno (EIO);
                      return TRACE_SYSRES (-1);
                     }
@@ -1949,6 +1965,10 @@
         }
 #endif
       TRACE_LOG  ("WFMO failed: %d", le);
+#if GPGRT_VERSION_NUMBER >= 0x013e00  /* gpgrt >= 1.62 */
+      gpgrt_w32_set_errno (le);
+      errnoset = 1;
+#endif
       count = -1;
     }
   else
@@ -1971,11 +1991,8 @@
       TRACE_END (dbg_help, "]");
     }
 
-  if (count < 0)
-    {
-      /* FIXME: Should determine a proper error code.  */
+  if (count < 0 && !errnoset)
       gpg_err_set_errno (EIO);
-    }
 
   return TRACE_SYSRES (count);
 }

Reply via email to