diff -urNp gpgme-1.1.6.org/assuan/assuan-pipe-connect.c gpgme.svn/assuan/assuan-pipe-connect.c --- gpgme-1.1.6.org/assuan/assuan-pipe-connect.c 2007-09-27 15:00:05.000000000 +0200 +++ gpgme.svn/assuan/assuan-pipe-connect.c 2008-01-04 18:06:42.000000000 +0200 @@ -39,6 +39,14 @@ #include "assuan-defs.h" +#ifdef _ASSUAN_IN_GPGME_BUILD_ASSUAN + +int _gpgme_io_pipe (int filedes[2], int inherit_idx); +int _gpgme_io_spawn (const char *path, char **argv, + struct spawn_fd_item_s *fd_child_list, + struct spawn_fd_item_s *fd_parent_list); +#endif + /* Hacks for Slowaris. */ #ifndef PF_LOCAL # ifdef PF_UNIX diff -urNp gpgme-1.1.6.org/gpgme/engine-gpgconf.c gpgme.svn/gpgme/engine-gpgconf.c --- gpgme-1.1.6.org/gpgme/engine-gpgconf.c 2008-01-04 16:17:15.000000000 +0200 +++ gpgme.svn/gpgme/engine-gpgconf.c 2008-01-14 19:34:21.000000000 +0200 @@ -313,8 +310,8 @@ gpgconf_config_load_cb (void *hook, char if (fields >= 3) { - comp->description = strdup (field[2]); - if (!comp->description) + comp->program_name = strdup (field[2]); + if (!comp->program_name) return gpg_error_from_syserror (); } @@ -457,9 +454,18 @@ gpgconf_config_load_cb2 (void *hook, cha return gpg_error_from_syserror (); } - err = gpgconf_parse_option (opt, &opt->no_arg_value, field[8]); - if (err) - return err; + if (opt->flags & GPGME_CONF_NO_ARG_DESC) + { + opt->no_arg_description = strdup (field[8]); + if (!opt->no_arg_description) + return gpg_error_from_syserror (); + } + else + { + err = gpgconf_parse_option (opt, &opt->no_arg_value, field[8]); + if (err) + return err; + } err = gpgconf_parse_option (opt, &opt->value, field[9]); if (err) diff -urNp gpgme-1.1.6.org/gpgme/kdpipeiodevice.cpp gpgme.svn/gpgme/kdpipeiodevice.cpp --- gpgme-1.1.6.org/gpgme/kdpipeiodevice.cpp 2007-11-12 13:21:58.000000000 +0200 +++ gpgme.svn/gpgme/kdpipeiodevice.cpp 2008-01-10 15:38:34.000000000 +0200 @@ -329,11 +329,14 @@ void KDPipeIODevice::Private::emitReadyR emit q->readyRead(); if ( !thisPointer ) - return; - qDebug( "KDPipeIODevice::Private::emitReadyRead %p, %d: locking reader (CONSUMER THREAD)", this, counter ); - synchronized( reader ) { - qDebug( "KDPipeIODevice::Private::emitReadyRead %p, %d: locked reader (CONSUMER THREAD)", this, counter ); - reader->readyReadSentCondition.wakeAll(); + return; + + if ( reader ) { + qDebug( "KDPipeIODevice::Private::emitReadyRead %p, %d: locking reader (CONSUMER THREAD)", this, counter ); + synchronized( reader ) { + qDebug( "KDPipeIODevice::Private::emitReadyRead %p, %d: locked reader (CONSUMER THREAD)", this, counter ); + reader->readyReadSentCondition.wakeAll(); + } } qDebug( "KDPipeIODevice::Private::emitReadyRead %p leaving %d", this, counter ); @@ -704,7 +707,7 @@ void Reader::run() { while ( !cancel && !error && bufferFull() ) { notifyReadyRead(); - if ( bufferFull() ) { + if ( !cancel && bufferFull() ) { qDebug( "%p: Reader::run: buffer is full, going to sleep", this ); bufferNotFullCondition.wait( &mutex ); } diff -urNp gpgme-1.1.6.org/tests/gpg/Makefile.am gpgme.svn/tests/gpg/Makefile.am --- gpgme-1.1.6.org/tests/gpg/Makefile.am 2008-01-04 16:25:18.000000000 +0200 +++ gpgme.svn/tests/gpg/Makefile.am 2008-01-10 06:40:25.000000000 +0200 @@ -38,10 +38,10 @@ TESTS = t-encrypt t-encrypt-sym t-encryp t-encrypt-large t-file-name t-gpgconf $(tests_unix) CLEANFILES = secring.gpg pubring.gpg pubring.kbx trustdb.gpg dirmngr.conf -DISTCLEANFILES = pubring.gpg~ random_seed gpg.conf +DISTCLEANFILES = pubring.gpg~ random_seed gpg.conf gpg-agent.conf EXTRA_DIST = mkdemodirs pubdemo.asc secdemo.asc cipher-1.asc cipher-2.asc \ - geheim.txt pubkey-1.asc seckey-1.asc + geheim.txt pubkey-1.asc seckey-1.asc pinentry INCLUDES = -I$(top_srcdir)/gpgme @@ -55,7 +55,7 @@ noinst_PROGRAMS = $(TESTS) t-genkey clean-local: $(srcdir)/mkdemodirs --clean -all-local: ./pubring.gpg ./gpg.conf +all-local: ./pubring.gpg ./gpg.conf ./gpg-agent.conf ./pubring.gpg: $(srcdir)/pubdemo.asc ./Alpha/Secret.gpg $(GPG) --homedir . --import $(srcdir)/pubdemo.asc @@ -68,3 +68,7 @@ all-local: ./pubring.gpg ./gpg.conf ./gpg.conf: # This is required for t-sig-notations. echo no-force-v3-sigs > ./gpg.conf + +./gpg-agent.conf: +# This is required for gpg2, which does not support command fd. + echo pinentry-program $(abs_srcdir)/pinentry > ./gpg-agent.conf diff -urNp gpgme-1.1.6.org/tests/gpg/pinentry gpgme.svn/tests/gpg/pinentry --- gpgme-1.1.6.org/tests/gpg/pinentry 1970-01-01 02:00:00.000000000 +0200 +++ gpgme.svn/tests/gpg/pinentry 2008-01-10 06:33:34.000000000 +0200 @@ -0,0 +1,22 @@ +#! /bin/bash +# Dummy pinentry +# +# Copyright 2008 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 +# modifications, as long as this notice is preserved. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. + +echo OK Your orders please + +while read cmd; do + case $cmd in + GETPIN) echo D abc; echo OK;; + *) echo OK;; + esac +done diff -urNp gpgme-1.1.6.org/tests/gpg/t-gpgconf.c gpgme.svn/tests/gpg/t-gpgconf.c --- gpgme-1.1.6.org/tests/gpg/t-gpgconf.c 2008-01-04 16:17:15.000000000 +0200 +++ gpgme.svn/tests/gpg/t-gpgconf.c 2008-01-10 06:54:16.000000000 +0200 @@ -254,6 +254,11 @@ main (int argc, char **argv) gpgme_conf_comp_t conf; gpgme_conf_comp_t comp; int first; + +#ifndef ENABLE_GPGCONF + return 0; +#endif + init_gpgme (GPGME_PROTOCOL_GPGCONF); err = gpgme_new (&ctx); @@ -287,15 +292,23 @@ main (int argc, char **argv) comp = conf; while (comp && strcmp (comp->name, "dirmngr")) comp = comp->next; - opt = comp->options; - while (opt && strcmp (opt->name, "verbose")) - opt = opt->next; - err = gpgme_conf_opt_change (opt, 0, arg); - fail_if_err (err); - - err = gpgme_op_conf_save (ctx, comp); - fail_if_err (err); + if (comp) + { + opt = comp->options; + while (opt && strcmp (opt->name, "verbose")) + opt = opt->next; + + /* Allow for the verbose option not to be there. */ + if (opt) + { + err = gpgme_conf_opt_change (opt, 0, arg); + fail_if_err (err); + + err = gpgme_op_conf_save (ctx, comp); + fail_if_err (err); + } + } } #endif