Insert platform dependent typedefs into gpgme.h
[gpgme.git] / src / ChangeLog
index 15234b9545a24bac91634f61d74f82846886b08b..07b62bdb4e239835cff524f254c21bc632b154ad 100644 (file)
@@ -1,3 +1,636 @@
+2011-04-06  Werner Koch  <wk@g10code.com>
+
+       * gpgme.h.in: Use INSERT__TYPEDEFS_FOR_GPGME_H to include platform
+       specific typedefs.
+
+2011-02-03  Werner Koch  <wk@g10code.com>
+
+       * extra-stati.h: New.
+       * mkstatus: Extend to also process extra-stati.h
+       * Makefile.am (main_sources): Add extra-stati.h
+       (status-table.h): Depend on extra-stati.h and adjust rule.
+
+2011-02-03  Marcus Brinkmann  <marcus@g10code.com>
+
+       * w32-io.c (_gpgme_io_socket): Return fd, not res.
+
+2011-02-02  Marcus Brinkmann  <mb@g10code.com>
+
+       * assuan-support.c (my_socket, my_connect): New functions.
+       (_gpgme_assuan_system_hooks): Add my_Socket, my_connect.
+       * priv-io.h (_gpgme_io_socket): New prototype.
+       * w32-io.c (pid_to_handle, handle_to_oid, fd_to_handle): Remove macros.
+       (is_socket): Remove function.
+       (_gpgme_io_spawn) [HAVE_W32CE_SYSTEM]: Remove some dead code.
+       (_gpgme_io_spawn): Translate handles before DuplicateHandle them.
+
+2011-02-02  Marcus Brinkmann  <mb@g10code.com>
+
+       * w32-util.c (mkstemp): Don't use CreateFile instead of open (the
+       function is not used on Windows CE, and the callers were not
+       adjusted).
+
+2011-01-21  Marcus Brinkmann  <mb@g10code.com>
+
+       * engine-gpgconf.c (_gpgme_conf_opt_change): Fix the case that is
+       not self-assignment.
+
+2010-12-08  Werner Koch  <wk@g10code.com>
+
+       * gpgme-tool.c (strcpy_escaped_plus): New.
+       (DIM, xtoi_1, xtoi_2): New.
+       (cmd_keylist): Allow for multiple patterns.
+
+2010-11-23  Marcus Brinkmann  <mb@g10code.com>
+
+       * w32-io.c (create_reader, create_writer): Use small stack size on
+       Windows CE.
+
+2010-11-23  Marcus Brinkmann  <mb@g10code.com>
+
+       * gpgme.h.in (gpgme_conf_arg_new): Make VALUE arg const void *.
+       * gpgconf.c (_gpgme_conf_arg_new): Likewise.
+       (gpgme_conf_arg_new): Likewise.
+       * engine-gpgconf.c (_gpgme_conf_arg_new): Likewise.
+       (gpgconf_write): Remove debug hack.
+
+2010-11-19  Marcus Brinkmann  <mb@g10code.com>
+
+       * engine-gpgconf.c (_gpgme_conf_opt_change): Support
+       self-assignment.  Requested by Marc Mutz.
+
+2010-11-17  Marcus Brinkmann  <mb@g10code.com>
+
+       * vasprintf.c (int_vasprintf) [HAVE_W32CE_SYSTEM]: Just use a
+       fixed size buffer, as va_copy is not easy to fake.
+
+2010-11-15  Marcus Brinkmann  <mb@g10code.com>
+
+       * w32-ce.h (strcasecmp, strdup) [_MSC_VER]: Define.
+       * genkey.c, passphrase.c: Include util.h.
+
+       * w32-util.c (_gpgme_w32ce_get_debug_envvar): Fix return value.
+
+2010-11-15  Werner Koch  <wk@g10code.com>
+
+       * data-compat.c (gpgme_data_new_from_filepart)
+       (gpgme_data_new_from_file) [W32CE && _MSC_VER]: Return not
+       GPG_ERR_NOT_IMPLEMENTED.
+
+       * w32-ce.h (HKEY_PERFORMANCE_DATA, HKEY_CURRENT_CONFIG, _IOLBF)
+       (abort) [_MSC_VER]: Provide these macros.
+
+       * ath.h [W32CE && _MSC_VER]: Include winsock2.h.
+
+       * ath.c (ath_read, ath_write) [W32CE && _MSC_VER]: Do not call
+       non-available functions.
+
+2010-11-04  Werner Koch  <wk@g10code.com>
+
+       * w32-ce.h [_MSC_VER && W32CE]: Undef leave.
+       * export.c: Include util.h so that we get the above undef.
+
+       * memrchr.c: Remove.  Used to be a replacement function required
+       by the formerly included assuan code.
+
+2010-11-03  Werner Koch  <wk@g10code.com>
+
+       * debug.c (_gpgme_debug) [W32CE]: Replace locatime by GetLocalTime.
+
+       * signers.c (gpgme_signers_clear): Remove useless return.
+       Reported by Patrick Spendrin.
+
+       * w32-util.c: s/__inline__/GPG_ERR_INLINE/
+
+       * setenv.c: Include string.h due to our strerror replacement.
+
+       * w32-ce.h (access, bsearch): New macros.
+       * w32-ce.c (_gpgme_wince_access): New.
+       (RegQueryValueExA): Change DATA to a void*.
+       (_gpgme_wince_bsearch): New.  Taken from glibc 2.6.
+
+       Guard include of sys/stat.h and sys/types.h.
+
+2010-11-02  Werner Koch  <wk@g10code.com>
+
+       * data-fd.c (read, write, lseek) [W32CE && ! __MINGW32CE__]: New.
+       Taken from Pedro Alves Public Domain code.
+
+       * w32-ce.h (SHGetSpecialFolderPath): Remove our defines and
+       prototypes.  We use the system provided prototypes now.
+       * w32-ce.c: Include shlobj.h
+       (_WIN32_IE): Define to 0x0400
+       (CreateFileA): New.
+       * w32-util.c: Explicitly include windows headers before util.h.
+       (_gpgme_w32ce_get_debug_envvar): Do not use wchar_t strings for
+       read_w32_registry_string.
+       (mkstemp): Use CreateFile instead of open.
+
+       * w32-io.c (handle_to_fd, fd_tohandle): Add.  We need them for W32.
+       * w32-util.c (_WIN32_IE): Define to 0x0400.
+
+       * util.h [W32]: Include windows.h.
+       * w32-sema.c: Do not include windows.h directly.
+       * ath.c (ssize_t, pid_t)[_MSC_VER]: Add new types.
+       * gpgme.c (gpgme_result_ref, gpgme_result_unref): Do not use a
+       void pointer in pointer arithmetic.
+       * w32-util.c: Include util.h prior to ath.h.  Don't include
+       windows.h directly.
+       (F_OK): Define if not defined.
+       * w32-ce.c: Include string.h.
+       (RegQueryValueExA): Use WINAPI modifier to match the declaration.
+       * vfs-create.c: Include string.h because under W32CE with MSC we
+       get a warning related to our strerror replacement.
+       * encrypt-sign.c: Include stdlib.h, string.h and errno.h.
+       * priv-io.h [W32CE]: Include w32-ce.h
+       * w32-ce.h: Include winsock2.h and ws2tcpip.h.
+       (_MSV_VER): Remove useless macro.
+       (pid_t): Add typedef.
+
+       Guard all includes of unistd.h and sys/time.h.
+
+2010-10-28  Marcus Brinkmann  <marcus@g10code.com>
+
+       * opassuan.c (gpgme_op_assuan_transact_ext): Fix uninitialized
+       value use.  Reported by Marc Mutz.
+
+2010-10-07  Werner Koch  <wk@g10code.com>
+
+       * gpgme-tool.c (ARGP_ERR_UNKNOWN): Use EDEADLK if available.
+
+       * w32-util.c (_gpgme_w32ce_get_debug_envvar) [W32CE]: New.
+       * debug.c (debug_init) [W32CE]: Use new function.
+
+2010-09-16  Werner Koch  <wk@g10code.com>
+
+       * import.c: Include "util.h".
+       (parse_import): Return GPG_ERR_MISSING_ISSUER_CERT.
+
+       * util.h: Add fallback define for GPG_ERR_MISSING_ISSUER_CERT.
+       * op-support.c: Include "util.h".
+       (_gpgme_parse_inv_recp): Handle new code 12.
+
+2010-09-02  Marcus Brinkmann  <marcus@g10code.de>
+
+       * error.c (gpgme_err_code_to_errno): Fix cut and paste bug (thanks
+       to Marc Mutz).
+
+2010-09-01  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-io.c: Revert change from 2009-06-18, as it created a race
+       condition.
+
+2010-08-18  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.def: Add gpgme_err_code_from_syserror and gpgme_err_set_errno.
+       * libgpgme.vers: Likewise.
+       * gpgme.h.in (gpgme_error_from_errno): Fix return type to
+       gpgme_error_t.
+       (gpgme_err_code_from_syserror, gpgme_err_set_errno): New prototype.
+       (gpgme_error_from_syserror): New inline function (why are
+       gpgme_err_make_from_errno and gpgme_error_from_errno not inline
+       functions?).
+       * error.c (gpgme_error_from_errno): Fix return type to gpgme_error_t.
+       (gpgme_err_set_errno, gpgme_err_code_from_syserror): New functions.
+
+2010-08-03  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (result_encrypt_to_xml, result_sign_to_xml)
+       (result_verify_to_xml, result_import_to_xml)
+       (result_genkey_to_xml): Check vigorously for null pointers.
+
+       * w32-io.c (GPGCEDEV_IOCTL_ASSIGN_RVID): New macro.
+       (_gpgme_io_spawn): Use ASSIGN_RVID.
+
+2010-06-11  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-io.c (_gpgme_io_spawn): Remove debug printf.
+
+2010-06-10  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (gpgme_server): Use special hack for Windows CE to
+       get at stdin and stdout.
+
+       * engine-gpgsm.c (gpgsm_new): Translate returned achild_fds back
+       to child_fds.
+
+       * debug.h (TRACE_SUC6): New macro.
+       * w32-io.c (MAX_SLAFD): New macro.
+       (fd_table): New static variable.
+       (new_fd, release_fd): New functions.
+       (fd_to_handle, handle_to_fd, handle_to_socket): Remove macros.
+       (MAX_READERS, MAX_WRITERS): Increase to 64.
+       (notify_table): Increase to MAX_SLAFD.
+       (struct reader_context_s, struct writer_context_s): Add member
+       file_sock.
+       (reader, writer): Use file_hd vs file_sock to decide if socket
+       operations to use.  Remove auto-detect mode.
+       (create_reader, create_writer): Set file_sock.  Unblock pending
+       thread only if this is a pipe fd.
+       (_gpgme_io_pipe): Allocate fds from table and return slot indices
+       instead of windows handles.  This allows to properly handle RVIDs.
+       (_gpgme_io_close): Handle dup'ed file descriptors.
+       (build_commandline) [HAVE_W32_SYSTEM]: Use RVID from fd table now.
+       (_gpgme_io_spawn): Use fd table now.
+       (_gpgme_io_fd2str): Use RVID from fd table now.
+       (_gpgme_io_dup): Implement using fd table.
+       (_gpgme_io_socket): Allocate fds from table.
+       (_gpgme_io_connect): Use fd from table.
+
+       * w32-glib-io.c (find_channel): Check that the slot is used.
+
+2010-06-09  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-io.c [HAVE_W32CE_SYSTEM]: Include assuan.h and winioctl.h.
+       (GPGCEDEV_IOCTL_UNBLOCK) [HAVE_W32CE_SYSTEM]: Define.
+       (set_synchronize) [HAVE_W32CE_SYSTEM]: Stub it out.
+       (is_socket): Allow to return -1 for auto-detect (old behaviour).
+       (is_socket) [HAVE_W32CE_SYSTEM]: Return -1.
+       (reader): Handle auto-detect case.  Handle ctx->stop_me before
+       checking for EOF.
+       (destroy_reader) [HAVE_W32CE_SYSTEM]: Unblock a pending reader.
+       (writer): Handle auto-detect case.  Handle ctx->stop_me with
+       ERROR_BUSY.
+       (destroy_writer) [HAVE_W32CE_SYSTEM]: Unblock a pending writer.
+       (_gpgme_io_pipe) [HAVE_W32CE_SYSTEM]: Implement in terms of a
+       half-pipe.
+       (build_commandline) [HAVE_W32CE_SYSTEM]: New function.
+       (_gpgme_io_spawn) [HAVE_W32CE_SYSTEM]: Implement it differently
+       for this platform.
+       (_gpgme_io_fd2str) [HAVE_W32CE_SYSTEM]: Implement it for RVIDs.
+       (_gpgme_io_dup) [HAVE_W32CE_SYSTEM]: Stub it out.
+
+       * gpgme-tool.c (result_add_timestamp): Add missing NULL argument.
+       (result_sign_to_xml): Protect against NULL fingerprint.
+       (struct server): New members input_fd, input_filename,
+       input_stream output_fd, output_filename, output_stream,
+       message_filename, message_stream.
+       (server_reset_fds): Deallocate those.
+       (server_parse_fd): New function.
+       (server_data_obj): Take optional filename argument and direction
+       argument.  Also take new argument to return a filestream that
+       needs to be closed after destroying the data object.
+       Change all callers, too.
+       (input_notify, output_notify): Removed.
+       (cmd_input, cmd_output): New functions.
+       (gpgme_server): Do not register input and output notifier.
+       (register_commands): Use cmd_input and cmd_output.
+       (cmd_message): Rewritten to use server_parse_fd.
+       (cmd_delete, cmd_keylist): Fix inverted option check.
+       (main) [HAVE_W32CE_SYSTEM]: Sleep a bit to work around bug in ssh.
+
+       * genkey.c (gpgme_op_genkey): Return err with TRACE_ERR.
+
+2010-05-12  Marcus Brinkmann  <marcus@g10code.de>
+
+       * conversion.c (_gpgme_timegm) [HAVE_W32_SYSTEM]: New static
+       function.
+       (_gpgme_parse_timestamp) [HAVE_W32_SYSTEM]: Use it.
+
+       * gpgme-tool.c (main): Protect call to setlocale with
+       HAVE_SETLOCALE.
+
+       * Makefile.am (system_components): Remove custom cppflags from
+       RCCOMPILE (because gpg-error adds -idirafter that makes RC bail.
+       [HAVE_W32CE_SYSTEM]: Add w32-ce.h and w32-ce.c, clear
+       libexec_PROGRAMS.
+       * w32-ce.h, w32-ce.c: New files.
+
+       * priv-io.h: Include <sys/types.h>
+       * util.h: Likewise.
+
+2010-05-11  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-util.c: Include ath.h
+       (HAVE_ALLOW_SET_FOREGROUND_WINDOW) [!HAVE_W32CE_SYSTEM]: Define
+       it.
+       (RTLD_LAZY, dlopen, dlsym,
+       dlclose) [!HAVE_ALLOW_SET_FORGROUND_WINDOW]: Don't define anymore.
+       (_gpgme_allow_set_foreground_window) [!HAVE_ALLOW_SET_FOREGROUND_WINDOW]:
+       Make it a stub.
+       (read_w32_registry_string): Use FooA variants of Windows functions
+       instead of Foo (which dispatches depending on UNICODE).
+       [!HAVE_W32CE_SYSTEM]: Don't check environment.
+       (w32_shgetfolderpath): Remove.
+       (find_program_at_standard_place): Call
+       SHGetSpecialFolderPath (which is available on all Windows systems
+       and also Windows CE).
+       (mkstemp): Use ath_self instead of getpid.
+       (_gpgme_mkstemp): Use GetTempPathA instead of GetTempPath.
+
+       * gpgme.h.in: Use _WIN32 instead of _MSC_VER.  Include time.h for
+       time_t.
+
+2010-05-07  Marcus Brinkmann  <marcus@g10code.de>
+
+       * engine-g13.c, gpgme.c, engine-gpgsm.c, engine-gpg.c,
+       op-support.c, engine-assuan.c, gpgme-tool.c: Include <locale.h>
+       only if available with HAVE_LOCALE_H and conditionalize use of
+       LC_CTYPE on its definition.
+       * engine-gpgconf.c: Do not include <locale.h>.
+
+       * engine-gpgsm.c (gpgsm_new, start): Cast between int and
+       assuan_fd_t.
+       * assuan-support.c (my_pipe, my_close, my_read, my_write): Likewise.
+       * gpgme-tool.c (server_data_obj, server_reset_fds, gpgme_server),
+       (my_recvmsg, my_sendmsg, my_spawn): Likewise.
+       * engine-assuan.c (start): Likewise.
+       * engine-g13.c (start): Likewise.
+
+2010-05-06  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-glib-io.c, w32-io.c, w32-qt-io.cpp, w32-sema.c, w32-util.c:
+       Do not include <signal.h>.
+
+       * sign.c, data-user.c, conversion.c, debug.c, verify.c, data.c,
+       decrypt.c, delete.c, assuan-support.c, import.c, engine-gpgsm.c,
+       data-mem.c, op-support.c, w32-io.c, w32-util.c, data-compat.c: Use
+       gpg_error_from_syserror instead gpg_error_from_errno, and use
+       gpg_err_set_errno to set error number.
+       * setenv.c: Include <gpg-error.h> and define __set_errno to use
+       gpg_err_set_errno.
+       * gpgme-tool.c (ARGP_ERR_UNKNOWN): Define to EDEADLOCK (which is
+       mapped in Windows CE) instead of E2BIG (which is not).
+       (gt_import_keys): Initialize err.
+
+2010-04-19  Marcus Brinkmann  <marcus@g10code.de>
+
+       * assuan-support.c (my_spawn): Cast to avoid warning.
+       * engine-g13.c (g13_new): Make ARGV array of pointer to const
+       char.
+       (g13_assuan_simple_command) [!USE_DESCRIPTOR_FUNCTION]: Don't define.
+       * ops.h (_gpgme_key_append_name): Same in prototype.
+       * key.c (_gpgme_key_append_name): Make SRC argument pointer to
+       const char.
+       * posix-util.c (_gpgme_get_uiserver_socket_path): Make HOMEDIR
+       const.
+       * vfs-mount.c (gpgme_op_vfs_transact_start): Never define this
+       potentially useful but currently unused function.
+       * vfs-create.c (gpgme_op_vfs_transact_start): Likewise.
+
+2010-04-16  Werner Koch  <wk@g10code.com>
+
+       * w32-io.c (is_socket): New.
+       (reader, writer): Use it to figure out the API to use.
+
+2010-03-15  Werner Koch  <wk@g10code.com>
+
+       * gpgme.h.in: Add autoconf template to set generated file to
+       read-only in an emacs buffer.
+
+2010-03-12  Werner Koch  <wk@g10code.com>
+
+       * gpgme.h.in (GPGME_STATUS_SUCCESS): Use the right file for the
+       change; see below.
+
+       * passwd.c (op_data_t): New.
+       (passwd_start): Setup OPD.
+       (passwd_status_handler): Return GPG_ERR_NOT_SUPPORTED if needed.
+       * context.h (OPDATA_PASSWD): New.
+       * gpgme.h (GPGME_STATUS_SUCCESS): New.
+
+2010-03-09  Werner Koch  <wk@g10code.com>
+
+       * engine-gpgsm.c (gpgsm_keylist): Try to start the agent.
+
+2010-02-17  Werner Koch  <wk@g10code.com>
+
+       * posix-io.c (notify_table): Change implementation.
+       (notify_table_item_t, notify_table_size, notify_table_lock): New.
+       (_gpgme_io_close, _gpgme_io_set_close_notify): Adjust for new
+       implementation.
+
+2010-02-16  Werner Koch  <wk@g10code.com>
+
+       * gpgme-tool.c (spacep, has_option, skip_options): New.
+       (cmd_export): Implement option --minimal.
+
+       * gpgme.h.in (GPGME_EXPORT_MODE_MINIMAL): New.
+       * export.c (export_start, export_ext_start): Implement it.
+       * engine-gpg.c (export_common): Ditto.
+
+2010-01-25  Werner Koch  <wk@g10code.com>
+
+       * w32-io.c (_gpgme_io_connect): Fix return code check to make it work.
+
+       * version.c (do_subsystem_inits): Remove superfluous second
+       WSAStartup.
+
+2010-01-22  Werner Koch  <wk@g10code.com>
+
+       * w32-io.c (writer): Try to use send first.
+       (reader): Try to use recv first.
+
+2010-01-08  Werner Koch  <wk@g10code.com>
+
+       * engine-gpg.c (gpg_passwd): New.
+       (_gpgme_engine_ops_gpg): Register.
+       * passwd.c (parse_error): New.
+       (passwd_status_handler): Use it.
+
+2010-01-07  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (result_xml_write_cb_t, struct result_xml_state):
+       New types.
+       (MAX_TAGS): New macro.
+       (result_init, result_xml_indent, result_xml_tag_start)
+       (result_xml_tag_data, result_xml_tag_end, result_add_error)
+       (result_add_pubkey_algo, result_add_hash_algo, result_add_keyid)
+       (result_add_fpr, result_add_timestamp, result_add_sig_mode)
+       (result_add_value, result_add_string, result_encrypt_to_xml)
+       (result_decrypt_to_xml, result_sign_to_xml)
+       (result_verify_to_xml, result_import_to_xml)
+       (result_genkey_to_xml, result_keylist_to_xml)
+       (result_vfs_mount_to_xml): New functions.
+       (gt_result): Rewritten.
+
+2010-01-05  Werner Koch  <wk@g10code.com>
+
+       * gpgme-tool.c (gt_passwd, cmd_passwd): New.
+       (register_commands): Register.
+
+       * gpgme.h.in (gpgme_op_passwd_start, gpgme_op_passwd): New.
+       * libgpgme.vers, gpgme.def: Add new functions.
+       * passwd.c: New.
+       * Makefile.am (main_sources): Add passwd.c
+       * engine.c, engine.h (_gpgme_engine_op_passwd): New.
+       * engine-backend.h (struct engine_ops): Add PASSWD.
+       * engine-gpgsm.c (gpgsm_passwd): New.
+       (_gpgme_engine_ops_gpgsm): Register.
+       (gpgsm_reset): Reset only if we have a conenction.
+
+       * gpgme.h.in (GPGME_PK_ECDSA, GPGME_PK_ECDH): New.
+       * gpgme.c (gpgme_pubkey_algo_name): Add them.
+
+2009-12-22  Marcus Brinkmann  <marcus@g10code.de>
+
+       * debug.c: Test for TLS, not __GNUC__
+
+2009-12-15  Marcus Brinkmann  <marcus@g10code.de>
+
+       * assuan-support.c (my_spawn): Calloc, not malloc, the fd_items.
+
+2009-12-10  Werner Koch  <wk@g10code.com>
+
+       * debug.c (debug_init): Test on sgid process.
+
+2009-12-08  Marcus Brinkmann  <marcus@g10code.de>
+
+       * Makefile.am (LTRCCOMPILE): Refactor with ...
+       (RCCOMPILE): ... this new macro.
+       (SUFFIXES): Add .lo.
+       (gpgme_res_ldflag): Removed.
+       (gpgme_res): Use libtool object file name here.
+       (libgpgme_la_LDFLAGS): Remove gpgme_res_ldflag usage.
+       (libgpgme_la_LIBADD): Add gpgme_res.
+
+       * ath.c (ath_self) [HAVE_W32_SYSTEM]: Fix typo.
+
+2009-12-02  Werner Koch  <wk@g10code.com>
+
+       * gpgconf.c (gpgme_conf_arg_release): No return in a function
+       returning void.  Reported by Wyllys Ingersoll.
+
+2009-12-01  Werner Koch  <wk@g10code.com>
+
+       * gpgme-tool.c (cmd_getauditlog): Add flag --html.
+       (hlp_getauditlog): New.
+
+       * gpgme-tool.c (GT_GCC_A_SENTINEL, GT_GCC_A_PRINTF): New.
+       (gt_write_status): Use sentinel.
+       (argp_error, log_error): Use printf attribute.
+       (argp_parse): Remove extra argument to argp_error.
+       (_gt_progress_cb, gt_get_engine_info, gt_get_keylist_mode)
+       (gt_result): Add NULL arg.
+
+2009-11-26  Marcus Brinkmann  <marcus@g10code.de>
+
+       * opassuan.c (opassuan_start): Allocate result structure before
+       beginning operation.
+
+2009-11-25  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (gpgme_server): Use assuan_fd_t and assuan_fdopen
+       on fds.
+
+2009-11-13    <wk@g10code.com>
+
+       * sign.c (_gpgme_sign_status_handler): Handle SIG_CREATED_SEEN.
+       * engine-uiserver.c (uiserver_sign): Make sending SENDER optional.
+
+2009-11-10  Marcus Brinkmann  <marcus@g10code.de>
+
+       * op-support.c (_gpgme_op_reset): Instead of last change, only set
+       sub protocol if it is not the default.
+
+2009-11-10  Werner Koch  <wk@g10code.com>
+
+       * op-support.c (_gpgme_op_reset): Ignore GPG_ERR_NOT_IMPLEMENTED
+       while setting the sub protocol.
+
+       * engine-uiserver.c (uiserver_new): Pass fdpassing flag to
+       assuan_socket_connect.
+       (set_recipients): Replace fingerprint by user id.
+
+       * engine-gpgsm.c (set_recipients): Fix non-terminating loop in
+       case of a missing key.
+
+2009-11-10  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.c (gpgme_new): Set default sub protocol.
+       * gpgme-tool.c: Implement get sub protocol.
+
+       * gpgme.h.in (gpgme_get_sub_protocol): Add prototype.
+       * gpgme.def, libgpgme.vers: Add gpgme_get_sub_protocol.
+       * context.h (struct gpgme_context): New member sub_protocol.
+       * gpgme.c (gpgme_set_sub_protocol): Set CTX->sub_protocol.
+       (gpgme_get_sub_protocol): New function.
+       * op-support.c (_gpgme_op_reset): Set sub protocol.
+
+       * Makefile.am (uiserver_components): New variable.
+       (main_sources): Add it.
+       * ops.h, key.c (_gpgme_key_append_name): Take CONVERT argument,
+       implement it.  Adjust callers.
+       (gpgme_key_from_uid): New function.
+       * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_DEFAULT.
+       (gpgme_encrypt_flags_t): Add GPGME_ENCRYPT_PREPARE,
+       GPGME_ENCRYPT_EXPECT_SIGN.
+       (gpgme_set_sub_protocol, gpgme_key_from_uid): New functions.
+       * libgpgme.vers, gpgme.def: Add new functions.
+       * gpgme.c (gpgme_set_protocol): Add UIServer protocol.
+       (gpgme_set_sub_protocol): New function.
+       (gpgme_get_protocol_name): Add UIServer and default protocol.
+       * assuan-support.c: Return correct error values, implement
+       socketpair for POSIX.
+       * priv-io.h, posix-io.c, w32-io.c, w32-glib-io.c,
+       w32-qt-io.cpp (_gpgme_io_spawn): Add ATFORK and ATFORKVALUE
+       arguments.  Implement it for POSIX.  Adjust all callers.
+       * engine.h, engine-backend.h (_gpgme_engine_set_protocol)
+       (_gpgme_engine_op_decrypt_verify): New prototypes.  Adjust all
+       users.
+       * engine.c (engine_ops, gpgme_get_engine_info): Add UIServer
+       engine.
+       (_gpgme_engine_set_protocol, _gpgme_engine_op_decrypt_verify): New
+       function.
+       * decrypt-verify.c (decrypt_verify_start): Call
+       _gpgme_engine_op_decrypt_verify.
+       * util.h, posix-util.c,
+       w32-util.c (_gpgme_get_uiserver_socket_path): New function.
+       * engine-gpgsm.c (gpgsm_set_fd): Fix _gpgme_io_pipe invocation.
+       * gpgme-tool.c: Some support for UIServer protocol.
+       * engine-uiserver.c: New file.
+
+2009-11-09  Marcus Brinkmann  <marcus@g10code.de>
+
+       * engine-gpgsm.c (gpgsm_new): Close server side FDs.
+
+2009-11-06  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (struct gpgme_tool): New members write_data and
+       write_data_hook.
+       (gt_write_data): New function.
+       (gt_result): Output vfs_mount result.
+       (server_write_data): New function.
+       (gpgme_server): Initialize write_data members.
+
+2009-11-05  Marcus Brinkmann  <marcus@g10code.de>
+
+       * engine-g13.c (struct engine_g13): Remove members RESULT_CB and
+       RESULT_CB_VALUE.
+       (g13_assuan_simple_command, status_handler): Don't use those anymore.
+       (g13_transact): Remove them from argument list, too.
+       * vfs-mount.c (_gpgme_vfs_mount_status_handler): New function.
+       (_gpgme_op_vfs_mount): Pass it to transact.
+
+       * engine-assuan.c (llass_new): Update use of assuan_socket_connect.
+       * engine-gpgsm.c (gpgsm_new): Update use of assuan_pipe_connect.
+       * engine-g13.c (g13_new): Likewise.
+
+       * priv-io.h (IOSPAWN_FLAG_NOCLOSE): New flag.
+       * w32-io.c (_gpgme_io_spawn): Implement this flag.
+       * posix-io.c (_gpgme_io_spawn): Likewise.
+       * w32-glib-io.c (_gpgme_io_spawn): Likewise.
+       * assuan-support.c (my_spawn): Set this flag.
+
+       * decrypt.c (gpgme_op_decrypt_start): Fix use of debug macro.
+       * decrypt-verify.c (gpgme_op_decrypt_verify_start): Likewise.
+       * delete.c (gpgme_op_delete_start): Likewise.
+       * edit.c (gpgme_op_edit_start, gpgme_op_card_edit_start):
+       Likewise.
+       * encrypt.c (gpgme_op_encrypt_start): Likewise.
+       * encrypt-sign.c (gpgme_op_encrypt_sign_start): Likewise.
+       * export.c (gpgme_op_export_start, gpgme_op_export_ext_start)
+       (gpgme_op_export_keys_start, gpgme_op_export_keys): Likewise.
+       * genkey.c (gpgme_op_genkey_start): Likewise.
+       * getauditlog.c (gpgme_op_getauditlog_start): Likewise.
+       * import.c (gpgme_op_import_start, gpgme_op_import_keys_start):
+       Likewise.
+       * opassuan.c (gpgme_op_assuan_transact_start): Likewise.
+       * sign.c (gpgme_op_sign_start): Likewise.
+       * verify.c (gpgme_op_verify_start): Likewise.
+       * vfs-create.c (gpgme_op_vfs_create): Likewise.
+       * vfs-mount.c (gpgme_op_vfs_mount): Likewise.
+
 2009-11-04  Marcus Brinkmann  <marcus@g10code.de>
 
        * ath.h (ath_self): New prototype.  Include <stdint.h>
 
 2009-06-16  Werner Koch  <wk@g10code.com>
 
-       * version.c: Include stdlib.h. 
+       * version.c: Include stdlib.h.
 
        * gpgme.h.in (gpgme_data_encoding_t): Add GPGME_DATA_ENCODING_URL,
        GPGME_DATA_ENCODING_URLESC, GPGME_DATA_ENCODING_URL0.
 
        * gpgme.c: Include priv-io.h.
        (gpgme_io_read, gpgme_io_write): New.
-       * libgpgme.vers (GPGME_1.1): Add them. 
+       * libgpgme.vers (GPGME_1.1): Add them.
        * gpgme.def: Ditto.
 
        * Makefile.am (main_sources): Remove gpgme.h.
 
        * opassuan.c, dirinfo.c, engine-assuan.c: New.
        * Makefile.am:  Add them.
-       * engine-backend.h: Add _gpgme_engine_ops_assuan. 
+       * engine-backend.h: Add _gpgme_engine_ops_assuan.
        (struct engine_ops): Add field OPASSUAN_TRANSACT.  Update all
        engine intializers.
        * Makefile.am (gpgsm_components): Add engine-assuan.c.
        * op-support.c (_gpgme_op_reset): Implement a no-reset flag.
        * getauditlog.c (getauditlog_start): Use that flag.
 
+2007-11-20  Werner Koch  <wk@g10code.com>
+
+       * op-support.c (_gpgme_parse_inv_recp): Add new reason code 11.
+
 2007-11-22  Werner Koch  <wk@g10code.com>
 
        * gpgme.h (gpgme_op_getauditlog_start, gpgme_op_getauditlog): New.
        (_gpgme_engine_ops_gpgsm): Insert new function.
        (gpgsm_new): Try to enable audit log support.
        * rungpg.c (_gpgme_engine_ops_gpg): Insert dummy entry.
-       
-2007-11-20  Werner Koch  <wk@g10code.com>
-
-       * op-support.c (_gpgme_parse_inv_recp): Add new reason code 11.
 
 2007-11-12  Marcus Brinkmann  <marcus@g10code.de>
 
        drops to 0.
        (find_reader, find_writer, kill_reader, kill_writer): Beautify.
        * priv-io.h (_gpgme_io_dup): New prototype.
-       * posix-io.c (_gpgme_io_dup): New function. 
+       * posix-io.c (_gpgme_io_dup): New function.
        * w32-io.c (_gpgme_io_dup): Likewise.
        * w32-glib-io.c (_gpgme_io_dup): Likewise.
        * engine-gpgsm.c (start): Reverting to version 2007-07-10.
        in case of error.
        * w32-io.c (_gpgme_io_read): Return C->error_code in ERRNO.
        (_gpgme_io_write): Likewise.
-       
+
        * priv-io.h (_gpgme_io_set_close_notify): Change type of HANDLER
        to _gpgme_close_notify_handler.
        (_gpgme_close_notify_handler): New type.
 2007-07-10  Marcus Brinkmann  <marcus@g10code.de>
 
        * priv-io.h (_gpgme_io_dup): New prototype.
-       * posix-io.c (_gpgme_io_dup): New function. 
+       * posix-io.c (_gpgme_io_dup): New function.
        * w32-io.c (_gpgme_io_dup): Likewise.
        * w32-glib-io.c (_gpgme_io_dup): Likewise.
        * engine-gpgsm.c (start): Use _gpgme_dup() instead of dup().
        (fd_cbs): Add fd_get_fd.
        * data-stream.c (stream_get_fd): New function.
        (stream_cbs): Add stream_get_fd.
-       * data-mem.c (mem_cbs): Add NULL for get_fd callback.   
+       * data-mem.c (mem_cbs): Add NULL for get_fd callback.
        * data-user.c (user_cbs): Likewise.
        * engine-gpgsm.c (gpgsm_set_fd) [USE_DESCRIPTOR_PASSING]: Try to
        short-cut by passing the data descriptor directly.
        * engine-gpgsm.c (gpgsm_new): Move code to dup status_fd to ...
        (start): ... here.
        * posix-io.c (_gpgme_io_recvmsg, _gpgme_io_sendmsg): New functions.
-       
+
        * engine.h (_gpgme_engine_new): Remove arguments lc_ctype and
        lc_messages from prototype.
        (_gpgme_engine_set_locale): New prototype.
        (libgpgme_pth_la_SOURCES): Add $(system_components_not_extra).
        (libgpgme_glib_la_LDFLAGS, libgpgme_glib_la_DEPENDENCIES,
        (libgpgme_glib_la_LIBADD, libgpgme_glib_la_CFLAGS)
-       [BUILD_W32_GLIB]: New variables. 
+       [BUILD_W32_GLIB]: New variables.
        * gpgme-config.in (glib): New option.
        * gpgme.m4 (AM_PATH_GPGME_GLIB): New macro.
 
        * w32-io.c (_gpgme_io_read, _gpgme_io_write): Print content in
        debug mode too.
 
-2005-08-19  Werner Koch  <wk@g10code.com>
-
-       * gpgme.def: New.
-       * versioninfo.rc.in: New.
-       * Makefile.am: Addes support for building a W32 DLL.
-       
-       * ttyname_r.c (ttyname_r) [W32]: Return error.
-       * ath-compat.c [W32]: select and co are not yet supported; return
-       error.
-       * data-stream.c (stream_seek): Use ftell if ftello is not available.
-
-2005-08-08  Werner Koch  <wk@g10code.com>
-
-       * util.h (stpcpy): Renamed to ..
-       (_gpgme_stpcpy): .. this and made inline.  This avoids duplicate
-       definitions when linking statically.
-       * stpcpy.c: Removed.
-       
 2005-07-27  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgme.h (gpgme_status_code_t): Add GPGME_STATUS_PLAINTEXT.
        OPD->result.plaintext_filename.
        (_gpgme_verify_status_handler): Handle GPGME_STATUS_PLAINTEXT.
 
+2005-08-08  Werner Koch  <wk@g10code.com>
+
+       * util.h (stpcpy): Renamed to ..
+       (_gpgme_stpcpy): .. this and made inline.  This avoids duplicate
+       definitions when linking statically.
+       * stpcpy.c: Removed.
+
+2005-08-19  Werner Koch  <wk@g10code.com>
+
+       * gpgme.def: New.
+       * versioninfo.rc.in: New.
+       * Makefile.am: Addes support for building a W32 DLL.
+
+       * ttyname_r.c (ttyname_r) [W32]: Return error.
+       * ath-compat.c [W32]: select and co are not yet supported; return
+       error.
+       * data-stream.c (stream_seek): Use ftell if ftello is not available.
+
 2005-07-26  Marcus Brinkmann  <marcus@g10code.de>
 
        * keylist.c (gpgme_get_key): Allow key IDs.
        * data.c, engine-gpgsm.c, posix-io.c, rungpg.c, version.c,
        w32-io.c, wait-private.c, wait-global.c, wait-user.c, wait.c:
        Change all includes of "io.h" to "priv-io.h"
-       
+
 2005-03-09  Werner Koch  <wk@g10code.com>
 
        * w32-util.c (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): Do not
        files.
 
 2005-03-07  Timo Schulz  <twoaday@g10code.de>
+
         * gpgme.h: [_WIN32] Removed ssize_t typedef.
         * ath.h: [_WIN32] Added some (dummy) types.
         * io.h: [_WIN32] include stdio.h.
 
        * data.c (_gpgme_data_outbound_handler): Close the file descriptor
        if we get an EPIPE.
-       
+
        * data-stream.c (stream_seek): Call ftello and return the current
        offset.
        * data.h (struct gpgme_data): Change type of data.mem.offset to
 
 2004-02-17  Werner Koch  <wk@gnupg.org>
 
-       * gpgme.h: Add GPGME_KEYLIST_MODE_VALIDATE. 
+       * gpgme.h: Add GPGME_KEYLIST_MODE_VALIDATE.
        * engine-gpgsm.c (gpgsm_keylist): Send this to gpgsm.
 
 2004-02-15  Werner Koch  <wk@gnupg.org>
        * engine.c: Rename EngineObject to engine_t in the file.  Also
        EngineStatusHandler to engine_status_handler_t,
        EngineCommandHandler to engine_command_handler_t and
-       EngineColonLineHandler to engine_colon_line_handler.    
+       EngineColonLineHandler to engine_colon_line_handler.
        * rungpg.c (start): Likewise.
        * engine-gpgsm.c: Likewise.
        * engine-backend.h (struct engine_ops): Likewise
        (gpgme_op_sign): Likewise.
        * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Call
        _gpgme_op_sign_init_result.
-       
+
        * delete.c: Include <errno.h> and "gpgme.h", but not "util.h" or
        "key.h".
        (enum delete_problem): Move into function delete_status_handler.
        (_gpgme_data_inbound_handler): Expand _gpgme_data_append, because
        it will go.  Do not assert DH.
        (_gpgme_data_outbound_handler): Do not assert DH.
-       
+
        * export.c: Do not include <stdlib.h>, "debug.h" and "util.h", but
        "gpgme.h".
        (export_status_handler): Change type of first argument to void *.
        * key.c (gpgme_key_get_string_attr): Fix validity attribute.
 
 2003-04-24  Marcus Brinkmann  <marcus@g10code.de>
-       
+
        * gpgme.h (struct _gpgme_op_genkey_result): New structure.
        (GpgmeGenKeyResult): New type.
        (gpgme_op_genkey): Drop last argument.
        fail_on_pending_request.
        * util.h: Don't include "types.h" or "debug.h", but include "gpgme.h".
 
-2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
+2003-01-19  Marcus Brinkmann  <marcus@g10code.de>
 
-       * types.h (EngineObject): Move typedef to ...
-       * engine.h: ... here.
-       * types.h (GpgObject): Move typedef to ...
-       * rungpg.c: ... here.
-       * types.h (GpgsmObject): Move typedef to ...
-       * engine-gpgsm.c: ... here.
+       * rungpg.c (_gpgme_engine_ops_gpg): Remove gpg_start.
+       (gpg_start): Rename to ...
+       (start): ... this function.  Change arguments to GpgObject.
+       (gpg_decrypt): Call start.
+       (gpg_edit): Likewise.
+       (gpg_encrypt): Likewise.
+       (gpg_encrypt_sign): Likewise.
+       (gpg_export): Likewise.
+       (gpg_import): Likewise.
+       (gpg_keylist): Likewise.
+       (gpg_keylist_ext): Likewise.
+       (gpg_trustlist): Likewise.
+       (gpg_verify): Likewise.
 
-       * util.h (return_if_fail, return_null_if_fail,
-       return_val_if_fail): Remove macro.
-       * gpgme.c (gpgme_cancel): Don't use return_if_fail.
-       * key.c (gpgme_key_ref): Likewise.
-       * signers.c (gpgme_signers_enum): Likewise.
-       (gpgme_signers_clear): Likewise.
+       * engine-gpgsm.c (_gpgme_engine_ops_encrypt): Remove gpgsm_start.
+       (gpgsm_start): Rename to ...
+       (struct gpgsm_object_s): Remove member command.
+       (gpgsm_release): Don't free command.
+       (start): ... this function.  Change arguments to GpgsmObject and
+       const char *.
+       (gpgsm_decrypt): Call start.
+       (gpgsm_delete): Likewise.
+       (gpgsm_encrypt): Likewise.
+       (gpgsm_export): Likewise.
+       (gpgsm_genkey): Likewise.
+       (gpgsm_import): Likewise.
+       (gpgsm_keylist): Likewise.
+       (gpgsm_keylist_ext): Likewise.
+       (gpgsm_verify): Likewise.
 
-       * engine-backend.h (struct engine_ops): Rename get_path to
-       get_file_name.
-       * gpgme.h (struct _gpgme_engine_info): Rename member path to
-       file_name.
-       * version.c: Do not include <stdio.h>, <stdlib.h>, context.h and
-       util.h.  Other clean ups.
-       (parse_version_number): Protect more seriously against
-       overflow.
-       (gpgme_get_engine_info): Move to ...
-       * engine.c (gpgme_get_engine_info): ... here.
-       (_gpgme_engine_get_info): Function removed.
-       (_gpgme_engine_get_path): Make static and rename to ...
-       (engine_get_file_name): .. this.
-       (_gpgme_engine_get_version): Make static and rename to ...
-       (engine_get_version): ... this.
-       (_gpgme_engine_get_req_version): Make static and rename to ...
-       (engine_get_req_version): ... this.
-       * engine.h (_gpgme_engine_get_path, _gpgme_engine_get_version,
-       _gpgme_engine_req_version, _gpgme_engine_get_info.): Remove
-       prototypes.
+       * decrypt.c (_gpgme_decrypt_start): Don't call
+       _gpgme_engine_start.
+       * delete.c (_gpgme_op_delete_start): Likewise.
+       * edit.c (_gpgme_op_edit_start): Likewise.
+       * encrypt.c (_gpgme_op_encrypt_start):
+       * encrypt-sign.c (_gpgme_op_encrypt_sign_start):
+       * export.c (_gpgme_op_export_start): Likewise.
+       * genkey.c (_gpgme_op_genkey_start): Likewise.
+       * import.c (_gpgme_op_import_start): Likewise.
+       * keylist.c (gpgme_op_keylist_ext_start): Likewise.
+       (gpgme_op_keylist_start): Likewise.
+       * sign.c (_gpgme_op_sign_start): Likewise.
+       * trustlist.c (gpgme_op_trustlist_start): Likewise.
+       * verify.c (_gpgme_op_verify_start): Likewise.
 
-       * gpgme.h (enum GpgmeProtocol): Remove GPGME_PROTOCOL_AUTO.
-       * gpgme.c (gpgme_set_protocol): Don't handle GPGME_PROTOCOL_AUTO.
-       (gpgme_get_protocol_name): New function.
+       * engine-backend.h (struct engine_ops): Remove member start.
+
+       * engine.h (_gpgme_engine_start): Remove prototype.
+       * engine.c (_gpgme_engine_start): Remove function.
+
+2003-01-19  Miguel Coca  <mcoca@gnu.org>
+
+       * w32-io.c (_gpgme_io_select): Add missing argument in calls to
+       DEBUG_BEGIN.
+       * w32-util.c: Include "sema.h".
+       (find_program_in_registry): Change DEBUG1 to DEBUG2, fixes compilation
+       error.
 
-       * engine-backend.h (struct engine_ops): New member
-       get_req_version, remove member check_version.
-       * engine.h (_gpgme_Engine_get_version): New prototype.
-       * rungpg.c (gpg_get_req_version): New function.
-       (gpg_check_version): Function removed.
-       (_gpgme_engine_ops_gpg): Add gpg_get_req_version, remove
-       gpg_check_version.
-       * engine-gpgsm.c (gpgsm_get_req_version): New function.
-       (gpgsm_check_version): Function removed.
-       (_gpgme_engine_ops_gpgsm): Add gpgsm_get_req_version, remove
-       gpgsm_check_version.
-       * engine.c: Include ops.h.
-        (_gpgme_engine_get_req_version): New function.
-       (gpgme_engine_check_version): Rewritten.
-       * version.c (gpgme_get_engine_info): Rewritten.
-       * gpgme.h (gpgme_engine_info): New structure.
-       (GpgmeEngineInfo): New type.
-       
 2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
 
        * types.h: Remove byte and ulong types.
 
        * key.c (gpgme_key_sig_get_string_attr): Use validity_to_string
        instead otrust_to_string to calculate validity.
-       
-2003-01-19  Miguel Coca  <mcoca@gnu.org>
-
-       * w32-io.c (_gpgme_io_select): Add missing argument in calls to
-       DEBUG_BEGIN.
-       * w32-util.c: Include "sema.h".
-       (find_program_in_registry): Change DEBUG1 to DEBUG2, fixes compilation
-       error.
 
-2003-01-19  Marcus Brinkmann  <marcus@g10code.de>
+2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
 
-       * rungpg.c (_gpgme_engine_ops_gpg): Remove gpg_start.
-       (gpg_start): Rename to ...
-       (start): ... this function.  Change arguments to GpgObject.
-       (gpg_decrypt): Call start.
-       (gpg_edit): Likewise.
-       (gpg_encrypt): Likewise.
-       (gpg_encrypt_sign): Likewise.
-       (gpg_export): Likewise.
-       (gpg_import): Likewise.
-       (gpg_keylist): Likewise.
-       (gpg_keylist_ext): Likewise.
-       (gpg_trustlist): Likewise.
-       (gpg_verify): Likewise.
+       * types.h (EngineObject): Move typedef to ...
+       * engine.h: ... here.
+       * types.h (GpgObject): Move typedef to ...
+       * rungpg.c: ... here.
+       * types.h (GpgsmObject): Move typedef to ...
+       * engine-gpgsm.c: ... here.
 
-       * engine-gpgsm.c (_gpgme_engine_ops_encrypt): Remove gpgsm_start.
-       (gpgsm_start): Rename to ...
-       (struct gpgsm_object_s): Remove member command.
-       (gpgsm_release): Don't free command.
-       (start): ... this function.  Change arguments to GpgsmObject and
-       const char *.
-       (gpgsm_decrypt): Call start.
-       (gpgsm_delete): Likewise.
-       (gpgsm_encrypt): Likewise.
-       (gpgsm_export): Likewise.
-       (gpgsm_genkey): Likewise.
-       (gpgsm_import): Likewise.
-       (gpgsm_keylist): Likewise.
-       (gpgsm_keylist_ext): Likewise.
-       (gpgsm_verify): Likewise.
+       * util.h (return_if_fail, return_null_if_fail,
+       return_val_if_fail): Remove macro.
+       * gpgme.c (gpgme_cancel): Don't use return_if_fail.
+       * key.c (gpgme_key_ref): Likewise.
+       * signers.c (gpgme_signers_enum): Likewise.
+       (gpgme_signers_clear): Likewise.
 
-       * decrypt.c (_gpgme_decrypt_start): Don't call
-       _gpgme_engine_start.
-       * delete.c (_gpgme_op_delete_start): Likewise.
-       * edit.c (_gpgme_op_edit_start): Likewise.
-       * encrypt.c (_gpgme_op_encrypt_start): 
-       * encrypt-sign.c (_gpgme_op_encrypt_sign_start): 
-       * export.c (_gpgme_op_export_start): Likewise.
-       * genkey.c (_gpgme_op_genkey_start): Likewise.
-       * import.c (_gpgme_op_import_start): Likewise.
-       * keylist.c (gpgme_op_keylist_ext_start): Likewise.
-       (gpgme_op_keylist_start): Likewise.
-       * sign.c (_gpgme_op_sign_start): Likewise.
-       * trustlist.c (gpgme_op_trustlist_start): Likewise.
-       * verify.c (_gpgme_op_verify_start): Likewise.
+       * engine-backend.h (struct engine_ops): Rename get_path to
+       get_file_name.
+       * gpgme.h (struct _gpgme_engine_info): Rename member path to
+       file_name.
+       * version.c: Do not include <stdio.h>, <stdlib.h>, context.h and
+       util.h.  Other clean ups.
+       (parse_version_number): Protect more seriously against
+       overflow.
+       (gpgme_get_engine_info): Move to ...
+       * engine.c (gpgme_get_engine_info): ... here.
+       (_gpgme_engine_get_info): Function removed.
+       (_gpgme_engine_get_path): Make static and rename to ...
+       (engine_get_file_name): .. this.
+       (_gpgme_engine_get_version): Make static and rename to ...
+       (engine_get_version): ... this.
+       (_gpgme_engine_get_req_version): Make static and rename to ...
+       (engine_get_req_version): ... this.
+       * engine.h (_gpgme_engine_get_path, _gpgme_engine_get_version,
+       _gpgme_engine_req_version, _gpgme_engine_get_info.): Remove
+       prototypes.
 
-       * engine-backend.h (struct engine_ops): Remove member start.
+       * gpgme.h (enum GpgmeProtocol): Remove GPGME_PROTOCOL_AUTO.
+       * gpgme.c (gpgme_set_protocol): Don't handle GPGME_PROTOCOL_AUTO.
+       (gpgme_get_protocol_name): New function.
 
-       * engine.h (_gpgme_engine_start): Remove prototype.
-       * engine.c (_gpgme_engine_start): Remove function.
+       * engine-backend.h (struct engine_ops): New member
+       get_req_version, remove member check_version.
+       * engine.h (_gpgme_Engine_get_version): New prototype.
+       * rungpg.c (gpg_get_req_version): New function.
+       (gpg_check_version): Function removed.
+       (_gpgme_engine_ops_gpg): Add gpg_get_req_version, remove
+       gpg_check_version.
+       * engine-gpgsm.c (gpgsm_get_req_version): New function.
+       (gpgsm_check_version): Function removed.
+       (_gpgme_engine_ops_gpgsm): Add gpgsm_get_req_version, remove
+       gpgsm_check_version.
+       * engine.c: Include ops.h.
+        (_gpgme_engine_get_req_version): New function.
+       (gpgme_engine_check_version): Rewritten.
+       * version.c (gpgme_get_engine_info): Rewritten.
+       * gpgme.h (gpgme_engine_info): New structure.
+       (GpgmeEngineInfo): New type.
 
 2003-01-06  Werner Koch  <wk@gnupg.org>
 
        (mem_release): Change return type to void.
        * data-user.c (user_read): Change return type to ssize_t.
        (user_release): Change return type to void.
-       * data-compat.c (old_user_read): Change return type to ssize_t. 
+       * data-compat.c (old_user_read): Change return type to ssize_t.
        * gpgme.h (GpgmeDataReadCb): Likewise.
        (gpgme_data_read): Likewise.
        (GpgmeDataSeekCb): Change return type to off_t.
        _gpgme_data_append_string_for_xml rather than
        _gpgme_data_append_string for the field content.
        Submitted by Miguel Coca <e970095@zipi.fi.upm.es>.
-       
+
 2002-10-10  Marcus Brinkmann  <marcus@g10code.de>
 
        * rungpg.h, engine-gpgsm.h: File removed.
        * import.c (_gpgme_op_import_start): Likewise.
        * sign.c (_gpgme_op_sign_start): Likewise.
        * verify.c (_gpgme_op_verify_start): Likewise.
-       
+
        * encrypt.c (gpgme_op_encrypt): Remove hack that returns invalid
        no recipient if no data was returned.
        * encrypt-sign.c (gpgme_op_encrypt_sign): Remove hack that returns
        (build_argv): Use new member INBOUND to determine direction of
        file descriptor.  Don't check the data type.
        * rungpg.h (_gpgme_gpg_add_data): Add new argument to prototype.
-       
+
        * gpgme.c (gpgme_get_op_info): Don't call
        _gpgme_data_get_as_string if CTX->op_info is NULL.
 
 
 2002-08-23  Werner Koch  <wk@gnupg.org>
 
-       * gpgme-config.in: Made --prefix work for --libs. 
+       * gpgme-config.in: Made --prefix work for --libs.
 
 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
 
 
        * gpgme.m4: Replaced with a new and faster version.  This does not
        anymore try to build test programs.  If we really need test
-       programs, we should add an option to gpgme-config to do so. 
+       programs, we should add an option to gpgme-config to do so.
 
        * vasprintf.c (int_vasprintf): Hack to handle NULL passed for %s.
 
        * gpgme.h (GPGME_KEYLIST_MODE_SIGS): New.
        * rungpg.c (_gpgme_gpg_op_keylist): Include sigs in listing depending
        non the list mode.
-       
+
        * key.c (gpgme_key_get_string_attr): Use GPGME_ATTR_TYPE to return
        information about the key type (PGP or X.509).
        (gpgme_key_get_ulong_attr): Likewise.
        * rungpg.c (struct gpg_object_s): Likewise for CMD.code.
 
        These changes add an edit operation to GPGME:
-       
+
        * context.h (struct gpgme_context_s): New member RESULT.edit.  *
        ops.h: Add prototype for _gpgme_release_edit_result and
        _gpgme_passphrase_command_handler.
        * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
        table (eg use synchronous mode).
 
+2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.h: Fix documentation of key attribute retrieval functions.
+
 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
 
        * ops.h (_gpgme_wait_on_condition): Remove HANG argument from
        table (eg use synchronous mode).
        (gpgme_op_trustlist_next): Remove HANG argument from
        _gpgme_wait_on_condition.  Check its return value.
-       
-2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: Fix documentation of key attribute retrieval functions.
 
 2002-06-26  Werner Koch  <wk@gnupg.org>
 
 2002-06-12  Werner Koch  <wk@gnupg.org>
 
        * keylist.c (struct keylist_result_s): New.
-       (_gpgme_release_keylist_result): Release it here 
+       (_gpgme_release_keylist_result): Release it here
        (keylist_status_handler): Handle truncated.
        (append_xml_keylistinfo): New.
        * gpgme.c (_gpgme_release_result): and use it here.
 
        * verify.c (_gpgme_verify_status_handler): Handle TRUST_* status
        lines so that a claim can be made without looking up the key.
-       (gpgme_get_sig_string_attr): New. 
+       (gpgme_get_sig_string_attr): New.
        (gpgme_get_sig_ulong_attr): New.
 
        * gpgme.h (GpgmeAttr): Added GPGME_ATTR_SIG_STATUS.
 
        * gpgme.h (GpgmeSigStat): Add _GOOD_EXP and _GOOD_EXPKEY.
        * verify.c (_gpgme_verify_status_handler, finish_sig): Handle
-       these new status codes.  Store the expiration time 
+       these new status codes.  Store the expiration time
 
 2002-04-27  Werner Koch  <wk@gnupg.org>
 
 
        * verify.c (_gpgme_verify_status_handler): Fix the last change.
 
+2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
+
+       * verify.c (_gpgme_verify_status_handler): Parse the args line to
+       see if the problem is due to a missing key, and report that back
+       to the user.
+
 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
 
        * engine.c (_gpgme_engine_op_encrypt_sign): New function.
        * rungpg.c (_gpgme_append_gpg_args_from_signers): New function.
        (_gpgme_gpg_op_sign): Use that new function.
        (_gpgme_gpg_op_encrypt_sign): New function.
-       * rungpg.h (_gpgme_gpg_op_encrypt_sign): New prototype. 
+       * rungpg.h (_gpgme_gpg_op_encrypt_sign): New prototype.
        * gpgme.h (gpgme_op_encrypt_sign_start): New prototype.
        (gpgme_op_encrypt_sign): Likewise.
        * Makefile.am (libgpgme_la_SOURCES): Add encrypt-sign.c.
        (_gpgme_encrypt_status_handler): ... this and make non-static.
        * encrypt.c (gpgme_op_encrypt_start): Use new status handler name.
        * sign.c (gpgme_op_sign_start): Likewise.
-       
-2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * verify.c (_gpgme_verify_status_handler): Parse the args line to
-       see if the problem is due to a missing key, and report that back
-       to the user.
 
 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
 
        * wait.c: Include `engine.h'.
        (run_idle): Call _gpgme_engine_housecleaning(), not
        _gpgme_gpg_housecleaning().
-       
+
 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
 
        * key.c (_gpgme_key_append_name): Append, not prepend, the uid.
        server process from wait queue.
        (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
        _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
-       
+
        * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
        (_gpgme_engine_set_status_handler): Likewise.
        (_gpgme_engine_op_verify): Likewise.
        * engine.c: Likewise.
        * engine-gpgsm.h: Likewise.
        * engine-gpgsm.c: Likewise.
-       
+
        * rungpg.c (_gpgme_gpg_get_version): New function.
        (_gpgme_gpg_check_version): Likewise.
        * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
 
        * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
        callers to use this function without a check for tmp_key.
-       
+
        * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
        emptying the queue.  Bug reported by Stéphane Corthésy.
 
        * keylist.c (keylist_colon_handler): Do a finish key if we receive
        an EOF here.  This is probably the reason for a lot of bugs
        related to keylisting.  It is so obvious.  Kudos to Enno Cramer
-       for pointing that out. 
+       for pointing that out.
 
 2001-08-28  Werner Koch  <wk@gnupg.org>
 
        * gpgme.c, gpgme.h (gpgme_get_op_info): New.
-       (_gpgme_set_op_info): New. 
+       (_gpgme_set_op_info): New.
        (_gpgme_release_result): Reset the op_info here.
        * sign.c (append_xml_siginfo): New.
        (sign_status_handler): Store the sig create information.
 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
 
        * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
-       line, because it gave an error if another operation had been made 
+       line, because it gave an error if another operation had been made
        before using the same context.
-       
-       * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
+
+       * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added
        one line to release the gpg object in the context (if any).
-       
+
 2001-04-26  Werner Koch  <wk@gnupg.org>
 
        * key.c, key.h (_gpgme_key_cache_init): New.
 
        * w32-io.c (_gpgme_io_select): Don't select on the writer if there
        are still bytes pending.  Timo found this not easy to track down
-       race condition. 
+       race condition.
 
 2001-04-02  Werner Koch  <wk@gnupg.org>
 
        * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
        * key.c (gpgme_key_get_ulong_attr): And return those attribs.
 
-       * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
+       * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on
        the mode set in the current context.  Suggested by Timo.
 
        * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
 
 2001-03-14  Werner Koch  <wk@gnupg.org>
 
-       * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
+       * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error.
        Thanks to Jan Oliver Wagner.
 
 2001-03-13  Werner Koch  <wk@gnupg.org>
        * context.h: Add invalid and revoke flags to user_id structure.
        * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
        (keylist_colon_handler): Adjust for that.
-       (set_userid_flags): New. 
+       (set_userid_flags): New.
        (set_mainkey_trust_info): Handle new key invalid flag
        (set_subkey_trust_info): Ditto.
        * gpgme.h: Add new attributes for key and user ID flags.
 
 2001-02-20  Werner Koch  <wk@gnupg.org>
 
-       * w32-io.c (destroy_reader,kill_reader): New. 
+       * w32-io.c (destroy_reader,kill_reader): New.
        (create_reader, reader): Add a new event to stop the thread.
        (_gpgme_io_close): Kill the reader thread.
 
-       * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
+       * posix-io.c (_gpgme_io_select): Handle frozen fds here.
        * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
 
        * wait.c: Reworked the whole thing.
        * posix-io.c (_gpgme_io_set_close_notify): New.
        (_gpgme_io_close): Do the notification.
 
-       * rungpg.c (close_notify_handler): New. 
+       * rungpg.c (close_notify_handler): New.
        (_gpgme_gpg_new): Register a callback for the fd.
        (_gpgme_gpg_set_colon_line_handler): Ditto.
        (build_argv): Ditto
 
        * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
 
-       * posix-io.c (_gpgme_io_read): Add some debug output. 
+       * posix-io.c (_gpgme_io_read): Add some debug output.
        (_gpgme_io_write): Ditto.
        (_gpgme_io_select): Increased the timeout.
 
 2001-02-12  Werner Koch  <wk@gnupg.org>
 
        Enhanced the signature verification, so that it can how handle
-       more than one signature and is able to return more information on 
+       more than one signature and is able to return more information on
        the signatures.
        * verify.c (gpgme_get_sig_key): New.
        (gpgme_get_sig_status): New.
 
-       * gpgme.h: Add stdio.h. 
+       * gpgme.h: Add stdio.h.
        (GpgmeSigStat): New status DIFF.
 
 2001-02-01  Werner Koch  <wk@gnupg.org>
 
        * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
        (propagate_term_results,clear_active_fds): Removed.
-       (count_active_fds): Renamed to .. 
-       (count_active_and_thawed_fds): .. this and count only thawed fds. 
+       (count_active_fds): Renamed to ..
+       (count_active_and_thawed_fds): .. this and count only thawed fds.
 
        * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
        status.eof ;-)
        test his fix :-)
 
        * w32-io.c: Does now use reader threads, so that we can use
-       WaitForMultipleObjects. 
+       WaitForMultipleObjects.
        * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
        Does currently only work for W32.
 
        * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
 
 
- Copyright 2001,2002,2003,2004,2005,2006,2007,2008,2009 g10 Code GmbH
+ Copyright 2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,
+          2011 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