Fix Windows port (spawn and assuan engine).
[gpgme.git] / src / ChangeLog
index 887fbc5a94f2e6e5dc1b8479aade1b6bd8d92e50..73a62fe36249915dcb0e25ababe8a00842412b70 100644 (file)
@@ -1,5 +1,372 @@
+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.