diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index dfa457282..ed12fed4f 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -437,14 +437,20 @@ main (int argc, char **argv ) /* Libgcrypt requires us to register the threading model first. Note that this will also do the pth_init. */ #ifdef USE_GNU_PTH +#ifdef HAVE_W32_SYSTEM + /* For W32 we need pth. */ + pth_init (); +#else err = gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pth); if (err) { log_fatal ("can't register GNU Pth with Libgcrypt: %s\n", gpg_strerror (err)); } +#endif #endif /*USE_GNU_PTH*/ + /* Check that the libraries are suitable. Do it here because the option parsing may need services of the library. */ if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) ) diff --git a/common/ChangeLog b/common/ChangeLog index 9b048ae49..336b3928a 100644 --- a/common/ChangeLog +++ b/common/ChangeLog @@ -1,3 +1,7 @@ +2004-12-19 Werner Koch + + * maperror.c (map_assuan_err_with_source): Oops, args were swapped. + 2004-12-18 Werner Koch * maperror.c (map_assuan_err): Renamed to .. diff --git a/common/maperror.c b/common/maperror.c index 91731468f..9efd64338 100644 --- a/common/maperror.c +++ b/common/maperror.c @@ -38,7 +38,7 @@ simple: All errors with a gpg_err_source of UNKNOWN are genuine Assuan codes all others are passed verbatim through. */ gpg_error_t -map_assuan_err_with_source (int err, int source) +map_assuan_err_with_source (int source, int err) { gpg_err_code_t ec; diff --git a/jnlib/ChangeLog b/jnlib/ChangeLog index 4a9665c45..e194cea4c 100644 --- a/jnlib/ChangeLog +++ b/jnlib/ChangeLog @@ -1,3 +1,7 @@ +2004-12-19 Werner Koch + + * w32-pth.c (pth_init): Enable debugging depending on env var. + 2004-12-18 Werner Koch * w32-pth.c (pth_init): Reverse return values. Use TRUE and FALSE diff --git a/jnlib/w32-pth.c b/jnlib/w32-pth.c index 7710a622f..489b28300 100644 --- a/jnlib/w32-pth.c +++ b/jnlib/w32-pth.c @@ -40,6 +40,9 @@ #define W32_PTH_HANDLE_INTERNAL HANDLE #include "w32-pth.h" +#define DEBUG_ENTER_LEAVE 1 /* Set to 1 to enable full debugging. */ + + #ifndef FALSE #define FALSE 0 #endif @@ -51,12 +54,15 @@ #endif +/* States whether trhis module has been initialized. */ +static int pth_initialized; -static int pth_initialized = 0; +/* Controls whether debugging is enabled. */ +static int debug_enter_leave; /* Variables to support event handling. */ -static int pth_signo = 0; -static HANDLE pth_signo_ev = NULL; +static int pth_signo; +static HANDLE pth_signo_ev; /* Mutex to make sure only one thread is running. */ static CRITICAL_SECTION pth_shd; @@ -124,6 +130,8 @@ pth_init (void) return TRUE; fprintf (stderr, "%s: pth_init: called.\n", log_get_prefix (NULL)); + debug_enter_leave = !!getenv ("DEBUG_PTH"); + if (WSAStartup (0x202, &wsadat)) return FALSE; pth_signo = 0; @@ -177,8 +185,9 @@ enter_pth (const char *function) { /* Fixme: I am not sure whether the same thread my enter a critical section twice. */ -/* fprintf (stderr, "%s: enter_pth (%s)\n", - log_get_prefix (NULL), function? function:""); */ + if (debug_enter_leave) + fprintf (stderr, "%s: enter_pth (%s)\n", + log_get_prefix (NULL), function? function:""); LeaveCriticalSection (&pth_shd); } @@ -187,8 +196,9 @@ static void leave_pth (const char *function) { EnterCriticalSection (&pth_shd); -/* fprintf (stderr, "%s: leave_pth (%s)\n", - log_get_prefix (NULL), function? function:""); */ + if (debug_enter_leave) + fprintf (stderr, "%s: leave_pth (%s)\n", + log_get_prefix (NULL), function? function:""); } @@ -296,6 +306,8 @@ pth_write (int fd, const void * buffer, size_t size) fprintf (stderr, "%s: pth_write(%d) failed in write: %s\n", log_get_prefix (NULL), fd, w32_strerror (strerr, sizeof strerr)); + fprintf (stderr, "--> fd = %d, handle = %p, size = %lu\n", + fd, (HANDLE)fd, size); n = -1; } else diff --git a/sm/keylist.c b/sm/keylist.c index e9985f3ec..aa6db46c3 100644 --- a/sm/keylist.c +++ b/sm/keylist.c @@ -1149,8 +1149,8 @@ list_internal_keys (ctrl_t ctrl, STRLIST names, FILE *fp, char *p = gpgsm_get_keygrip_hexstring (cert); if (p) { - rc = gpgsm_agent_havekey (ctrl, p); - if (!rc) + rc = gpgsm_agent_havekey (ctrl, p); + if (!rc) have_secret = 1; else if ( gpg_err_code (rc) != GPG_ERR_NO_SECKEY) goto leave;