More include guards.
[gpgme.git] / src / ChangeLog
1 2010-11-03  Werner Koch  <wk@g10code.com>
2
3         * setenv.c: Include string.h due to our strerror replacement.
4
5         * w32-ce.h (access): New macro.
6         * w32-ce.c (_gpgme_wince_access): New.
7         (RegQueryValueExA): Change DATA to a void*.
8
9         Guard include of sys/stat.h and sys/types.h.
10
11 2010-11-02  Werner Koch  <wk@g10code.com>
12
13         * data-fd.c (read, write, lseek) [W32CE && ! __MINGW32CE__]: New.
14         Taken from Pedro Alves Public Domain code.
15
16         * w32-ce.h (SHGetSpecialFolderPath): Remove our defines and
17         prototypes.  We use the system provided prototypes now.
18         * w32-ce.c: Include shlobj.h
19         (_WIN32_IE): Define to 0x0400
20         (CreateFileA): New.
21         * w32-util.c: Explicitly include windows headers before util.h.
22         (_gpgme_w32ce_get_debug_envvar): Do not use wchar_t strings for
23         read_w32_registry_string.
24         (mkstemp): Use CreateFile instead of open.
25
26         * w32-io.c (handle_to_fd, fd_tohandle): Add.  We need them for W32.
27         * w32-util.c (_WIN32_IE): Define to 0x0400.
28
29         * util.h [W32]: Include windows.h.
30         * w32-sema.c: Do not include windows.h directly.
31         * ath.c (ssize_t, pid_t)[_MSC_VER]: Add new types.
32         * gpgme.c (gpgme_result_ref, gpgme_result_unref): Do not use a
33         void pointer in pointer arithmetic.
34         * w32-util.c: Include util.h prior to ath.h.  Don't include
35         windows.h directly.
36         (F_OK): Define if not defined.
37         * w32-ce.c: Include string.h.
38         (RegQueryValueExA): Use WINAPI modifier to match the declaration.
39         * vfs-create.c: Include string.h because under W32CE with MSC we
40         get a warning related to our strerror replacement.
41         * encrypt-sign.c: Include stdlib.h, string.h and errno.h.
42         * priv-io.h [W32CE]: Include w32-ce.h
43         * w32-ce.h: Include winsock2.h and ws2tcpip.h.
44         (_MSV_VER): Remove useless macro.
45         (pid_t): Add typedef.
46
47         Guard all includes of unistd.h and sys/time.h.
48
49 2010-10-28  Marcus Brinkmann  <marcus@g10code.com>
50
51         * opassuan.c (gpgme_op_assuan_transact_ext): Fix uninitialized
52         value use.  Reported by Marc Mutz.
53
54 2010-10-07  Werner Koch  <wk@g10code.com>
55
56         * gpgme-tool.c (ARGP_ERR_UNKNOWN): Use EDEADLK if available.
57
58         * w32-util.c (_gpgme_w32ce_get_debug_envvar) [W32CE]: New.
59         * debug.c (debug_init) [W32CE]: Use new function.
60
61 2010-09-16  Werner Koch  <wk@g10code.com>
62
63         * import.c: Include "util.h".
64         (parse_import): Return GPG_ERR_MISSING_ISSUER_CERT.
65
66         * util.h: Add fallback define for GPG_ERR_MISSING_ISSUER_CERT.
67         * op-support.c: Include "util.h".
68         (_gpgme_parse_inv_recp): Handle new code 12.
69
70 2010-09-02  Marcus Brinkmann  <marcus@g10code.de>
71
72         * error.c (gpgme_err_code_to_errno): Fix cut and paste bug (thanks
73         to Marc Mutz).
74
75 2010-09-01  Marcus Brinkmann  <marcus@g10code.de>
76
77         * w32-io.c: Revert change from 2009-06-18, as it created a race
78         condition.
79
80 2010-08-18  Marcus Brinkmann  <marcus@g10code.de>
81
82         * gpgme.def: Add gpgme_err_code_from_syserror and gpgme_err_set_errno.
83         * libgpgme.vers: Likewise.
84         * gpgme.h.in (gpgme_error_from_errno): Fix return type to
85         gpgme_error_t.
86         (gpgme_err_code_from_syserror, gpgme_err_set_errno): New prototype.
87         (gpgme_error_from_syserror): New inline function (why are
88         gpgme_err_make_from_errno and gpgme_error_from_errno not inline
89         functions?).
90         * error.c (gpgme_error_from_errno): Fix return type to gpgme_error_t.
91         (gpgme_err_set_errno, gpgme_err_code_from_syserror): New functions.
92
93 2010-08-03  Marcus Brinkmann  <marcus@g10code.de>
94
95         * gpgme-tool.c (result_encrypt_to_xml, result_sign_to_xml)
96         (result_verify_to_xml, result_import_to_xml)
97         (result_genkey_to_xml): Check vigorously for null pointers.
98
99         * w32-io.c (GPGCEDEV_IOCTL_ASSIGN_RVID): New macro.
100         (_gpgme_io_spawn): Use ASSIGN_RVID.
101
102 2010-06-11  Marcus Brinkmann  <marcus@g10code.de>
103
104         * w32-io.c (_gpgme_io_spawn): Remove debug printf.
105
106 2010-06-10  Marcus Brinkmann  <marcus@g10code.de>
107
108         * gpgme-tool.c (gpgme_server): Use special hack for Windows CE to
109         get at stdin and stdout.
110
111         * engine-gpgsm.c (gpgsm_new): Translate returned achild_fds back
112         to child_fds.
113
114         * debug.h (TRACE_SUC6): New macro.
115         * w32-io.c (MAX_SLAFD): New macro.
116         (fd_table): New static variable.
117         (new_fd, release_fd): New functions.
118         (fd_to_handle, handle_to_fd, handle_to_socket): Remove macros.
119         (MAX_READERS, MAX_WRITERS): Increase to 64.
120         (notify_table): Increase to MAX_SLAFD.
121         (struct reader_context_s, struct writer_context_s): Add member
122         file_sock.
123         (reader, writer): Use file_hd vs file_sock to decide if socket
124         operations to use.  Remove auto-detect mode.
125         (create_reader, create_writer): Set file_sock.  Unblock pending
126         thread only if this is a pipe fd.
127         (_gpgme_io_pipe): Allocate fds from table and return slot indices
128         instead of windows handles.  This allows to properly handle RVIDs.
129         (_gpgme_io_close): Handle dup'ed file descriptors.
130         (build_commandline) [HAVE_W32_SYSTEM]: Use RVID from fd table now.
131         (_gpgme_io_spawn): Use fd table now.
132         (_gpgme_io_fd2str): Use RVID from fd table now.
133         (_gpgme_io_dup): Implement using fd table.
134         (_gpgme_io_socket): Allocate fds from table.
135         (_gpgme_io_connect): Use fd from table.
136
137         * w32-glib-io.c (find_channel): Check that the slot is used.
138
139 2010-06-09  Marcus Brinkmann  <marcus@g10code.de>
140
141         * w32-io.c [HAVE_W32CE_SYSTEM]: Include assuan.h and winioctl.h.
142         (GPGCEDEV_IOCTL_UNBLOCK) [HAVE_W32CE_SYSTEM]: Define.
143         (set_synchronize) [HAVE_W32CE_SYSTEM]: Stub it out.
144         (is_socket): Allow to return -1 for auto-detect (old behaviour).
145         (is_socket) [HAVE_W32CE_SYSTEM]: Return -1.
146         (reader): Handle auto-detect case.  Handle ctx->stop_me before
147         checking for EOF.
148         (destroy_reader) [HAVE_W32CE_SYSTEM]: Unblock a pending reader.
149         (writer): Handle auto-detect case.  Handle ctx->stop_me with
150         ERROR_BUSY.
151         (destroy_writer) [HAVE_W32CE_SYSTEM]: Unblock a pending writer.
152         (_gpgme_io_pipe) [HAVE_W32CE_SYSTEM]: Implement in terms of a
153         half-pipe.
154         (build_commandline) [HAVE_W32CE_SYSTEM]: New function.
155         (_gpgme_io_spawn) [HAVE_W32CE_SYSTEM]: Implement it differently
156         for this platform.
157         (_gpgme_io_fd2str) [HAVE_W32CE_SYSTEM]: Implement it for RVIDs.
158         (_gpgme_io_dup) [HAVE_W32CE_SYSTEM]: Stub it out.
159
160         * gpgme-tool.c (result_add_timestamp): Add missing NULL argument.
161         (result_sign_to_xml): Protect against NULL fingerprint.
162         (struct server): New members input_fd, input_filename,
163         input_stream output_fd, output_filename, output_stream,
164         message_filename, message_stream.
165         (server_reset_fds): Deallocate those.
166         (server_parse_fd): New function.
167         (server_data_obj): Take optional filename argument and direction
168         argument.  Also take new argument to return a filestream that
169         needs to be closed after destroying the data object.
170         Change all callers, too.
171         (input_notify, output_notify): Removed.
172         (cmd_input, cmd_output): New functions.
173         (gpgme_server): Do not register input and output notifier.
174         (register_commands): Use cmd_input and cmd_output.
175         (cmd_message): Rewritten to use server_parse_fd.
176         (cmd_delete, cmd_keylist): Fix inverted option check.
177         (main) [HAVE_W32CE_SYSTEM]: Sleep a bit to work around bug in ssh.
178
179         * genkey.c (gpgme_op_genkey): Return err with TRACE_ERR.
180
181 2010-05-12  Marcus Brinkmann  <marcus@g10code.de>
182
183         * conversion.c (_gpgme_timegm) [HAVE_W32_SYSTEM]: New static
184         function.
185         (_gpgme_parse_timestamp) [HAVE_W32_SYSTEM]: Use it.
186
187         * gpgme-tool.c (main): Protect call to setlocale with
188         HAVE_SETLOCALE.
189
190         * Makefile.am (system_components): Remove custom cppflags from
191         RCCOMPILE (because gpg-error adds -idirafter that makes RC bail.
192         [HAVE_W32CE_SYSTEM]: Add w32-ce.h and w32-ce.c, clear
193         libexec_PROGRAMS.
194         * w32-ce.h, w32-ce.c: New files.
195
196         * priv-io.h: Include <sys/types.h>
197         * util.h: Likewise.
198
199 2010-05-11  Marcus Brinkmann  <marcus@g10code.de>
200
201         * w32-util.c: Include ath.h
202         (HAVE_ALLOW_SET_FOREGROUND_WINDOW) [!HAVE_W32CE_SYSTEM]: Define
203         it.
204         (RTLD_LAZY, dlopen, dlsym,
205         dlclose) [!HAVE_ALLOW_SET_FORGROUND_WINDOW]: Don't define anymore.
206         (_gpgme_allow_set_foreground_window) [!HAVE_ALLOW_SET_FOREGROUND_WINDOW]:
207         Make it a stub.
208         (read_w32_registry_string): Use FooA variants of Windows functions
209         instead of Foo (which dispatches depending on UNICODE).
210         [!HAVE_W32CE_SYSTEM]: Don't check environment.
211         (w32_shgetfolderpath): Remove.
212         (find_program_at_standard_place): Call
213         SHGetSpecialFolderPath (which is available on all Windows systems
214         and also Windows CE).
215         (mkstemp): Use ath_self instead of getpid.
216         (_gpgme_mkstemp): Use GetTempPathA instead of GetTempPath.
217
218         * gpgme.h.in: Use _WIN32 instead of _MSC_VER.  Include time.h for
219         time_t.
220
221 2010-05-07  Marcus Brinkmann  <marcus@g10code.de>
222
223         * engine-g13.c, gpgme.c, engine-gpgsm.c, engine-gpg.c,
224         op-support.c, engine-assuan.c, gpgme-tool.c: Include <locale.h>
225         only if available with HAVE_LOCALE_H and conditionalize use of
226         LC_CTYPE on its definition.
227         * engine-gpgconf.c: Do not include <locale.h>.
228
229         * engine-gpgsm.c (gpgsm_new, start): Cast between int and
230         assuan_fd_t.
231         * assuan-support.c (my_pipe, my_close, my_read, my_write): Likewise.
232         * gpgme-tool.c (server_data_obj, server_reset_fds, gpgme_server),
233         (my_recvmsg, my_sendmsg, my_spawn): Likewise.
234         * engine-assuan.c (start): Likewise.
235         * engine-g13.c (start): Likewise.
236
237 2010-05-06  Marcus Brinkmann  <marcus@g10code.de>
238
239         * w32-glib-io.c, w32-io.c, w32-qt-io.cpp, w32-sema.c, w32-util.c:
240         Do not include <signal.h>.
241
242         * sign.c, data-user.c, conversion.c, debug.c, verify.c, data.c,
243         decrypt.c, delete.c, assuan-support.c, import.c, engine-gpgsm.c,
244         data-mem.c, op-support.c, w32-io.c, w32-util.c, data-compat.c: Use
245         gpg_error_from_syserror instead gpg_error_from_errno, and use
246         gpg_err_set_errno to set error number.
247         * setenv.c: Include <gpg-error.h> and define __set_errno to use
248         gpg_err_set_errno.
249         * gpgme-tool.c (ARGP_ERR_UNKNOWN): Define to EDEADLOCK (which is
250         mapped in Windows CE) instead of E2BIG (which is not).
251         (gt_import_keys): Initialize err.
252
253 2010-04-19  Marcus Brinkmann  <marcus@g10code.de>
254
255         * assuan-support.c (my_spawn): Cast to avoid warning.
256         * engine-g13.c (g13_new): Make ARGV array of pointer to const
257         char.
258         (g13_assuan_simple_command) [!USE_DESCRIPTOR_FUNCTION]: Don't define.
259         * ops.h (_gpgme_key_append_name): Same in prototype.
260         * key.c (_gpgme_key_append_name): Make SRC argument pointer to
261         const char.
262         * posix-util.c (_gpgme_get_uiserver_socket_path): Make HOMEDIR
263         const.
264         * vfs-mount.c (gpgme_op_vfs_transact_start): Never define this
265         potentially useful but currently unused function.
266         * vfs-create.c (gpgme_op_vfs_transact_start): Likewise.
267
268 2010-04-16  Werner Koch  <wk@g10code.com>
269
270         * w32-io.c (is_socket): New.
271         (reader, writer): Use it to figure out the API to use.
272
273 2010-03-15  Werner Koch  <wk@g10code.com>
274
275         * gpgme.h.in: Add autoconf template to set generated file to
276         read-only in an emacs buffer.
277
278 2010-03-12  Werner Koch  <wk@g10code.com>
279
280         * gpgme.h.in (GPGME_STATUS_SUCCESS): Use the right file for the
281         change; see below.
282
283         * passwd.c (op_data_t): New.
284         (passwd_start): Setup OPD.
285         (passwd_status_handler): Return GPG_ERR_NOT_SUPPORTED if needed.
286         * context.h (OPDATA_PASSWD): New.
287         * gpgme.h (GPGME_STATUS_SUCCESS): New.
288
289 2010-03-09  Werner Koch  <wk@g10code.com>
290
291         * engine-gpgsm.c (gpgsm_keylist): Try to start the agent.
292
293 2010-02-17  Werner Koch  <wk@g10code.com>
294
295         * posix-io.c (notify_table): Change implementation.
296         (notify_table_item_t, notify_table_size, notify_table_lock): New.
297         (_gpgme_io_close, _gpgme_io_set_close_notify): Adjust for new
298         implementation.
299
300 2010-02-16  Werner Koch  <wk@g10code.com>
301
302         * gpgme-tool.c (spacep, has_option, skip_options): New.
303         (cmd_export): Implement option --minimal.
304
305         * gpgme.h.in (GPGME_EXPORT_MODE_MINIMAL): New.
306         * export.c (export_start, export_ext_start): Implement it.
307         * engine-gpg.c (export_common): Ditto.
308
309 2010-01-25  Werner Koch  <wk@g10code.com>
310
311         * w32-io.c (_gpgme_io_connect): Fix return code check to make it work.
312
313         * version.c (do_subsystem_inits): Remove superfluous second
314         WSAStartup.
315
316 2010-01-22  Werner Koch  <wk@g10code.com>
317
318         * w32-io.c (writer): Try to use send first.
319         (reader): Try to use recv first.
320
321 2010-01-08  Werner Koch  <wk@g10code.com>
322
323         * engine-gpg.c (gpg_passwd): New.
324         (_gpgme_engine_ops_gpg): Register.
325         * passwd.c (parse_error): New.
326         (passwd_status_handler): Use it.
327
328 2010-01-07  Marcus Brinkmann  <marcus@g10code.de>
329
330         * gpgme-tool.c (result_xml_write_cb_t, struct result_xml_state):
331         New types.
332         (MAX_TAGS): New macro.
333         (result_init, result_xml_indent, result_xml_tag_start)
334         (result_xml_tag_data, result_xml_tag_end, result_add_error)
335         (result_add_pubkey_algo, result_add_hash_algo, result_add_keyid)
336         (result_add_fpr, result_add_timestamp, result_add_sig_mode)
337         (result_add_value, result_add_string, result_encrypt_to_xml)
338         (result_decrypt_to_xml, result_sign_to_xml)
339         (result_verify_to_xml, result_import_to_xml)
340         (result_genkey_to_xml, result_keylist_to_xml)
341         (result_vfs_mount_to_xml): New functions.
342         (gt_result): Rewritten.
343
344 2010-01-05  Werner Koch  <wk@g10code.com>
345
346         * gpgme-tool.c (gt_passwd, cmd_passwd): New.
347         (register_commands): Register.
348
349         * gpgme.h.in (gpgme_op_passwd_start, gpgme_op_passwd): New.
350         * libgpgme.vers, gpgme.def: Add new functions.
351         * passwd.c: New.
352         * Makefile.am (main_sources): Add passwd.c
353         * engine.c, engine.h (_gpgme_engine_op_passwd): New.
354         * engine-backend.h (struct engine_ops): Add PASSWD.
355         * engine-gpgsm.c (gpgsm_passwd): New.
356         (_gpgme_engine_ops_gpgsm): Register.
357         (gpgsm_reset): Reset only if we have a conenction.
358
359         * gpgme.h.in (GPGME_PK_ECDSA, GPGME_PK_ECDH): New.
360         * gpgme.c (gpgme_pubkey_algo_name): Add them.
361
362 2009-12-22  Marcus Brinkmann  <marcus@g10code.de>
363
364         * debug.c: Test for TLS, not __GNUC__
365
366 2009-12-15  Marcus Brinkmann  <marcus@g10code.de>
367
368         * assuan-support.c (my_spawn): Calloc, not malloc, the fd_items.
369
370 2009-12-10  Werner Koch  <wk@g10code.com>
371
372         * debug.c (debug_init): Test on sgid process.
373
374 2009-12-08  Marcus Brinkmann  <marcus@g10code.de>
375
376         * Makefile.am (LTRCCOMPILE): Refactor with ...
377         (RCCOMPILE): ... this new macro.
378         (SUFFIXES): Add .lo.
379         (gpgme_res_ldflag): Removed.
380         (gpgme_res): Use libtool object file name here.
381         (libgpgme_la_LDFLAGS): Remove gpgme_res_ldflag usage.
382         (libgpgme_la_LIBADD): Add gpgme_res.
383
384         * ath.c (ath_self) [HAVE_W32_SYSTEM]: Fix typo.
385
386 2009-12-02  Werner Koch  <wk@g10code.com>
387
388         * gpgconf.c (gpgme_conf_arg_release): No return in a function
389         returning void.  Reported by Wyllys Ingersoll.
390
391 2009-12-01  Werner Koch  <wk@g10code.com>
392
393         * gpgme-tool.c (cmd_getauditlog): Add flag --html.
394         (hlp_getauditlog): New.
395
396         * gpgme-tool.c (GT_GCC_A_SENTINEL, GT_GCC_A_PRINTF): New.
397         (gt_write_status): Use sentinel.
398         (argp_error, log_error): Use printf attribute.
399         (argp_parse): Remove extra argument to argp_error.
400         (_gt_progress_cb, gt_get_engine_info, gt_get_keylist_mode)
401         (gt_result): Add NULL arg.
402
403 2009-11-26  Marcus Brinkmann  <marcus@g10code.de>
404
405         * opassuan.c (opassuan_start): Allocate result structure before
406         beginning operation.
407
408 2009-11-25  Marcus Brinkmann  <marcus@g10code.de>
409
410         * gpgme-tool.c (gpgme_server): Use assuan_fd_t and assuan_fdopen
411         on fds.
412
413 2009-11-13    <wk@g10code.com>
414
415         * sign.c (_gpgme_sign_status_handler): Handle SIG_CREATED_SEEN.
416         * engine-uiserver.c (uiserver_sign): Make sending SENDER optional.
417
418 2009-11-10  Marcus Brinkmann  <marcus@g10code.de>
419
420         * op-support.c (_gpgme_op_reset): Instead of last change, only set
421         sub protocol if it is not the default.
422
423 2009-11-10  Werner Koch  <wk@g10code.com>
424
425         * op-support.c (_gpgme_op_reset): Ignore GPG_ERR_NOT_IMPLEMENTED
426         while setting the sub protocol.
427
428         * engine-uiserver.c (uiserver_new): Pass fdpassing flag to
429         assuan_socket_connect.
430         (set_recipients): Replace fingerprint by user id.
431
432         * engine-gpgsm.c (set_recipients): Fix non-terminating loop in
433         case of a missing key.
434
435 2009-11-10  Marcus Brinkmann  <marcus@g10code.de>
436
437         * gpgme.c (gpgme_new): Set default sub protocol.
438         * gpgme-tool.c: Implement get sub protocol.
439
440         * gpgme.h.in (gpgme_get_sub_protocol): Add prototype.
441         * gpgme.def, libgpgme.vers: Add gpgme_get_sub_protocol.
442         * context.h (struct gpgme_context): New member sub_protocol.
443         * gpgme.c (gpgme_set_sub_protocol): Set CTX->sub_protocol.
444         (gpgme_get_sub_protocol): New function.
445         * op-support.c (_gpgme_op_reset): Set sub protocol.
446
447         * Makefile.am (uiserver_components): New variable.
448         (main_sources): Add it.
449         * ops.h, key.c (_gpgme_key_append_name): Take CONVERT argument,
450         implement it.  Adjust callers.
451         (gpgme_key_from_uid): New function.
452         * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_DEFAULT.
453         (gpgme_encrypt_flags_t): Add GPGME_ENCRYPT_PREPARE,
454         GPGME_ENCRYPT_EXPECT_SIGN.
455         (gpgme_set_sub_protocol, gpgme_key_from_uid): New functions.
456         * libgpgme.vers, gpgme.def: Add new functions.
457         * gpgme.c (gpgme_set_protocol): Add UIServer protocol.
458         (gpgme_set_sub_protocol): New function.
459         (gpgme_get_protocol_name): Add UIServer and default protocol.
460         * assuan-support.c: Return correct error values, implement
461         socketpair for POSIX.
462         * priv-io.h, posix-io.c, w32-io.c, w32-glib-io.c,
463         w32-qt-io.cpp (_gpgme_io_spawn): Add ATFORK and ATFORKVALUE
464         arguments.  Implement it for POSIX.  Adjust all callers.
465         * engine.h, engine-backend.h (_gpgme_engine_set_protocol)
466         (_gpgme_engine_op_decrypt_verify): New prototypes.  Adjust all
467         users.
468         * engine.c (engine_ops, gpgme_get_engine_info): Add UIServer
469         engine.
470         (_gpgme_engine_set_protocol, _gpgme_engine_op_decrypt_verify): New
471         function.
472         * decrypt-verify.c (decrypt_verify_start): Call
473         _gpgme_engine_op_decrypt_verify.
474         * util.h, posix-util.c,
475         w32-util.c (_gpgme_get_uiserver_socket_path): New function.
476         * engine-gpgsm.c (gpgsm_set_fd): Fix _gpgme_io_pipe invocation.
477         * gpgme-tool.c: Some support for UIServer protocol.
478         * engine-uiserver.c: New file.
479
480 2009-11-09  Marcus Brinkmann  <marcus@g10code.de>
481
482         * engine-gpgsm.c (gpgsm_new): Close server side FDs.
483
484 2009-11-06  Marcus Brinkmann  <marcus@g10code.de>
485
486         * gpgme-tool.c (struct gpgme_tool): New members write_data and
487         write_data_hook.
488         (gt_write_data): New function.
489         (gt_result): Output vfs_mount result.
490         (server_write_data): New function.
491         (gpgme_server): Initialize write_data members.
492
493 2009-11-05  Marcus Brinkmann  <marcus@g10code.de>
494
495         * engine-g13.c (struct engine_g13): Remove members RESULT_CB and
496         RESULT_CB_VALUE.
497         (g13_assuan_simple_command, status_handler): Don't use those anymore.
498         (g13_transact): Remove them from argument list, too.
499         * vfs-mount.c (_gpgme_vfs_mount_status_handler): New function.
500         (_gpgme_op_vfs_mount): Pass it to transact.
501
502         * engine-assuan.c (llass_new): Update use of assuan_socket_connect.
503         * engine-gpgsm.c (gpgsm_new): Update use of assuan_pipe_connect.
504         * engine-g13.c (g13_new): Likewise.
505
506         * priv-io.h (IOSPAWN_FLAG_NOCLOSE): New flag.
507         * w32-io.c (_gpgme_io_spawn): Implement this flag.
508         * posix-io.c (_gpgme_io_spawn): Likewise.
509         * w32-glib-io.c (_gpgme_io_spawn): Likewise.
510         * assuan-support.c (my_spawn): Set this flag.
511
512         * decrypt.c (gpgme_op_decrypt_start): Fix use of debug macro.
513         * decrypt-verify.c (gpgme_op_decrypt_verify_start): Likewise.
514         * delete.c (gpgme_op_delete_start): Likewise.
515         * edit.c (gpgme_op_edit_start, gpgme_op_card_edit_start):
516         Likewise.
517         * encrypt.c (gpgme_op_encrypt_start): Likewise.
518         * encrypt-sign.c (gpgme_op_encrypt_sign_start): Likewise.
519         * export.c (gpgme_op_export_start, gpgme_op_export_ext_start)
520         (gpgme_op_export_keys_start, gpgme_op_export_keys): Likewise.
521         * genkey.c (gpgme_op_genkey_start): Likewise.
522         * getauditlog.c (gpgme_op_getauditlog_start): Likewise.
523         * import.c (gpgme_op_import_start, gpgme_op_import_keys_start):
524         Likewise.
525         * opassuan.c (gpgme_op_assuan_transact_start): Likewise.
526         * sign.c (gpgme_op_sign_start): Likewise.
527         * verify.c (gpgme_op_verify_start): Likewise.
528         * vfs-create.c (gpgme_op_vfs_create): Likewise.
529         * vfs-mount.c (gpgme_op_vfs_mount): Likewise.
530
531 2009-11-04  Marcus Brinkmann  <marcus@g10code.de>
532
533         * ath.h (ath_self): New prototype.  Include <stdint.h>
534         * ath.c, ath-pth.c, ath-pthread.c (ath_self): New function.
535         * debug.h: Rewrite most macros to beautify debug output.
536         (_gpgme_debug_buffer): Remove tagname and tag argument.
537         (_gpgme_debug_frame_begin, _gpgme_debug_frame_end): New prototypes.
538         * debug.c: Include <time.h>.  Don't include assuan.h.
539         (frame_nr, FRAME_NR): New thread-specific variable and macro.
540         (debug_init): Do not initialize assuan.  Call _gpgme_debug after
541         initialization instead using printf directly.
542         (_gpgme_debug): Do not call debug_init (we now ensure proper
543         initialization by user).  Add timestamp and thread/process ID.
544         (_gpgme_debug_buffer): Do not take tagname and tag argument.
545         (_gpgme_debug_frame_begin, _gpgme_debug_frame_end): New functions.
546         * version.c (gpgme_check_version_internal, gpgme_check_version):
547         Fix debug string.  Do not initialize assuan.
548         * posix-io.c (get_max_fds): Use 0 not NULL (nicer debug output).
549
550 2009-11-04  Werner Koch  <wk@g10code.com>
551
552         * gpgme-tool.c (register_commands): Add HELP feature.
553
554 2009-11-03  Werner Koch  <wk@g10code.com>
555
556         * gpgme.h.in (GPGME_PROTOCOL_UISERVER): New.
557
558 2009-11-03  Marcus Brinkmann  <marcus@g10code.de>
559
560         * Makefile.am (main_sources): Change g13.c to vfs-mount.c.  Add
561         vfs-create.c
562         * vfs-create.c: New file.
563         * g13.c: Renamed to ...
564         * vfs-mount.c: ... this new file.
565         * gpgme.h.in (gpgme_op_vfs_create): New prototype.
566         * gpgme.def, libgpgme.vers: Add gpgme_op_vfs_create.
567         * gpgme-tool.c (gt_vfs_create, cmd_vfs_create): New functions.
568         (register_commands): Add VFS_CREATE and CREAET.
569
570 2009-11-02  Marcus Brinkmann  <marcus@g10code.de>
571
572         * debug.h (_gpgme_debug_buffer): Make TAG argument const const.
573         * debug.c (_gpgme_debug_buffer): Likewise.
574         * gpgme-tool.c (input_notify, output_notify): Adjust type to new
575         assuan interface.
576         * decrypt.c (gpgme_op_decrypt_result): Remove unused variable.
577         * opassuan.c (gpgme_op_assuan_transact): Fix return value.
578
579 2009-10-30  Marcus Brinkmann  <marcus@g10code.de>
580
581         * Makefile.am (noinst_PROGRAMS): New target gpgme-tool.
582         (gpgme_tool_LDADD): New variable.
583         * gpgme-tool.c: New file.
584         * ops.h (_gpgme_sig_notation_clearm _gpgme_signers_clear): New
585         prototypes.
586         * gpgme.c (gpgme_set_protocol): Allow GPGME_PROTOCOL_GPGCONF (when
587         had that gone missing?).
588         (_gpgme_sig_notation_clear): New function without debug output.
589         (gpgme_release): Call it and _gpgme_signers_clear.
590         * signers.c (_gpgme_signers_clear): New function without debug output.
591         * g13.c (gpgme_op_vfs_mount): Add debug output.
592         * assuan-support.c (my_spawn): Allow fd_child_list to be NULL.
593         * conversion.c (_gpgme_encode_percent_string): Fix infinite loop.
594         * debug.h: Put tag in front of debug lines, should make for nicer
595         output.
596         * engine-assuan.c (llass_new): Use our new system hooks for libassuan.
597         * engine-g13.c (g13_new): Remove redundant assuan context allocation.
598         * version.c (gpgme_check_version_internal): Delay debug output
599         until after gpgme_check_version was called.
600
601 2009-10-28  Marcus Brinkmann  <marcus@g10code.de>
602
603         * signers.c, encrypt-sign.c, encrypt.c, delete.c, keylist.c,
604         edit.c, import.c, export.c: Fix last change in debug output.
605
606 2009-10-27  Marcus Brinkmann  <marcus@g10code.de>
607
608         * edit.c (gpgme_op_edit_start, gpgme_op_edit)
609         (gpgme_op_card_edit_start, gpgme_op_card_edit): Add debug output.
610         * encrypt-sign.c (gpgme_op_encrypt_sign_start)
611         (gpgme_op_encrypt_sign): Likewise.
612         * encrypt.c (gpgme_op_encrypt_start, gpgme_op_encrypt)
613         (gpgme_op_encrypt_result): Likewise.
614         * export.c (gpgme_op_export_start, gpgme_op_export)
615         (gpgme_op_export_ext_start, gpgme_op_export_ext)
616         (gpgme_op_export_keys_start, gpgme_op_export_keys): Likewise.
617         * genkey.c (gpgme_op_genkey_start, gpgme_op_genkey)
618         (gpgme_op_genkey_result): Likewise.
619         * getauditlog.c (gpgme_op_getauditlog_start)
620         (gpgme_op_getauditlog): Likewise.
621         * import.c (gpgme_op_import_result, gpgme_op_import_start)
622         (gpgme_op_import): Likewise.
623         * keylist.c (gpgme_op_keylist_result, keylist_colon_handler)
624         (gpgme_op_keylist_start, gpgme_op_keylist_ext_start)
625         (gpgme_op_keylist_next, gpgme_op_keylist_end, gpgme_get_key): Likewise.
626         * opassuan.c (gpgme_op_assuan_transact_start)
627         (gpgme_op_assuan_transact_ext, gpgme_op_assuan_result)
628         (gpgme_op_assuan_transact): Likewise.
629         * signers.c (gpgme_signers_add, gpgme_signers_clear): Likewise.
630         * trustlist.c (gpgme_op_trustlist_start)
631         (gpgme_op_trustlist_next, gpgme_op_trustlist_end): Likewise.
632         * verify.c (gpgme_op_verify_start, gpgme_op_verify)
633         (gpgme_op_verify_result): Likewise.
634
635 2009-10-26  Marcus Brinkmann  <marcus@g10code.de>
636
637         * gpgme.h.in (struct gpgme_io_event_done_data)
638         (gpgme_io_event_done_data_t): New types.
639         (struct _gpgme_op_assuan_result): Deprecate the err member.
640         (gpgme_op_assuan_result): Deprecate (for now).
641         (gpgme_op_assuan_transact_ext): New prototype.
642         (gpgme_op_assuan_transact): Deprecate.
643         (struct _gpgme_op_g13_result): Replace with ...
644         (struct _gpgme_op_vfs_mount_result): ... this.
645         (gpgme_op_g13_mount): Replace with ...
646         (gpgme_op_vfs_mount): ... this.
647         * gpgme.def (gpgme_op_assuan_transact_ext, gpgme_wait_ext)
648         (gpgme_op_vfs_mount_result, gpgme_op_vfs_mount): New.
649         (gpgme_op_g13_mount): Remove.
650         * libgpgme.vers: Likewise.
651         * engine-backend.h (struct engine_ops): Remove RESULT_CB and
652         RESULT_CB_VALUE args in opassuan_transact member.  Add CANCEL_OP
653         member.
654         * ops.h (_gpgme_cancel_with_err, _gpgme_wait_on_condition): Add
655         OP_ERR argument.
656         (_gpgme_wait_one_ext): New prototype.
657         * context.h (ctx_op_data_id_t): Add OPDATA_VFS_MOUNT.
658         * engine-g13.c (g13_cancel_op): New function.
659         (parse_status): Remove declaration.
660         (g13_assuan_simple_command): Do nothing with status lines for now.
661         (status_handler): Update opaque value access.
662         (_gpgme_engine_ops_g13): Add new cancel_op member.
663         * gpgme.c (_gpgme_cancel_with_err): Add new parameter OP_ERR.
664         Handle operational errors.
665         (gpgme_cancel, gpgme_io_read, gpgme_io_write): Add debug output.
666         * data.c (_gpgme_data_inbound_handler)
667         (_gpgme_data_outbound_handler): Adjust opaque value access.
668         * engine-gpg.c (command_handler, status_handler)
669         (colon_line_handler): Likewise.
670         * engine-gpgsm.c (status_handler): Likewise.
671         * engine-gpg.c (_gpgme_engine_ops_gpg): Add cancel_op member.
672         * engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Likewise.
673         * g13.c: Rewritten (and will be rewritten again).
674         * engine.h (_gpgme_engine_op_assuan_transact): Remove result_cb
675         and result_cb_value parameters from prototype.
676         (_gpgme_engine_cancel_op): New prototype.
677         * engine.c (engine_ops) [! ENABLE_ASSUAN]: Add missing comma.
678         (_gpgme_engine_op_assuan_transact): Remove result_cb and
679         result_cb_value parameter.
680         (_gpgme_engine_cancel_op): New function.
681         * wait.h (_gpgme_run_io_cb): Add new argument OP_ERR.
682         (struct io_cb_data): New struct to pass opaque data and get a
683         op_err return value.  Needed because we can't modify I/O callback
684         handler signature because it is exposed to the user.
685         * wait.c (_gpgme_run_io_cb): Add OP_ERR parameter.  Handle
686         operational errors.
687         * wait-user.c (_gpgme_user_io_cb_handler): Handle operational
688         errors.
689         * wait-private.c (_gpgme_wait_on_condition): New argument to
690         retrieve the operational result.  Handle operational errors in
691         session based protocols.
692         (_gpgme_wait_one_ext): New function.
693         (_gpgme_wait_one): Pass argument in invocation of
694         _gpgme_wait_on_condition.
695         * wait-global.c (struct ctx_list_item): Add member OP_ERR.
696         (ctx_done): New argument OP_ERR.
697         (ctx_wait): New argument OP_ERR.
698         (gpgme_wait_ext): New function based on gpgme_wait but handling
699         operational errors.
700         (gpgme_wait): Implement in term of gpgme_wait_ext.
701         * keylist.c (gpgme_op_keylist_next): Pass argument in invocation
702         of _gpgme_wait_on_condition.
703         * trustlist.c (gpgme_op_trustlist_next): Pass argument in
704         invocation of _gpgme_wait_on_condition.
705         * engine-assuan.c (struct engine_llass): Replace members RESULT_CB
706         and RESULT_CB_VALUE by LAST_OP_ERR.
707         (_gpgme_engine_assuan_last_op_err): Add this hack function.
708         (llass_cancel_op): New function.
709         (_gpgme_engine_llass_ops): Add cancel_op member.
710         (llass_status_handler): Update opaque value access.
711         (llass_transact): Remove RESULT_CB and RESULT_CB_VALUE arguments.
712         * opassuan.c: Move compat hacks to the end of file.
713         (opassuan_start): Do not set OPD->result.err.
714         Do not pass RESULT_Cb and CTX to _gpgme_engine_op_assuan_transact.
715         (gpgme_op_assuan_transact_ext): New function.
716
717         * debug.h (DEBUG_GLOBAL): New debug level.
718         * conversion.c (gnupg_errors, _gpgme_map_gnupg_error): Removed.
719         * data-user.c (gpgme_data_new_from_cbs): Add debug output.
720         * data-fd.c (gpgme_data_new_from_fd): Likewise.
721         * data-stream.c (gpgme_data_new_from_stream): Likewise.
722         * decrypt.c (gpgme_op_decrypt_result, gpgme_op_decrypt_start)
723         (gpgme_op_decrypt): Likewise.
724         * delete.c (gpgme_op_delete_start, gpgme_op_delete): Likewise.
725         * decrypt-verify.c (gpgme_op_decrypt_verify_start)
726         (gpgme_op_decrypt_verify): Likewise.
727         * sign.c (gpgme_op_sign_result): Fix debug message.
728         * data-mem.c (gpgme_data_new): Improve debug output.
729         * verify.c (parse_trust): Use atoi instead of
730         _gpgme_map_gnupg_error.
731         * decrypt.c (_gpgme_decrypt_status_handler): Likewise.
732
733 2009-10-22  Marcus Brinkmann  <marcus@g10code.de>
734
735         * Makefile.am: Remove @NETLIBS@ from LIBADDs.
736         (g13_components): New variable.
737         (main_sources): Add $(g13_components).
738         * g13.c, engine-g13.c: New files.
739         * engine.c (engine_ops): Check for assuan for assuan engine, add
740         g13 engine.
741         * util.h (_gpgme_get_g13_path, _gpgme_encode_percent_string): New
742         prototypes.
743         * conversion.c (_gpgme_encode_percent_string): New function.
744         * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_G13.
745         (struct _gpgme_op_g13_result, gpgme_g13_result_t): New types.
746         (gpgme_op_g13_mount): New function.
747         * gpgme.def, libgpgme.vers: Add gpgme_op_g13_mount.
748         * gpgme.c (gpgme_set_protocol): Allow GPGME_PROTOCOL_G13.
749         (gpgme_get_protocol_name): Add GPGME_PROTOCOL_G13.
750         * posix-util.c (_gpgme_get_g13_path): New function.
751         * w32-util.c (_gpgme_get_g13_path): New function.
752         * engine-backend.h (_gpgme_engine_ops_g13): New declaration.
753
754 2009-10-20  Marcus Brinkmann  <marcus@g10code.de>
755
756         * gpgme-config.in (netlibs): Remove.
757         (assuan_cflags, assuan_libs): Add.
758
759         * Makefile.am (assuan_cppflags, assuan_libobjs): Removed.
760         (gpgsm_components): Move engine-assuan.c to ...
761         (assuan_components): ... this new variable.
762         (main_sources): Add this new variable.
763         (AM_CPPFLAGS): Remove $(assuan_cppflags).
764         (AM_CFLAGS): Add @LIBASSUAN_CFLAGS@.
765         (libgpgme_la_DEPENDENCIES, libgpgme_pth_la_DEPENDENCIES)
766         (libgpgme_glib_la_DEPENDENCIES, libgpgme_qt_la_DEPENDENCIES)
767         (libgpgme_pthread_la_DEPENDENCIES): Remove $(assuan_libobjs).
768         (libgpgme_la_LIBADD, libgpgme_pth_la_LIBADD)
769         (libgpgme_glib_la_LIBADD, libgpgme_qt_la_LIBADD))
770         (libgpgme_pthread_la_LIBADD): Replace $(assuan_libobjs) by
771         @LIBASSUAN_LIBS@.
772         * priv-io.h [!HAVE_W32_SYSTEM]: Declare _gpgme_io_recvmsg,
773         _gpgme_io_sendmsg, _gpgme_io_waitpid.
774         * engine-backend.h: Define with [ENABLE_ASSUAN] instead
775         of [ENABLE_GPGSM].
776         * posix-io.c (_gpgme_io_waitpid): Make non-static.
777         * util.h (ENABLE_ASSUAN): Declar _gpgme_assuan_system_hooks,
778         _gpgme_assuan_malloc_hooks, _gpgme_assuan_log_cb.
779         * engine-gpgsm.c: Don't map assuan error codes.  Use
780         assuan_release instead of assuan_disconnect.
781         (map_assuan_error): Remove function.
782         (gpgsm_new): Use new assuan context interface.
783         * engine-assuan.c: Use assuan_release instead of
784         assuan_disconnect.
785         (llass_new): Use new assuan context interface.
786
787 2009-10-07    <wk@g10code.com>
788
789         * priv-io.h [W32]: Include windows.h instead of sys/socket.h.
790
791 2009-08-06  Werner Koch  <wk@g10code.com>
792
793         * op-support.c (_gpgme_parse_inv_recp): Allow for no fingerprint.
794
795         * engine-gpgsm.c (gpgsm_sign): Hook up the status func for the
796         SIGNER command.
797         * gpgme.h.in (GPGME_STATUS_INV_SGNR, GPGME_STATUS_NO_SGNR): New.
798         * sign.c (op_data_t): Add fields IGNORE_INV_RECP and INV_SGNR_SEEN.
799         (_gpgme_op_sign_init_result): Factor code out to ...
800         (sign_init_result): .. new.  Init new fields.
801         (sign_start): Use sign_init_result.
802         (_gpgme_sign_status_handler): Take care of the new INV_SGNR.
803         Return an error if no signature has been created.
804
805 2009-07-07  Werner Koch  <wk@g10code.com>
806
807         * engine-gpgsm.c (struct engine_gpgsm): Add fields
808         input_helper_data and input_helper_memory.
809         (close_notify_handler): Release these new fields.
810         (gpgsm_import): Implement the keyarray feature.
811
812         * engine-gpg.c (gpg_import): Actually return GPG_ERR_INV_VALUE.
813
814         * engine-gpgsm.c (gpgsm_import): Return an error for unknown data
815         encodings.
816
817 2009-06-22  Marcus Brinkmann  <marcus@g10code.de>
818
819         * debug.h: Everywhere, use %p instead of 0x%x to print pointer.
820         [HAVE_STDINT_H]: Include <stdint.h>.
821         (_TRACE, TRACE, TRACE0, TRACE1, TRACE2, TRACE3, TRACE6): Cast tag
822         to (uintptr_t) before casting it to (void*) to silence GCC
823         warning.
824
825         * gpgme.h.in (_GPGME_DEPRECATED_OUTSIDE_GPGME): New macro.
826         * sign.c (_GPGME_IN_GPGME): Define it.
827         * keylist.c (_GPGME_IN_GPGME): Define it.
828
829         * debug.c (_gpgme_debug_begin, _gpgme_debug_add): Handle error in
830         vasprintf and asprintf.
831
832         * priv-io.h: Include <sys/socket.h>.  Declare _gpgme_io_connect.
833
834 2009-06-18  Marcus Brinkmann  <marcus@g10code.de>
835
836         * gpgme.h.in (GPGME_CONF_PATHNAME): Revert last change, it's
837         back! (GPA still uses it...).
838
839         * gpgme.def: Fix stupid typo.
840         * w32-io.c (_gpgme_io_pipe): Add missing declaration.
841
842         * gpgme.h.in (GPGME_CONF_PATHNAME): Remove obsolete macro.
843
844         * w32-io.c (_gpgme_io_pipe): Allocate reader/writer thread right
845         away.
846         (_gpgme_io_read, _gpgme_io_write, _gpgme_io_select)
847         (_gpgme_io_dup): Never allocate threads here.
848         (find_writer, find_reader): Check return value of thread creation
849         function.
850
851         * context.h (CTX_OP_DATA_MAGIC): New macro.
852         (struct ctx_op_data): New member MAGIC.
853         * op-support.c (_gpgme_op_data_lookup): Initialize magic.
854         * gpgme.c (gpgme_result_unref, gpgme_result_ref): Check magic.
855
856 2009-06-16  Marcus Brinkmann  <marcus@g10code.de>
857
858         * gpgme.c (gpgme_result_unref): Hot fix to release a lock.
859
860         * gpgme.c (result_ref_lock): New global variable.
861         (gpgme_result_ref, gpgme_result_unref): use it.
862
863 2009-06-16  Werner Koch  <wk@g10code.com>
864
865         * version.c: Include stdlib.h. 
866
867         * gpgme.h.in (gpgme_data_encoding_t): Add GPGME_DATA_ENCODING_URL,
868         GPGME_DATA_ENCODING_URLESC, GPGME_DATA_ENCODING_URL0.
869         * data.c (gpgme_data_set_encoding): Adjust for new values.
870         * engine-gpg.c (string_from_data): New.
871         (gpg_import): Implement --fetch-key feature.
872
873         * gpgme.h.in (gpgme_op_export_keys_start, gpgme_op_export_keys): New.
874         * gpgme.def, libgpgme.vers: Add them.
875         * export.c (gpgme_op_export_keys_start, gpgme_op_export_keys): New.
876         (export_keys_start): New.
877
878         * gpgme.h.in (gpgme_export_mode_t, GPGME_EXPORT_MODE_EXTERN): New.
879         (gpgme_op_export_start, gpgme_op_export, gpgme_op_export_ext_start)
880         (gpgme_op_export_ext): Change arg RESERVED to MODE of new
881         compatible type.
882         * export.c (gpgme_export_ext_start, gpgme_op_export)
883         (gpgme_op_export_ext_start, gpgme_op_export_ext): Ditto.
884         (export_start): Ditto.
885         * engine.c (_gpgme_engine_op_export): Ditto.
886         * engine-backend.h (struct engine_ops): Ditto.
887         * engine-gpgsm.c (gpgsm_export, gpgsm_export_ext): Ditto.
888         * engine-gpg.c (gpg_export, gpg_export_ext): Ditto.  Implement
889         mode EXTERN.
890         (gpg_export, gpg_export_ext): Factor common code out to ..
891         (export_common): .. this.
892
893         * gpgme.h.in (gpgme_op_import_keys_start, gpgme_op_import_keys): New.
894         * gpgme.def, libgpgme.vers: Add them.
895         * import.c (gpgme_op_import_keys_start, gpgme_op_import_keys): New.
896         (_gpgme_op_import_keys_start): New.
897         * engine.c (_gpgme_engine_op_import): Add arg KEYARRAY.
898         * engine-backend.h (struct engine_ops): Ditto.
899         * engine-gpgsm.c (gpgsm_import): Ditto.  Not functional.
900         * engine-gpg.c (gpg_import): Ditto.  Implement it.
901
902 2009-06-15  Marcus Brinkmann  <marcus@g10code.de>
903
904         * gpgme.h.in (gpgme_result_ref, gpgme_result_unref): Add
905         prototypes.
906         * gpgme.def, libgpgme.vers (gpgme_result_ref, gpgme_result_unref):
907         Add these.
908         * context.h (struct ctx_op_data): Add member "references".
909         * gpgme.c (gpgme_result_ref, gpgme_result_unref): New functions.
910         (_gpgme_release_result): Use gpgme_result_unref.
911         * op-support.c (_gpgme_op_data_lookup): Initialize references.
912
913 2009-06-12  Werner Koch  <wk@g10code.com>
914
915         * gpgme-w32spawn.c (translate_get_from_file): Parse optional spawn
916         flags.  Add new arg R_FLAGS.  Fix segv on file w/o LF.
917         (translate_handles): Add new arg R_FLAGS.  Avoid possible segv.
918         (main): Pass flags for my_spawn.
919         (my_spawn): Add arg FLAGS and implement AllowSetForegroundWindow.
920
921         * priv-io.h (IOSPAWN_FLAG_ALLOW_SET_FG): New.
922         * w32-io.c (_gpgme_io_spawn): Add arg FLAGS and implement it.
923         * w32-glib-io.c (_gpgme_io_spawn): Ditto.
924         * w32-qt-io.cpp (_gpgme_io_spawn): Ditto.
925         * posix-io.c (_gpgme_io_spawn): Add dummy arg FLAGS.
926         * engine-gpg.c (start): Call spawn with new flag.
927
928         * w32-util.c (_gpgme_allow_set_foregound_window): Rename to
929         _gpgme_allow_set_foreground_window.  Change all callers.
930         * posix-util.c (_gpgme_allow_set_foreground_window): Ditto.
931
932 2009-06-10  Werner Koch  <wk@g10code.com>
933
934         * w32-util.c (_gpgme_allow_set_foregound_window): Add trace support.
935
936 2009-06-09  Werner Koch  <wk@g10code.com>
937
938         * engine-gpg.c (gpg_io_event): Test for cmd.fd.
939
940         * version.c (gpgme_check_version_internal): Make result const.
941
942         * gpgme.c: Include priv-io.h.
943         (gpgme_io_read, gpgme_io_write): New.
944         * libgpgme.vers (GPGME_1.1): Add them. 
945         * gpgme.def: Ditto.
946
947         * Makefile.am (main_sources): Remove gpgme.h.
948         (include_HEADERS): Rename to nodist_include_HEADERS so that a
949         VPATH build won't use the distributed one.
950
951         * util.h (GPG_ERR_NOT_OPERATIONAL): Define.
952
953 2009-05-28  Marcus Brinkmann  <marcus@g10code.de>
954
955         * gpgme.h.in (gpgme_check_version_internal): New prototype.
956         (gpgme_check_version): New macro, overriding function of the same
957         name.
958         * libgpgme.vers, gpgme.def: Add gpgme_check_version_internal.o
959         * context.h (_gpgme_selftest): New variable declaration.
960         * version.c: Include "context.h".
961         (gpgme_check_version): Set _gpgme_selftest on success.
962         (gpgme_check_version_internal): New function.
963         * gpgme.c (_gpgme_selftest): Define it.
964         (gpgme_new): Check the selftest result.
965
966 2009-05-18  Marcus Brinkmann  <marcus@g10code.de>
967
968         * gpgme.h.in (gpgme_encrypt_flags_t): Add
969         GPGME_ENCRYPT_NO_ENCRYPT_TO.
970         * engine-gpg.c (gpg_encrypt): Pass --no-encrypt-to to gpg if
971         GPGME_ENCRYPT_NO_ENCRYPT_TO flag is set.
972
973 2009-05-14  Werner Koch  <wk@g10code.com>
974
975         * gpgme.h.in (gpgme_status_code_t): Explicitly initialize for
976         better maintainability and to help debugging.
977
978 2009-05-05  Marcus Brinkmann  <marcus@g10code.de>
979
980         * gpgme.h.in: Add compile time check for _FILE_OFFSET_BITS.
981
982 2009-04-15  Marcus Brinkmann  <marcus@g10code.de>
983
984         * posix-io.c (_gpgme_io_socket, _gpgme_io_connect): New functions.
985         * w32-io.c (_gpgme_io_connect): Fix stupid error.
986
987 2009-04-08  Marcus Brinkmann  <marcus@g10code.de>
988
989         * w32-glib-io.c (giochannel_table): New members used, fd, socket.
990         (find_channel): Drop CREATE argument.
991         (new_dummy_channel_from_fd, new_channel_from_fd)
992         (new_channel_from_socket): New functions.
993         (_gpgm_io_fd2str): Implement for sockets.
994         (_gpgme_io_write, _gpgme_io_read): Translate EAGAIN errors
995         correctly.
996         (_gpgme_io_pipe): Fix for new channel bookkeeping.
997         (_gpgme_io_close, _gpgme_io_dup): Likewise.
998         (wsa2errno, _gpgme_io_socket, _gpgme_io_connect): New.
999         * w32-io.c (MAX_READERS, MAX_WRITERS): Bump up to 40.
1000         (wsa2errno, _gpgme_io_socket, _gpgme_io_connect): New.
1001         * w32-qt-io.cpp (_gpgme_io_socket, _gpgme_io_connect): New stubs.
1002         * version.c [HAVE_W32_SYSTEM]: Include "windows.h.
1003         (do_subsystem_inits) [HAVE_W32_SYSTEM]: Call WSAStartup.
1004         * engine-assuan.c (llass_status_handler): Ignore EAGAIN errors.
1005
1006 2009-03-18  Werner Koch  <wk@g10code.com>
1007
1008         * gpgme.h.in (GPGME_KEYLIST_MODE_EPHEMERAL): New.
1009         * engine-gpgsm.c (gpgsm_keylist): Send new option.
1010
1011 2009-03-13  Werner Koch  <wk@g10code.com>
1012
1013         * gpgme-config.in: Make sure locale is set to C.
1014
1015 2009-02-24  Werner Koch  <wk@g10code.com>
1016
1017         * gpgme.h.in (struct _gpgme_op_assuan_result): New.
1018         (gpgme_assuan_result_t): New.
1019         (gpgme_op_assuan_result): Change return type.
1020         (struct _gpgme_assuan_sendfnc_ctx)
1021         (gpgme_assuan_sendfnc_ctx_t, gpgme_assuan_sendfnc_t):Remove.
1022         (gpgme_assuan_inquire_cb_t): Changed.
1023         * opassuan.c (op_data_t): Make use of a result structure.
1024         (gpgme_op_assuan_result): Change return type.
1025         (opassuan_start): Use result structure.
1026         (result_cb): Ditto.
1027         * engine-assuan.c (struct _gpgme_assuan_sendfnc_ctx): Remove.
1028         (inquire_cb_sendfnc): Remove.
1029         (inquire_cb): Change for new callback scheme.  Not yet finished.
1030         (llass_status_handler): Allow sending a CANCEL from the inquire CB.
1031
1032 2009-02-04  Werner Koch  <wk@g10code.com>
1033
1034         * w32-glib-io.c (_gpgme_io_spawn): Make ARGV argument const to
1035         match prototype.
1036         * w32-qt-io.cpp (_gpgme_io_spawn): Ditto.
1037
1038 2009-02-03  Werner Koch  <wk@g10code.com>
1039
1040         * gpgme.h.in (struct _gpgme_subkey): Add fields IS_CARDKEY and
1041         CARD_NUMBER..
1042         * key.c (gpgme_key_unref): Release field CARD_NUMBER.
1043         * keylist.c (keylist_colon_handler): Factor common code out to ...
1044         (parse_sec_field15): New.  Set card number.
1045
1046 2009-01-26  Werner Koch  <wk@g10code.com>
1047
1048         * opassuan.c, dirinfo.c, engine-assuan.c: New.
1049         * Makefile.am:  Add them.
1050         * engine-backend.h: Add _gpgme_engine_ops_assuan.
1051         (struct engine_ops): Add field OPASSUAN_TRANSACT.  Update all
1052         engine intializers.
1053         * Makefile.am (gpgsm_components): Add engine-assuan.c.
1054         * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_ASSUAN.
1055         (gpgme_assuan_data_cb_t, gpgme_assuan_sendfnc_ctx_t)
1056         (gpgme_assuan_inquire_cb_t, gpgme_assuan_status_cb_t): New.
1057         (gpgme_op_assuan_transact_start, gpgme_op_assuan_transact): New.
1058         * gpgme.c (gpgme_get_protocol_name): Ditto.
1059         (gpgme_set_protocol): Support it.
1060         * engine.c (gpgme_get_engine_info): Ditto.
1061         (engine_ops): Register it.
1062         (_gpgme_engine_op_assuan_transact): New.
1063         * libgpgme.vers (gpgme_op_assuan_transact_start)
1064         (gpgme_op_assuan_transact): New.
1065         * gpgme.def (gpgme_op_assuan_transact_start)
1066         (gpgme_op_assuan_transact): New.
1067         * engine-backend.h (struct engine_ops): Add GET_HOME_DIR and
1068         initialize to NULL for all engines.
1069         * engine.c (engine_get_home_dir): New.
1070         (gpgme_get_engine_info): Use it.
1071         (_gpgme_set_engine_info): Use it.
1072         * engine.h (engine_assuan_result_cb_t): New.
1073         * context.h (ctx_op_data_id_t): Add OPDATA_ASSUAN.
1074
1075         * util.h (GPG_ERR_UNFINISHED): Define if not yet defined.
1076
1077         * version.c (gpgme_check_version): Protect trace arg against NULL.
1078
1079 2009-01-19  Werner Koch  <wk@g10code.com>
1080
1081         * rungpg.c: Rename to engine-gpg.c
1082         * Makefile.am (main_sources): Ditto.
1083
1084 2008-12-03  Marcus Brinkmann  <marcus@g10code.de>
1085
1086         * Makefile.am (status-table.h): Use $(builddir) to find gpgme.h.
1087
1088 2008-11-18  Werner Koch  <wk@g10code.com>
1089
1090         * version.c (do_subsystem_inits): Always initialize I/O
1091         subsystem.  Fixes regression from 2007-08-02.
1092
1093         * decrypt.c (_gpgme_decrypt_status_handler): Use
1094         _gpgme_map_gnupg_error to parse the error code for decrypt.algorithm.
1095
1096 2008-10-30  Marcus Brinkmann  <marcus@g10code.de>
1097
1098         * wait-private.c (_gpgme_wait_on_condition): Remove unused
1099         variable IDX.
1100         * wait-global.c: Include ops.h to silence gcc warning.
1101         (_gpgme_wait_global_event_cb): Pass error value directly.
1102         * wait-user.c: Include ops.h to silence gcc warning.
1103
1104         * posix-io.c (_gpgme_io_spawn): Make ARGV argument const to
1105         silence gcc warning.  Cast argument to execv to silence warning.
1106         * w32-io.c (_gpgme_io_spawn): Likewise.
1107         * priv-io.h (_gpgme_io_spawn): Likewise for prototype.
1108
1109 2008-10-24  Werner Koch  <wk@g10code.com>
1110
1111         * rungpg.c (gpg_keylist_preprocess): Escape backslashes too.
1112
1113 2008-10-23  Marcus Brinkmann  <marcus@g10code.de>
1114
1115         * rungpg.c (gpg_keylist_preprocess): Convert percent escaped
1116         string to C coded string.
1117
1118 2008-10-20  Werner Koch  <wk@g10code.com>
1119
1120         * Makefile.am (EXTRA_DIST): Add gpgme.h.in.
1121
1122         * gpgme.h: Rename to gpgme.h.in.
1123         * gpgme.h.in (GPGME_VERSION): Use autoconf substitution.
1124
1125         * posix-io.c: Include sys/uio.h.  Fixes bug #818.
1126
1127 2008-10-18  Marcus Brinkmann  <marcus@g10code.com>
1128
1129         * w32-util.c (find_program_in_registry): Don't define.
1130         (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path)
1131         (_gpgme_get_gpgconf_path): Do not check for fooProgram in the
1132         registry anymore.  It is now no longer possible to overwrite the
1133         default location in that way.
1134
1135 2008-10-17  Werner Koch  <wk@g10code.com>
1136
1137         * w32-glib-io.c (_gpgme_io_fd2str): Use "%d" and not "%ld" to work
1138         around a bug in mingw32.
1139
1140 2008-09-23  Marcus Brinkmann  <marcus@g10code.com>
1141
1142         * gpgme.c (gpgme_sig_notation_clear): Clear CTX->sig_notations.
1143         Submitted by "Daniel Mueller" <daniel@danm.de>
1144
1145 2008-09-16  Marcus Brinkmann  <marcus@g10code.com>
1146
1147         * rungpg.c (gpg_new): Don't use errno with ttyname_r.
1148
1149 2008-08-11  Marcus Brinkmann  <marcus@g10code.com>
1150
1151         * rungpg.c (gpg_cancel): Remove cmd fd before status fd.
1152         * gpgme.c (_gpgme_cancel_with_err): New function.
1153         (gpgme_cancel): Reimplement in terms of _gpgme_cancel_with_err.
1154         * wait-private.c (_gpgme_wait_on_condition): Use
1155         _gpgme_cancel_with_err.
1156         * wait-user.c (_gpgme_user_io_cb_handler): Likewise.
1157         * wait-global.c (_gpgme_wait_global_event_cb, gpgme_wait): Likewise.
1158
1159 2008-08-08  Marcus Brinkmann  <marcus@g10code.com>
1160
1161         * rungpg.c (command_handler): Remove I/O callback on error, too.
1162
1163 2008-06-29  Marcus Brinkmann  <marcus@g10code.com>
1164
1165         * gpgme.c (gpgme_cancel_async): Remove unused variable.
1166
1167 2008-06-27  Marcus Brinkmann  <marcus@g10code.de>
1168
1169         * libgpgme.vers: Add gpgme_cancel_async.
1170         * gpgme.def: Likewise.
1171
1172         * context.h: Include "sema.h".
1173         (struct gpgme_context): New members lock and canceled.
1174         * gpgme.c (gpgme_new): Initialize lock.
1175         (gpgme_release): Destroy lock.
1176         (gpgme_cancel_async): New function.
1177         * op-support.c (_gpgme_op_reset): Reset the canceled flag.
1178         * wait-global.c (gpgme_wait): Check cancel flag before processing
1179         any I/O callbacks.
1180         * wait-private.c (_gpgme_wait_on_condition): Likewise.
1181         * wait-user.c (_gpgme_user_io_cb_handler): Likewise.
1182
1183 2008-06-26  Werner Koch  <wk@g10code.com>
1184
1185         * w32-util.c (_gpgme_mkstemp): Replace sprint by stpcpy.
1186         (mkstemp): Need to use GetSystemTimeAsFileTime for better
1187         compatibility.
1188
1189 2008-06-25  Marcus Brinkmann  <marcus@g10code.de>
1190
1191         * gpgme-w32spawn.c: New file.
1192         * Makefile.am (libexec_PROGRAMS) [HAVE_W32_SYSTEM]: New variable
1193         with gpgme-w32spawn.
1194         * engine-gpgsm.c (gpgsm_new): Use server translated handles.
1195         (gpgsm_set_locale): Return early if locale value is NULL.
1196         * util.h (_gpgme_mkstemp)
1197         (_gpgme_get_w32spawn_path) [HAVE_W32_SYSTEM]: New function
1198         prototypes.
1199         * w32-util.c: Include <stdint.h>, <sys/stat.h> and <unistd.h>.
1200         (letters, mkstemp, _gpgme_mkstemp, _gpgme_get_w32spawn_path): New
1201         functions.
1202         * rungpg.c (gpg_decrypt, gpg_encrypt, gpg_encrypt_sign)
1203         (gpg_genkey, gpg_import, gpg_verify, gpg_sign): Pass data over
1204         special filename FD rather than stdin.
1205         (struct arg_and_data_s): Add member ARG_LOCP.
1206         (struct fd_data_map_s): Add member ARG_LOC.
1207         (struct engine_gpg): Add member ARG_LOC to status and colon.
1208         (_add_arg, add_arg_with_locp): New function.
1209         (add_arg_ext): Reimplement in terms of _add_arg.
1210         (gpg_new): Remember argument location for status FD.
1211         (build_argv): Set argument location if requested.  Also set
1212         argument location of fd_data_map for data items.
1213         (start): Adjust caller of _gpgme_io_spawn.
1214         * priv-io.h (struct spawn_fd_item_s): Add members peer_name and
1215         arg_loc.
1216         (_gpgme_io_spawn): Remove parent fd list argument.
1217         * posix-io.c (get_max_fds): New function.
1218         (_gpgme_io_dup): Add tracing.
1219         (_gpgme_io_spawn): Remove parent fd list.  Change meaning of child
1220         fd list to contain all child fds that should be inherited.  Close
1221         all other file descriptors after fork.
1222         * w32-io.c, w32-glib-io.c, w32-qt-io.c(_gpgme_io_spawn): Remove
1223         parent fd list.  Change meaning of child fd list to contain all
1224         child fds that should be inherited.  Do not inherit any file
1225         descriptors, but DuplicateHandle them.  Spawn process through
1226         wrapper process.  Provide wrapper process with a temporary file
1227         containing handle translation data.  Return translated handle
1228         names.
1229         * w32-io.c (reader): Add more tracing output.
1230         (_gpgme_io_read): Likewise.
1231         * engine-gpgconf.c (gpgconf_read): Adjust caller of
1232         _gpgme_io_spawn.
1233         * version.c (_gpgme_get_program_version): Likewise.
1234
1235 2008-06-20  Werner Koch  <wk@g10code.com>
1236
1237         * engine-gpgconf.c (gpgconf_read): Change ARGV initialization for
1238         compatibility with old compilers.  Fix amount of memmove.  Fix
1239         CR removal.
1240
1241 2008-06-19  Werner Koch  <wk@g10code.com>
1242
1243         * gpgme.h (GPGME_CONF_PATHNAME): Replace by GPGME_CONF_FILENAME,
1244         change all callers and provide compatibilty macro.
1245         (gpgme_conf_type_t): Add complex types 34..37.
1246         * engine-gpgconf.c (gpgconf_parse_option, arg_to_data)
1247         (_gpgme_conf_arg_new, _gpgme_conf_arg_release): Add new types.
1248
1249 2008-06-19  Marcus Brinkmann  <marcus@g10code.de>
1250
1251         * engine-gpgconf.c (gpgconf_parse_option): Fix comma detection.
1252
1253 2008-05-09  Werner Koch  <wk@g10code.com>
1254
1255         * engine-gpgconf.c (gpgconf_read): Do not pass empty lines to the
1256         callback.
1257
1258 2008-05-07  Werner Koch  <wk@g10code.com>
1259
1260         * engine-gpgconf.c (gpgconf_write): Change argv[0] to a
1261         self-explaining string.  Needs a proper fix, though.
1262
1263         * rungpg.c (gpg_keylist, gpg_keylist_ext): Factor common code out
1264         to ..
1265         (gpg_build_keylist_options): .. new. Allow combination of extern
1266         and intern mode.
1267         (gpg_new): DFT_TTYNAME is an array, thus check the first character.
1268
1269 2008-05-06  Werner Koch  <wk@g10code.com>
1270
1271         * version.c (extract_version_string): New.
1272         (_gpgme_get_program_version): Use it to allow for suffixes in the
1273         version line.
1274
1275 2008-04-28  Werner Koch  <wk@g10code.com>
1276
1277         * engine-gpgconf.c (gpgconf_read): Fixed segv.  Avoid memmove for
1278         each line.
1279
1280 2008-04-22  Marcus Brinkmann  <marcus@g10code.de>
1281
1282         * w32-qt-io.cpp, kdpipeiodevice.cpp: New versions from Frank
1283         Osterfeld, implement blocking select.
1284
1285 2008-03-11  Marcus Brinkmann  <marcus@g10code.de>
1286
1287         * data.c (gpgme_data_read, gpgme_data_write): Retry on EINTR.
1288
1289 2008-03-06  Marcus Brinkmann  <marcus@g10code.de>
1290
1291         * key.c (_gpgme_key_add_sig): Terminate UID in case SRC is NULL.
1292         Reported by Marc Mutz.
1293
1294 2008-03-05  Marcus Brinkmann  <marcus@g10code.de>
1295
1296         * decrypt.c (release_op_data): Release OPD->result.recipients.
1297         * encrypt.c (release_op_data): Release invalid_recipient.
1298
1299 2008-02-15  Marcus Brinkmann  <marcus@g10code.de>
1300
1301         * engine-gpgconf.c (gpgconf_read): Fix end-of-line handline.
1302
1303 2008-02-14  Werner Koch  <wk@g10code.com>
1304
1305         * w32-io.c (_gpgme_io_spawn): Add arg R_PID to return the pid.
1306         * posix-io.c (_gpgme_io_spawn): Ditto.
1307         * w32-glib-io.c (_gpgme_io_spawn): Ditto.
1308         * w32-qt-io.cpp (_gpgme_io_spawn): Ditto.
1309         * priv-io.h (_gpgme_io_spawn): Adjust prototyp and change all callers.
1310         * rungpg.c (start): Call _gpgme_allow_set_foregound_window.
1311
1312         * w32-util.c (_gpgme_allow_set_foregound_window): New.
1313         * posix-util.c (_gpgme_allow_set_foregound_window): New.
1314         * engine-gpgsm.c (default_inq_cb): New.
1315         (gpgsm_new) [W32]: Enable pinentry notifications.
1316         (status_handler): Handle inquiries.
1317
1318 2008-01-30  Marcus Brinkmann  <marcus@g10code.de>
1319
1320         * kdpipeiodevice.cpp: New version by Frank Osterfeld, fixes race
1321         condition.
1322
1323 2008-01-28  Marcus Brinkmann  <marcus@g10code.de>
1324
1325         * engine-gpgsm.c (map_input_enc): Rename to ...
1326         (map_data_enc): ... this.  Also change all callers.
1327         (gpgsm_encrypt, gpgsm_export, gpgsm_export_ext, gpgsm_genkey)
1328         (gpgsm_sign): Set encoding for output.
1329
1330 2008-01-28  Werner Koch  <wk@g10code.com>
1331
1332         * keylist.c (gpgme_get_key): Skip duplicated keys.  Fixes bug 876.
1333
1334 2008-01-14  Marcus Brinkmann  <marcus@g10code.de>
1335
1336         * engine-gpgconf.c (gpgconf_config_load_cb): Fix program_name
1337         field.
1338
1339 2008-01-10  Marcus Brinkmann  <marcus@g10code.de>
1340
1341         * kdpipeiodevice.cpp: New version from Frank Osterfeld.
1342
1343         * engine-gpgconf.c (gpgconf_config_load_cb2): Handle the flag
1344         NO_ARG_DESC.
1345
1346 2008-01-04  Marcus Brinkmann  <marcus@g10code.de>
1347
1348         * Makefile.am (gpgconf_components): New variable.
1349         (main_sources): Add gpgconf.c.
1350         * gpgme.h (gpgme_protocol_t): New protocol GPGME_PROTOCOL_GPGCONF.
1351         (gpgme_conf_level_t, gpgme_conf_type_t, gpgme_conf_arg_t)
1352         (gpgme_conf_opt_t, gpgme_conf_comp_t, gpgme_conf_arg_new)
1353         (gpgme_conf_arg_release, gpgme_conf_opt_change)
1354         (gpgme_conf_release, gpgme_op_conf_load, gpgme_op_conf_save): New
1355         types.
1356         * gpgconf.c, engine-gpgconf.c: New files.
1357         * engine.h: (_gpgme_engine_op_conf_load,
1358         (_gpgme_engine_op_conf_save): New prototypes.
1359         * op-support.c (_gpgme_op_reset): Ignore not implemented locale
1360         function.
1361         * posix-util.c (_gpgme_get_gpgconf_path): New function.
1362         * w32-util.c (_gpgme_get_gpgconf_path): New function.
1363         * engine-gpgsm.c:
1364         (_gpgme_engine_ops_gpgsm): Add stubs for conf_load and conf_save.
1365         * rungpg.c:
1366         (_gpgme_engine_ops_gpg): Add stubs for conf_load and conf_save.
1367         * gpgme.def: Add new gpgconf related interfaces.
1368         * libgpgme.vers: Likewise.
1369         * util.h (_gpgme_get_gpgconf_path): New prototype.
1370         * gpgme.h (gpgme_protocol_t): Add GPGME_PROTOCOL_GPGCONF.
1371         * engine-backend.h (_gpgme_engine_ops_gpgconf): New prototype.
1372         (struct engine_ops): Add members for conf_load and conf_save.
1373         * engine.c (engine_ops): Add _gpgme_engine_ops_gpgconf.
1374         (_gpgme_engine_op_conf_load,
1375         (_gpgme_engine_op_conf_save): New functions.
1376         (gpgme_get_engine_info): Allow protocol GPGME_PROTOCOL_GPGCONF.
1377
1378 2007-11-28  Marcus Brinkmann  <marcus@g10code.de>
1379
1380         * w32-util.c (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): Search
1381         for installation directory.  Remove old fallback default.
1382         (find_program_in_inst_dir): New function.
1383
1384 2007-11-26  Werner Koch  <wk@g10code.com>
1385
1386         * engine-gpgsm.c (struct engine_gpgsm): Add field INLINE_DATA and
1387         always reset it before calling start.
1388         (gpgsm_new): Clear it.
1389         (status_handler): Implement it.
1390         (gpgsm_getauditlog) [USE_DESCRIPTOR_PASSING]: Use INLINE_DATA.
1391
1392 2007-11-23  Werner Koch  <wk@g10code.com>
1393
1394         * op-support.c (_gpgme_op_reset): Implement a no-reset flag.
1395         * getauditlog.c (getauditlog_start): Use that flag.
1396
1397 2007-11-22  Werner Koch  <wk@g10code.com>
1398
1399         * gpgme.h (gpgme_op_getauditlog_start, gpgme_op_getauditlog): New.
1400         * libgpgme.vers: Ditto.
1401         * gpgme.def: Ditto.
1402         * getauditlog.c: New.
1403         * engine-backend.h (struct engine_ops): Add member GETAUDITLOG.
1404         * engine-gpgsm.c (gpgsm_getauditlog): New.
1405         (_gpgme_engine_ops_gpgsm): Insert new function.
1406         (gpgsm_new): Try to enable audit log support.
1407         * rungpg.c (_gpgme_engine_ops_gpg): Insert dummy entry.
1408         
1409 2007-11-20  Werner Koch  <wk@g10code.com>
1410
1411         * op-support.c (_gpgme_parse_inv_recp): Add new reason code 11.
1412
1413 2007-11-12  Marcus Brinkmann  <marcus@g10code.de>
1414
1415         * kdpipeiodevice.cpp: New version from Frank Osterfeld.
1416
1417 2007-10-11  Marcus Brinkmann  <marcus@g10code.de>
1418
1419         * kdpipeiodevice.cpp: New version from Frank Osterfeld.
1420
1421 2007-10-09  Marcus Brinkmann  <marcus@g10code.de>
1422
1423         * kdpipeiodevice.cpp: New version from Frank Osterfeld and Marc
1424         Mutz.
1425
1426 2007-10-05  Marcus Brinkmann  <marcus@g10code.de>
1427
1428         * kdpipeiodevice.cpp, w32-qt-io.cpp: New versions from Frank
1429         Osterfeld.
1430
1431 2007-10-04  Marcus Brinkmann  <marcus@g10code.de>
1432
1433         * kdpipeiodevice.h, kdpipeiodevice.cpp, kdpipeiodevice.moc,
1434         w32-qt-io.cpp: New versions from Frank Osterfeld.
1435
1436 2007-10-02  Marcus Brinkmann  <marcus@g10code.de>
1437
1438         * kdpipeiodevice.cpp, kdpipeiodevice.moc: New versions.
1439         * w32-qt-io.cpp (_gpgme_io_fd2str): Print actual_fd if available.
1440         (_gpgme_io_dup): Only acquire a reference, do not actually dup.
1441         Submitted by Frank Osterfeld.
1442
1443         * priv-io.h, engine-gpgsm.c: Add comments.
1444         * w32-qt-io.cpp (_gpgme_io_select): Remove code handling frozen FDs.
1445         * w32-glib-io.c (_gpgme_io_close): Always dereference the channel,
1446         even if not primary.
1447         (_gpgme_io_dup): Acquire a reference.  Replace unused
1448         implementation by assertion.
1449
1450 2007-09-28  Werner Koch  <wk@g10code.com>
1451
1452         * engine-gpgsm.c (iocb_data_t): Add SERVER_FD_STR.
1453         (gpgsm_new): Set it.
1454         (gpgsm_set_fd): Use it.
1455
1456         * w32-glib-io.c (find_channel): Add a new primary flag.
1457         (_gpgme_io_close): Close channel only if primary.
1458         (_gpgme_io_dup): Put newfd into the table as shallow copy.
1459
1460         * priv-io.h (struct io_select_fd_s): Remove member FROZEN.
1461         * w32-io.c (_gpgme_io_select): Ditto.
1462         * w32-glib-io.c (_gpgme_io_select): Ditto.
1463
1464         * posix-io.c (_gpgme_io_select): Ditto.
1465         * rungpg.c (read_status): Ditto.
1466         * wait.c (fd_table_put): Ditto.
1467
1468         * rungpg.c (gpg_io_event): Add tracing.
1469         (start): Use gpg_io_event for sending the start event.
1470         * engine-gpgsm.c (gpgsm_io_event): Add tracing.
1471         (start): Use gpgsm_io_event for sending the start event.
1472         * wait.c (_gpgme_add_io_cb, _gpgme_run_io_cb): Add tracing.
1473
1474 2007-09-28  Marcus Brinkmann  <marcus@g10code.de>
1475
1476         * kdpipeiodevice.moc, w32-qt-io.cpp, kdpipeiodevice.cpp: New
1477         versions from Frank Osterfeld.
1478
1479 2007-09-27  Marcus Brinkmann  <marcus@g10code.de>
1480
1481         * w32-glib-io.c (_gpgme_io_spawn),
1482         w32-qt-io.cpp (_gpgme_io_spawn), w32-io.c (_gpgme_io_spawn): Close
1483         the process handle, return 0.
1484
1485         * gpgme.h (gpgme_protocol_t): Add GPGME_PROTOCOL_UNKNOWN.
1486         * gpgme.c (gpgme_get_protocol_name): Implement support for
1487         GPGME_PROTOCOL_UNKNOWN.
1488
1489         * kdpipeiodevice.h: Fix last change.
1490
1491         * w32-glib-io.c (_gpgme_io_pipe), w32-qt-io.c (_gpgme_io_pipe),
1492         w32-io.c (_gpgme_io_pipe), posix-io.c (_gpgme_io_pipe): Fix debug
1493         output.
1494
1495 2007-09-25  Marcus Brinkmann  <marcus@g10code.de>
1496
1497         * conversion.c, keylist.c: Include <sys/types.h>.
1498
1499         * kdpipeiodevice.h: Use namespace _gpgme_.
1500         * kdpipeiodevice.cpp: Use namespace _gpgme_.
1501         [Q_OS_WIN32 && NOMINMAX]: Do not define NOMINMAX again.
1502         * w32-qt-io.cpp: Change namespace of KDPipeIODevice to
1503         _gpgme_::KDPipeIODevice.
1504
1505 2007-09-17  Werner Koch  <wk@g10code.com>
1506
1507         * rungpg.c (gpg_new): Make robust against undefined ttyname or
1508         ttytype.
1509
1510 2007-09-14  Werner Koch  <wk@g10code.com>
1511
1512         * data-mem.c (gpgme_data_release_and_get_mem): Fix tracing bug.
1513
1514 2007-09-14  Marcus Brinkmann  <marcus@g10code.de>
1515
1516         * gpgme.c (gpgme_release): Call gpgme_sig_notation_clear.
1517
1518 2007-09-13  Marcus Brinkmann  <marcus@g10code.de>
1519
1520         * rungpg.c (gpg_new): Handle return value of _gpgme_getenv (fixes
1521         small memory leak).
1522
1523 2007-09-07  Marcus Brinkmann  <marcus@g10code.de>
1524
1525         * Makefile.am (libgpgme_qt_la_SOURCES): Move
1526         moc_kdpipeiodevice.cpp to EXTRA_DIST, as this is only included by
1527         another file (it's more like a header file than a cpp file, but
1528         automake doesn't know that).
1529
1530         * w32-qt-io.cpp (_gpgme_io_spawn): Fix several cast errors and typos.
1531         * w32-io.c (_gpgme_io_write): Use TRACE_SYSRES instead of TRACE_SYS.
1532         (libgpgme_qt_la_LIBADD): Add QT4_CORE_LIBS, not QT4_CORE_LIB.
1533
1534         * kdpipeiodevice.h, kdpipeiodevice.cpp, moc_kdpipeiodevice.cpp,
1535         kdpipeiodevice.moc, w32-qt-io.c: New files.
1536         * Makefile.am (ltlib_gpgme_extra): Rename to ltlib_gpgme_glib.
1537         (ltlib_gpgme_qt): New variable.
1538         (lib_LTLIBRARIES): Add $(ltlib_gpgme_qt).
1539         (libgpgme_qt_la_SOURCES): New variable.
1540         (AM_CPPFLAGS): Add @QT4_CORE_INCLUDES@
1541         (AM_CFLAGS): Add @QT4_CORE_CFLAGS@.
1542         (libgpgme_qt_la_LDFLAGS, libgpgme_qt_la_DEPENDENCIES)
1543         (libgpgme_qt_la_LIBADD): New variables.
1544
1545         * sema.h (struct critsect_s): Rename "private" to "priv" to make
1546         C++ users happy.  Change users.
1547         * posix-sema.c (_gpgme_sema_cs_enter, _gpgme_sema_cs_leave)
1548         (_gpgme_sema_cs_destroy): Likewise.
1549         * w32-sema.c (critsect_init, _gpgme_sema_cs_enter)
1550         (_gpgme_sema_cs_leave, _gpgme_sema_cs_destroy): Likewise.
1551         * w32-glib-io.c (gpgme_get_giochannel): Change return type to
1552         void*.
1553         (gpgme_get_fdptr): New function.
1554         * w32-io.c (gpgme_get_fdptr): New function
1555         * gpgme.def: Add gpgme_get_fdptr.
1556
1557 2007-08-22  Marcus Brinkmann  <marcus@g10code.de>
1558
1559         * w32-io.c (_gpgme_io_write): Return early if COUNT is zero.
1560         (writer): Remove superfluous check.
1561
1562 2007-08-20  Marcus Brinkmann  <marcus@g10code.de>
1563
1564         * gpgme.h: Move include of gpg-error.h out of extern "C".
1565
1566 2007-08-07  Werner Koch  <wk@g10code.com>
1567
1568         * gpgme.h (struct _gpgme_signature): Add member CHAIN_MODEL.
1569         * verify.c (parse_trust): Set Chain_MODEL.
1570
1571 2007-08-02  Werner Koch  <wk@g10code.com>
1572
1573         * w32-glib-io.c (_gpgme_io_spawn): Use DETACHED_PROCESS flag.
1574         * w32-io.c (_gpgme_io_spawn): Ditto.
1575         (_gpgme_io_write): Map ERROR_NO_DATA to EPIPE.
1576         * debug.c (_gpgme_debug): Enable assuan logging.
1577         (_gpgme_debug_subsystem_init): New.
1578         * version.c (do_subsystem_inits): Disable assuan logging and
1579         initialize the debug system.
1580         (gpgme_check_version): Do not trace before the subsystems are
1581         initialized.
1582
1583 2007-07-17  Marcus Brinkmann  <marcus@g10code.de>
1584
1585         * debug.c: Include <errno.h> and "debug.h".
1586         (_gpgme_debug): Save and restore ERRNO.
1587         (TOHEX): New macro.
1588         (_gpgme_debug_buffer): New function.
1589         * conversion.c, data-compat.c, data-mem.c, data.c, engine-gpgsm.c,
1590         gpgme.c, keylist.c, posix-io.c, rungpg.c, sign.c, version.c,
1591         w32-io.c, wait.c: Replace DEBUG macros by TRACE_* variants.  In
1592         most of these files, add many more tracepoints.
1593
1594 2007-07-16  Marcus Brinkmann  <marcus@g10code.de>
1595
1596         * engine-gpgsm.c (status_handler): Do not send BYE here.
1597
1598         * w32-io.c (struct reader_context_s, struct writer_context_s): New
1599         members REFCOUNT.
1600         (create_reader, create_writer): Initialize C->refcount to 1.
1601         (destroy_reader, destroy_writer): Only destroy if C->refcount
1602         drops to 0.
1603         (find_reader, find_writer, kill_reader, kill_writer): Beautify.
1604         * priv-io.h (_gpgme_io_dup): New prototype.
1605         * posix-io.c (_gpgme_io_dup): New function. 
1606         * w32-io.c (_gpgme_io_dup): Likewise.
1607         * w32-glib-io.c (_gpgme_io_dup): Likewise.
1608         * engine-gpgsm.c (start): Reverting to version 2007-07-10.
1609
1610 2007-07-13  Marcus Brinkmann  <marcus@g10code.de>
1611
1612         * data-user.c (user_read, user_write, user_seek): Set errno and
1613         return -1 instead returning the error code directly.
1614         * data-compat.c (old_user_seek): Likewise.
1615         * gpgme.c (gpgme_sig_notation_add): Return error properly.
1616
1617         * Revert the "close_notify_handler" returns int stuff.  Always
1618         close in the _gpgme_io_close implementations.
1619         * engine-gpgsm.c (status_handler): Try to terminate the connection
1620         in case of error.
1621         * w32-io.c (_gpgme_io_read): Return C->error_code in ERRNO.
1622         (_gpgme_io_write): Likewise.
1623         
1624         * priv-io.h (_gpgme_io_set_close_notify): Change type of HANDLER
1625         to _gpgme_close_notify_handler.
1626         (_gpgme_close_notify_handler): New type.
1627         (_gpgme_io_dup): Remove prototype.
1628         * posix-io.c (notify_table, _gpgme_io_set_close_notify): Change
1629         type of HANDLER to _gpgme_close_notify_handler_t.
1630         (_gpgme_io_close): Do not close the FD if handler returns 0.
1631         (_gpgme_io_dup): Remove function.
1632         * w32-io.c (notify_table, _gpgme_io_set_close_notify,
1633         _gpgme_io_close): Change type of HANDLER to
1634         _gpgme_close_notify_handler_t.
1635         (_gpgme_io_close): Do not close the FD if handler returns 0.
1636         (_gpgme_io_dup): Remove function.
1637         * w32-glib-io.c (_gpgme_io_dup): Remove function.
1638         (_gpgme_io_set_close_notify, notify_table): Change type of HANDLER
1639         to _gpgme_close_notify_handler_t.
1640         (_gpgme_io_close): Do not close the FD if handler returns 0.
1641         * rungpg.c (close_notify_handler): Change return type to int,
1642         return 1.
1643         * engine-gpgsm.c (close_notify_handler): Change return type to
1644         int, return 0 for status FD and 1 for all other FDs.
1645         (start): Do not duplicate the status FD.
1646
1647 2007-07-12  Marcus Brinkmann  <marcus@g10code.de>
1648
1649         * Makefile.am: Replace implicite rule by suffix rule.  Add
1650         SUFFIXES for that.
1651
1652 2007-07-12  Werner Koch  <wk@g10code.com>
1653
1654         * version.c (do_subsystem_inits) [W32]: Make sure that the socket
1655         system has been started.
1656
1657 2007-07-10  Marcus Brinkmann  <marcus@g10code.de>
1658
1659         * priv-io.h (_gpgme_io_dup): New prototype.
1660         * posix-io.c (_gpgme_io_dup): New function. 
1661         * w32-io.c (_gpgme_io_dup): Likewise.
1662         * w32-glib-io.c (_gpgme_io_dup): Likewise.
1663         * engine-gpgsm.c (start): Use _gpgme_dup() instead of dup().
1664
1665 2007-07-08  Marcus Brinkmann  <marcus@g10code.de>
1666
1667         * engine-gpgsm.c [HAVE_W32_SYSTEM]: Enable the bunch of the file.
1668         * funopen.c (funopen): Rename to _gpgme_funopen.
1669
1670 2007-04-30  Marcus Brinkmann  <marcus@g10code.de>
1671
1672         * engine-gpgsm.c (gpgsm_new): Fix error handling for ttyname_r.
1673         * rungpg.c (gpg_new): Likewise.
1674         Submitted by Stephen Tether.
1675
1676 2007-02-26  Werner Koch  <wk@g10code.com>
1677
1678         * verify.c (op_data_t): New element PLAINTEXT_SEEN.
1679         (_gpgme_verify_status_handler): Return an error if more than one
1680         plaintext has been seen.
1681         (parse_error): New arg SET_STATUS. Also detect it based on an
1682         ERROR status (gpg > 1.4.6).
1683
1684 2007-01-26  Werner Koch  <wk@g10code.com>
1685
1686         * w32-io.c (build_commandline): Fixed stupid quoting bug.
1687         * w32-glib-io.c (build_commandline): Ditto.
1688
1689         * rungpg.c (gpg_set_locale): Avoid dangling pointer after free.
1690
1691         * gpgme-config.in: New options --get-gpg and --get-gpgsm.
1692
1693 2007-01-18  Marcus Brinkmann  <marcus@g10code.de>
1694
1695         * data.h (_gpgme_data_get_fd): Add prototype.
1696         (gpgme_data_get_fd_cb): New type.
1697         (struct _gpgme_data_cbs): New member get_fd.
1698         * data.c (_gpgme_data_get_fd): New function.
1699         * data-fd.c (fd_get_fd): New function.
1700         (fd_cbs): Add fd_get_fd.
1701         * data-stream.c (stream_get_fd): New function.
1702         (stream_cbs): Add stream_get_fd.
1703         * data-mem.c (mem_cbs): Add NULL for get_fd callback.   
1704         * data-user.c (user_cbs): Likewise.
1705         * engine-gpgsm.c (gpgsm_set_fd) [USE_DESCRIPTOR_PASSING]: Try to
1706         short-cut by passing the data descriptor directly.
1707
1708 2007-01-17  Marcus Brinkmann  <marcus@g10code.de>
1709
1710         * w32-io.c (build_commandline): Quote all command line arguments.
1711         * w32-glib-io.c (build_commandline): Likewise.
1712
1713 2007-01-10  Werner Koch  <wk@g10code.com>
1714
1715         * ttyname_r.c (ttyname_r) [W32]: Return a dummy name.
1716
1717 2007-01-08  Werner Koch  <wk@g10code.com>
1718
1719         * version.c (do_subsystem_inits): Do assuan init only if building
1720         with Assuan.
1721         * setenv.c: Include assuan-def.h only if building with Assuan
1722         support.
1723
1724         * op-support.c (_gpgme_op_reset): Set LC_MESSAGES only if
1725         if defined.
1726         * engine-gpgsm.c (gpgsm_set_locale): Ditto.
1727         * rungpg.c (gpg_set_locale): Ditto.
1728
1729 2006-12-17  Marcus Brinkmann  <marcus@g10code.de>
1730
1731         * gpgme.c (gpgme_set_protocol): Shut down the engine when
1732         switching protocols.
1733         (gpgme_ctx_set_engine_info): Likewise for engine info.
1734         * engine.h (_gpgme_engine_reset): New function prototype.
1735         * engine.c (_gpgme_engine_reset): New function.
1736         * engine-backend.h (struct engine_ops): New member RESET.
1737         * rungpg.c (_gpgme_engine_ops_gpg): Add NULL for reset function.
1738         * engine-gpgsm.c (_gpgme_engine_ops_gpgsm)
1739         [USE_DESCRIPTOR_PASSING]: Add gpgsm_reset for reset.
1740         (_gpgme_engine_ops_gpgsm) [!USE_DESCRIPTOR_PASSING]: Add NULL for
1741         reset function.
1742         (gpgsm_reset) [USE_DESCRIPTOR_PASSING]: New function.
1743         * op-support.c (_gpgme_op_reset): Try to use the engine's reset
1744         function if available.
1745         * engine-gpgsm.c (gpgsm_new): Move code to dup status_fd to ...
1746         (start): ... here.
1747         * posix-io.c (_gpgme_io_recvmsg, _gpgme_io_sendmsg): New functions.
1748         
1749         * engine.h (_gpgme_engine_new): Remove arguments lc_ctype and
1750         lc_messages from prototype.
1751         (_gpgme_engine_set_locale): New prototype.
1752         * engine.c (_gpgme_engine_set_locale): New function.
1753         * op-support.c (_gpgme_op_reset): Call _gpgme_engine_set_locale.
1754         * engine-backend.h (struct engine_ops): Add new member SET_LOCALE.
1755         Remove arguments lc_messages and lc_ctype from member NEW.
1756         * engine-gpgsm.c (struct engine_gpgsm): New members lc_ctype_set
1757         and lc_messages_set.
1758         (gpgsm_new): Remove lc_messages and lc_ctype
1759         arguments.
1760         (gpgsm_set_locale): New function.
1761         (_gpgme_engine_ops_gpgsm): Add gpgsm_set_locale.
1762         * rungpg.c (struct engine_gpg): Add new members lc_messages and
1763         lc_ctype.
1764         (gpg_release): Release lc_messages and lc_ctype if set.
1765         (gpg_new): Remove lc_messages and lc_ctype arguments.
1766         (gpg_set_locale): New function.
1767         (_gpgme_engine_ops_gpg): Add gpg_set_locale.
1768         (add_arg): Implement in terms of:
1769         (add_arg_ext): New function.
1770         (start): Set lc-messages and lc-ctype arguments here.
1771
1772 2006-12-03  Marcus Brinkmann  <marcus@g10code.de>
1773
1774         * engine-gpgsm.c (struct engine_gpgsm): Move members
1775         input_fd_server, output_fd_server, message_fd_server to ...
1776         (iocb_data): ... here (as server_fd).
1777         (close_notify_handler): Reset tags as well.
1778         (gpgsm_new): Implement support for descriptor
1779         passing.
1780         (fd_type_t): New type.
1781         (gpgsm_clear_fd): New function.  Use it instead of _gpgsm_io_close
1782         for unused communication channels.
1783         (gpgsm_set_fd): Rewritten to support descriptor passing.  All
1784         relevant callers adjusted as well (previously of _gpgme_io_close).
1785
1786 2006-12-02  Marcus Brinkmann  <marcus@g10code.de>
1787
1788         * version.c: Include "assuan.h".
1789         (do_subsystem_inits): Call assuan_set_assuan_err_source.
1790
1791 2006-12-01  Marcus Brinkmann  <marcus@g10code.de>
1792
1793         * Makefile.am (libgpgme_real_la_SOURCES): Rename to main_sources.
1794         (libgpgme_la_SOURCES, libgpgme_pthread_la_SOURCES,
1795         libgpgme_glib_la_SOURCES, libgpgme_pth_la_SOURCES): Add
1796         $(main_sources).
1797         (libgpgme_la_DEPENDENCIES, libgpgme_la_LIBADD,
1798         libgpgme_pthread_la_DEPENDENCIES, libgpgme_pthread_la_LIBADD,
1799         libgpgme_pth_la_DEPENDENCIES, libgpgme_pth_la_LIBADD,
1800         libgpgme_glib_la_DEPENDENCIES, libgpgme_glib_la_LIBADD): Remove
1801         libgpgme-real.la.
1802         (noinst_LTLIBRARIES): Removed.
1803         (libgpgme_glib_la_CFLAGS, libgpgme_pth_la_CFLAGS): Removed.
1804         (AM_CFLAGS): New variable.
1805
1806 2006-11-30  Marcus Brinkmann  <marcus@g10code.de>
1807
1808         * engine-gpgsm.c: Replace AssuanError with gpg_error_t and
1809         ASSUAN_CONTEXT with assuan_context_t.
1810
1811 2006-11-29  Marcus Brinkmann  <marcus@g10code.de>
1812
1813         * engine-gpgsm.c (gpgsm_new): Check return value of
1814         assuan_pipe_connect.
1815
1816         * rungpg.c: Include <unistd.h>.
1817         (gpg_new): Support --display, --ttyname, --ttytype, --lc-ctype and
1818         --lc-messages.  Fixes issue 734.
1819
1820 2006-10-24  Marcus Brinkmann  <marcus@g10code.de>
1821
1822         * trustlist.c (gpgme_op_trustlist_next): Return error if OPD is
1823         NULL.
1824
1825 2006-10-23  Marcus Brinkmann  <marcus@g10code.de>
1826
1827         * wait-global.c (gpgme_wait): Unlock CTX_LIST_LOCK while calling
1828         _gpgme_engine_io_event().
1829
1830         * keylist.c (gpgme_op_keylist_next): Return error if OPD is NULL.
1831
1832 2006-09-25  Marcus Brinkmann  <marcus@g10code.de>
1833
1834         * data-mem.c (gpgme_data_release_and_get_mem): Release the data
1835         object properly.
1836
1837 2006-09-22  Marcus Brinkmann  <marcus@g10code.de>
1838
1839         * keylist.c (keylist_colon_handler): Move debug output after
1840         initialising KEY.
1841
1842 2006-07-29  Marcus Brinkmann  <marcus@g10code.de>
1843
1844         * gpgme-config.in (Options): Add NETLIBS.
1845         * Makefile.am (libgpgme_la_LIBADD, libgpgme_pthread_la_LIBADD,
1846         libgpgme_pth_la_LIBADD, libgpgme_glib_la_LIBADD): Add NETLIBS.
1847
1848         * rungpg.c (read_status): Fix comparison disguising as an
1849         assignment.
1850
1851 2005-03-24  Marcus Brinkmann  <marcus@g10code.de>
1852
1853         * gpgme.c (gpgme_set_locale): Remove conditional on
1854         HAVE_W32_SYSTEM, and just check for LC_MESSAGES.
1855
1856 2006-07-16  Marcus Brinkmann  <marcus@g10code.de>
1857
1858         * rungpg.c (read_status): Strip potential carriage return.
1859         * genkey.c (get_key_parameter): Skip potential carriage return.
1860         * version.c (_gpgme_get_program_version): Strip potential carriage
1861         return.
1862
1863         * data.c (gpgme_data_set_file_name): Allow to clear the file name
1864         by passing NULL.
1865
1866 2006-06-22  Marcus Brinkmann  <marcus@g10code.de>
1867
1868         * keylist.c (gpgme_get_key): Also clone the engine info.
1869
1870 2006-03-06  Marcus Brinkmann  <marcus@g10code.de>
1871
1872         * gpgme-config.in (cflags_pth): Revert accidential removal of
1873         pthread support with last change.
1874
1875 2006-02-28  Marcus Brinkmann  <marcus@g10code.de>
1876
1877         * w32-glib-io.c (O_BINARY) [!O_BINARY]: New macro.
1878         (_gpgme_io_pipe): Open pipes in binary mode.
1879
1880 2006-02-22  Marcus Brinkmann  <marcus@g10code.de>
1881
1882         * engine.c (gpgme_engine_check_version): Reimplemented to allow
1883         checking the version correctly even after changing the engine
1884         information.  Bug reported by Stéphane Corthésy.
1885
1886         * rungpg.c (read_colon_line): Invoke colon preprocess handler if
1887         it is set.
1888         (colon_preprocessor_t): New type.
1889         (struct engine_gpg): New member colon.preprocess_fnc.
1890         (gpg_keylist_preprocess): New function.
1891         * keylist.c (keylist_colon_handler): Allow short key IDs.
1892
1893 2006-02-15  Marcus Brinkmann  <marcus@g10code.de>
1894
1895         * w32-io.c (create_writer): Make C->have_data a manually resetted
1896         event.
1897         (writer): Move code from end of if block to beginning, so it
1898         is also run the first time.
1899         (_gpgme_io_write): Move assert check after error check.  Reset
1900         the is_empty event, and also do it eagerly.
1901         (_gpgme_io_select): Unconditionally wait for the is_empty event.
1902
1903 2006-01-26  Werner Koch  <wk@g10code.com>
1904
1905         * w32-util.c (_gpgme_get_conf_int): New.
1906         * posix-util.c (_gpgme_get_conf_int): New.
1907         * w32-io.c (get_desired_thread_priority): New.
1908         (create_reader, create_writer): Use it here.
1909
1910 2006-01-04  Werner Koch  <wk@g10code.com>
1911
1912         * debug.h (_gpgme_debug_srcname): New. Use it with the debug macros.
1913
1914         * w32-glib-io.c (_gpgme_io_set_nonblocking): Add debug
1915         statements. Disable error return for failed nonblocking call.
1916
1917 2006-01-03  Marcus Brinkmann  <marcus@g10code.de>
1918
1919         * w32-glib-io.c (_gpgme_io_close): Only close fd if there is no
1920         channel for it.
1921
1922 2005-12-31  Marcus Brinkmann  <marcus@g10code.de>
1923
1924         * w32-glib-io.c (find_channel): Set channel to unbuffered.
1925         (_gpgme_io_select): Fix debug output.
1926
1927 2005-12-23  Werner Koch  <wk@g10code.com>
1928
1929         * gpgme.h (struct _gpgme_signature): Append field PKA_ADDRESS.
1930         * verify.c (release_op_data, _gpgme_verify_status_handler): Set
1931         this field.
1932
1933 2005-12-20  Werner Koch  <wk@g10code.com>
1934
1935         * gpgme.h (gpgme_status_code_t): Added GPGME_STATUS_PKA_TRUST_BAD
1936         and GPGME_STATUS_PKA_TRUST_GOOD.
1937         (struct _gpgme_signature): New field pka_trust.
1938         * verify.c (_gpgme_verify_status_handler): Set pka_trust.
1939
1940 2005-12-06  Werner Koch  <wk@g10code.com>
1941
1942         * keylist.c (keylist_colon_handler): Store fingerprints of the
1943         subkeys.  Reset the secret flag of subkeys for stub secret keys.
1944         (NR_FIELDS): Bumped up to 16
1945
1946 2005-11-27  Marcus Brinkmann  <marcus@g10code.de>
1947
1948         * engine.c (_gpgme_set_engine_info): Use new_file_name in
1949         engine_get_version invocation.  Reported by Stéphane Corthésy.
1950
1951 2005-11-24  Marcus Brinkmann  <marcus@g10code.de>
1952
1953         * w32-glib-io.c (_gpgme_io_fd2str): Remove debug printf.
1954
1955 2005-11-18  Werner Koch  <wk@g10code.com>
1956
1957         * w32-glib-io.c: Include glib.h before windows to avoid a symbol
1958         shadowing warning.
1959         (find_channel): Better use g_io_channel_win32_new_fd instead of
1960         the autodetection function g_io_channel_unix_new.
1961         (_gpgme_io_select): Rewritten.  It is now a fully working select
1962         implementation.
1963
1964 2005-11-18  Marcus Brinkmann  <marcus@g10code.de>
1965
1966         * priv-io.h (_gpgme_io_fd2str): New prototype.
1967         * posix-io.c (_gpgme_io_fd2str): New function.
1968         * w32-io.c (_gpgme_io_fd2str): New function.
1969         * rungpg.c: Use this new function.
1970         * w32-glib-io.c (_gpgme_io_fd2str): Rewrote the file handle code
1971         again.  Two's company, three's the musketeers.
1972
1973         * w32-glib-io.c: Rewrote the file handle code.  We don't create
1974         system fds for every handle (doesn't work for inherited handles),
1975         but we create pseudo fds in a private namespace that designate a
1976         handle and potentially a giochannel.
1977
1978 2005-11-18  Werner Koch  <wk@g10code.com>
1979
1980         * versioninfo.rc.in: Set file version to LT-version + Svn-revision.
1981
1982 2005-11-17  Marcus Brinkmann  <marcus@g10code.de>
1983
1984         * w32-glib-io.c: New file.
1985         * gpgme.def (gpgme_get_giochannel): Add symbol.
1986         * Makefile.am (system_components) [HAVE_DOSISH_SYSTEM]: Remove
1987         w32-io.c.
1988         (ltlib_gpgme_extra): New variable.
1989         (lib_LTLIBRARIES): Add $(ltlib_gpgme_extra).
1990         (system_components_not_extra): New variable.
1991         (libgpgme_la_SOURCES, libgpgme_pthread_la_SOURCES,
1992         (libgpgme_pth_la_SOURCES): Add $(system_components_not_extra).
1993         (libgpgme_glib_la_LDFLAGS, libgpgme_glib_la_DEPENDENCIES,
1994         (libgpgme_glib_la_LIBADD, libgpgme_glib_la_CFLAGS)
1995         [BUILD_W32_GLIB]: New variables. 
1996         * gpgme-config.in (glib): New option.
1997         * gpgme.m4 (AM_PATH_GPGME_GLIB): New macro.
1998
1999 2005-11-17  Marcus Brinkmann  <marcus@g10code.de>
2000
2001         * priv-io.h (_gpgme_io_waitpid, _gpgme_io_kill): Removed.
2002         * w32-io.c (_gpgme_io_waitpid, _gpgme_io_kill): Removed.
2003         * posix-io.c (_gpgme_io_kill): Removed.
2004         (_gpgme_io_waitpid): Declare static.
2005
2006 2005-10-24  Marcus Brinkmann  <marcus@g10code.de>
2007
2008         * w32-io.c (_gpgme_io_spawn): Don't minimize window, hide it.
2009
2010 2005-10-21  Werner Koch  <wk@g10code.com>
2011
2012         * Makefile.am: Fixed cut+paste problem
2013
2014 2005-10-20  Marcus Brinkmann  <marcus@g10code.de>
2015
2016         * Makefile.am: Build versioninfo.lo, not versioninfo.o.  Also, fix
2017         the whole mess.
2018
2019 2005-10-16  Marcus Brinkmann  <marcus@g10code.de>
2020
2021         * rungpg.c (gpg_edit): Don't add a key argument if in card edit
2022         mode.
2023
2024 2005-10-06  Marcus Brinkmann  <marcus@g10code.de>
2025
2026         * Makefile.am (gpgme.dll gpgme.dll.a): Use $(srcdir) for
2027         gpgme.def.
2028
2029         * gpgme.h (gpgme_free): New prototype.
2030         * data-mem.c (gpgme_free): New function.
2031         * libgpgme.vers (GPGME_1.1): Add gpgme_free.
2032         * gpgme.def: Add gpgme_free.
2033
2034 2005-10-02  Marcus Brinkmann  <marcus@g10code.de>
2035
2036         * util.h (_gpgme_decode_percent_string): Add new argument BINARY
2037         to prototype.
2038         * verify.c (parse_notation): Likewise for invocation.
2039         * conversion.c (_gpgme_decode_percent_string): Likewise to
2040         declaration.  If set, do not replace '\0' characters with a
2041         printable string.
2042         * gpgme.h (struct _gpgme_key_sig): New field notations.
2043         * ops.h (_gpgme_parse_notation): New prototype.
2044         * sig-notation.c (_gpgme_parse_notation): New function.
2045         * key.c (gpgme_key_unref): Free all signature notations.
2046         * keylist.c (op_data_t): New member tmp_keysig.
2047         (finish_key): Clear OPD->tmp_keysig.
2048         * gpgme.c (gpgme_set_keylist_mode): Remove check.
2049         * rungpg.c (gpg_keylist): Support listing signature notations.
2050         (gpg_keylist_ext): Likewise.
2051
2052 2005-10-01  Marcus Brinkmann  <marcus@g10code.de>
2053
2054         * engine.h (_gpgme_set_engine_info): Add prototype.
2055         * engine-backend.h (struct engine_ops): Change return type of
2056         get_file_name() to const char * to silence gcc warning.
2057         * engine.c (engine_get_file_name): Change return type to const
2058         char * to silence gcc warning.
2059         (gpgme_get_engine_info): Use transitional variable to go from
2060         const char * to char * to silence gcc warning.
2061         (_gpgme_set_engine_info): Likewise.
2062         * engine-gpgsm.c (struct engine_gpgsm): Change type of LINE to
2063         char * to silence gcc warning.
2064         (gpgsm_new): Make ARGV a pointer to const char.
2065         (status_handler): Change type of SRC, END, DST, ALINE and NEWLINE
2066         to char * to silence gcc warning.
2067
2068         * gpgme.def: Add gpgme_data_set_file_name,
2069         gpgme_data_get_file_name, gpgme_sig_notation_clear,
2070         gpgme_sig_notation_add and gpgme_sig_notation_get.
2071         * libgpgme.vers: Add gpgme_sig_notation_clear,
2072         gpgme_sig_notation_add and gpgme_sig_notation_get.
2073         * Makefile.am (libgpgme_real_la_SOURCES): Add sig-notation.c.
2074         * context.h (struct gpgme_context): New field sig_notations.
2075         * gpgme.h (struct _gpgme_sig_notation): New member value_len and
2076         critical.
2077         (GPGME_SIG_NOTATION_CRITICAL): New symbol.
2078         (gpgme_sig_notation_flags_t): New type.
2079         (gpgme_sig_notation_add, gpgme_sig_notation_clear,
2080         gpgme_sig_notation_get): New prototypes.
2081         * ops.h (_gpgme_sig_notation_create, _gpgme_sig_notation_free):
2082         New prototypes.
2083         * sig-notation.c (_gpgme_sig_notation_free): New file.
2084         * verify.c (parse_notation): Use support functions.
2085         (release_op_data): Likewise.
2086         * rungpg.c (append_args_from_sig_notations): New function.
2087         (gpg_encrypt_sign, gpg_sign): Call it.
2088
2089 2005-09-30  Marcus Brinkmann  <marcus@g10code.de>
2090
2091         * data.h (struct gpgme_data): New member file_name.
2092         * data.c (gpgme_data_set_filename): New function.
2093         (_gpgme_data_release): Free DH->filename if necessary.
2094         (gpgme_data_get_filename): New function.
2095         * rungpg.c (gpg_encrypt): Set filename option.
2096         (gpg_encrypt_sign): Likewise.
2097         (gpg_sign): Likewise.
2098         * libgpgme.vers (GPGME_1.1): Add gpgme_data_set_file_name and
2099         gpgme_data_get_file_name.
2100
2101         * decrpyt.c, verify.c, gpgme.h: Replace plaintext_filename with
2102         file_name.
2103
2104 2005-09-29  Marcus Brinkmann  <marcus@g10code.de>
2105
2106         * gpgme.h (struct _gpgme_key): Add field is_qualified.
2107         (struct _gpgme_subkey): Likewise.
2108         * keylist.c (set_subkey_capability, set_mainkey_capability): Set
2109         field is_qualified.
2110
2111 2005-09-23  Werner Koch  <wk@g10code.com>
2112
2113         * w32-io.c (_gpgme_io_pipe): Removed use of environment variable
2114         again.
2115         (create_reader, create_writer): Set thread priority higher.
2116
2117 2005-09-19  Werner Koch  <wk@g10code.com>
2118
2119         * w32-io.c (_gpgme_io_pipe): New environment variable to change
2120         the size of the pipe buffer.
2121
2122 2005-09-13  Werner Koch  <wk@g10code.com>
2123
2124         * ath.c: Changes to make it work under W32.
2125
2126 2005-09-12  Marcus Brinkmann  <marcus@g10code.de>
2127
2128         * Makefile.am (libgpgme_la_SOURCES): Set to ath.h and ath.c.
2129         (ath_pth_src, ath_pthread_src): Removed.
2130         (w32_o_files): Replace ath-compat.o with ath.o.
2131         (libgpgme_pth_la_CFLAGS): New variable.
2132         * ath-compat.c, ath-pthread-compat.c, ath-pth-compat.c: Removed.
2133         * ath.h (ath_pthread_available, ath_pth_available): Removed.
2134         (ath_init) [!_ATH_EXT_SYM_PREFIX]: Do not define macro.
2135         (struct ath_ops, ath_init) [_ATH_COMPAT]: Removed.
2136         (_ATH_COMPAT): Macro removed.
2137         * posix-sema.c (_gpgme_sema_subsystem_init): Do not call
2138         _gpgme_ath_init.
2139
2140 2005-09-12  Marcus Brinkmann  <marcus@g10code.de>
2141
2142         * keylist.c (release_op_data): Do not free opd->tmp_uid.
2143
2144 2005-09-07  Werner Koch  <wk@g10code.com>
2145
2146         * w32-io.c (build_commandline): Quote argv[0].
2147
2148 2005-08-26  Marcus Brinkmann  <marcus@g10code.de>
2149
2150         * rungpg.c (command_handler): Use _gpgme_io_write instead of write.
2151
2152         * edit.c (command_handler): Do not depend on PROCESSED being
2153         available.
2154
2155         * engine.h (engine_command_handler_t): Add new argument processed.
2156         * ops.h (_gpgme_passphrase_command_handler_internal): Rename
2157         prototype to ...
2158         (_gpgme_passphrase_command_handler): ... this one.
2159         * passphrase.c (_gpgme_passphrase_command_handler_internal):
2160         Rename to ...
2161         (_gpgme_passphrase_command_handler): ... this one.
2162         * edit.c (command_handler): Add new argument processed.  Remove
2163         local variable with the same name.  Always return processed as
2164         true.
2165         * rungpg.c (command_handler): Send a newline character if the
2166         handler did not.
2167
2168 2005-08-26  Werner Koch  <wk@g10code.com>
2169
2170         * w32-util.c (read_w32_registry_string): Updated from code used by
2171         GnuPG.  This allows for expanding strings and features the
2172         implicit fallback key.
2173         (w32_shgetfolderpath, find_program_at_standard_place): New.
2174         (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): With no registry
2175         entry, locate the programs at the standard place.
2176         (dlopen, dlsym, dlclose): New, so that we can keep on using what
2177         we are accustomed to.
2178
2179         * debug.c (debug_init): Use PATHSEP_C so that under W32 a
2180         semicolon is used which allows us to create files with drive
2181         letters.
2182
2183         * w32-io.c (_gpgme_io_read, _gpgme_io_write): Print content in
2184         debug mode too.
2185
2186 2005-08-19  Werner Koch  <wk@g10code.com>
2187
2188         * gpgme.def: New.
2189         * versioninfo.rc.in: New.
2190         * Makefile.am: Addes support for building a W32 DLL.
2191         
2192         * ttyname_r.c (ttyname_r) [W32]: Return error.
2193         * ath-compat.c [W32]: select and co are not yet supported; return
2194         error.
2195         * data-stream.c (stream_seek): Use ftell if ftello is not available.
2196
2197 2005-08-08  Werner Koch  <wk@g10code.com>
2198
2199         * util.h (stpcpy): Renamed to ..
2200         (_gpgme_stpcpy): .. this and made inline.  This avoids duplicate
2201         definitions when linking statically.
2202         * stpcpy.c: Removed.
2203         
2204 2005-07-27  Marcus Brinkmann  <marcus@g10code.de>
2205
2206         * gpgme.h (gpgme_status_code_t): Add GPGME_STATUS_PLAINTEXT.
2207         (struct _gpgme_op_decrypt_result): New member plaintext_filename.
2208         (struct _gpgme_op_verify_result): Likewise.
2209         * ops.h (_gpgme_parse_plaintext): Add prototype.
2210         * op-support.c (_gpgme_parse_plaintext): New function.
2211         * decrypt.c (release_op_data): Release
2212         OPD->result.plaintext_filename.
2213         (_gpgme_decrypt_status_handler): Handle GPGME_STATUS_PLAINTEXT.
2214         * verify.c (release_op_data): Release
2215         OPD->result.plaintext_filename.
2216         (_gpgme_verify_status_handler): Handle GPGME_STATUS_PLAINTEXT.
2217
2218 2005-07-26  Marcus Brinkmann  <marcus@g10code.de>
2219
2220         * keylist.c (gpgme_get_key): Allow key IDs.
2221
2222 2005-06-20  Marcus Brinkmann  <marcus@g10code.de>
2223
2224         * gpgme.m4: Only call GPGME_CONFIG if found.
2225
2226 2005-06-03  Marcus Brinkmann  <marcus@g10code.de>
2227
2228         * gpgme.h (struct _gpgme_signature): New members pubkey_algo and
2229         hash_algo.
2230         * verify.c (parse_valid_sig): Parse pubkey and hash algo numbers.
2231         (parse_new_sig): Parse pubkey, hash algo and timestamp for ERRSIG.
2232
2233         (_gpgme_decrypt_status_handler): Fix last change.
2234
2235         * gpgme.h (struct _gpgme_recipient): New structure.
2236         (gpgme_recipient_t): New type.
2237         (struct _gpgme_op_decrypt_result): Add member recipients.
2238         * decrypt.c (op_data_t): New member last_recipient_p.
2239         (_gpgme_op_decrypt_init_result): Initialize last_recipient_p.
2240         (parse_enc_to): New function.
2241         (_gpgme_decrypt_status_handler): Handle status ENC_TO and
2242         NO_SECKEY.
2243
2244         * wait-global.c (gpgme_wait): Break out of the fd processing loop
2245         after an error.
2246         Reported by Igor Belyi <gpgme@katehok.ac93.org>.
2247
2248 2005-06-02  Marcus Brinkmann  <marcus@g10code.de>
2249
2250         * wait.h (_gpgme_run_io_cb): New prototype.
2251         * wait.c (_gpgme_run_io_cb): New function.
2252         * wait-global.c (gpgme_wait): Call it.
2253         * wait-user.c (_gpgme_user_io_cb_handler): Likewise.
2254         * wait-private.c (_gpgme_wait_on_condition): Likewise.
2255
2256 2005-06-02  Werner Koch  <wk@g10code.com>
2257
2258         * passphrase.c (_gpgme_passphrase_status_handler): Take care of
2259         GPGME_STATUS_NEED_PASSPHRASE_PIN.
2260         (_gpgme_passphrase_command_handler_internal): Also act on the key
2261         "passphrase.pin.ask".
2262
2263         * gpgme.h: Added status codes GPGME_STATUS_SIG_SUBPACKET,
2264         GPGME_STATUS_NEED_PASSPHRASE_PIN, GPGME_STATUS_SC_OP_FAILURE,
2265         GPGME_STATUS_SC_OP_SUCCESS, GPGME_STATUS_CARDCTRL,
2266         GPGME_STATUS_BACKUP_KEY_CREATED.
2267
2268 2005-05-28  Marcus Brinkmann  <marcus@g10code.de>
2269
2270         * data-user.c: Include <errno.h>.
2271
2272 2005-05-17  Marcus Brinkmann  <marcus@g10code.de>
2273
2274         * gpgme.c (gpgme_new): Set the CTX->include_certs default to the
2275         default.
2276
2277 2005-05-11  Marcus Brinkmann  <marcus@g10code.de>
2278
2279         * w32-io.c (_gpgme_io_select): Fix loop increment.
2280
2281 2005-05-05  Marcus Brinkmann  <marcus@g10code.de>
2282
2283         * data-user.c (user_release): Only call user hook if provided.
2284         (user_seek): Return EBADF if no user hook is provided.
2285         (user_read): Likewise.
2286         (user_write): Likewise.
2287
2288 2005-04-28  Marcus Brinkmann  <marcus@g10code.de>
2289
2290         * gpgme.h (GPGME_INCLUDE_CERTS_DEFAULT): New macro.
2291         * engine-gpgsm.c (gpgsm_sign): Send the include-certs option after
2292         the reset, just for cleanliness, and do not sent it at all if the
2293         default is requested.
2294         * gpgme.c (gpgme_set_include_certs): Allow to use
2295         GPGME_INCLUDE_CERTS_DEFAULT.
2296
2297 2005-04-21  Werner Koch  <wk@g10code.com>
2298
2299         * verify.c (calc_sig_summary): Set the key revoked bit.
2300
2301 2005-04-14  Marcus Brinkmann  <marcus@g10code.de>
2302
2303         * wait-global.c (gpgme_wait): Use LI->ctx when checking a context
2304         in the list, not the user-provided CTX.
2305         Reported by Igor Belyi <gpgme@katehok.ac93.org>.
2306
2307         * wait-global.c (gpgme_wait): If no context is found, and we
2308         should not hang, set *status to 0 and return NULL.
2309         Reported by Igor Belyi <gpgme@katehok.ac93.org>.
2310
2311 2005-03-24  Marcus Brinkmann  <marcus@g10code.de>
2312
2313         * data.h (EOPNOTSUPP) [_WIN32]: Remove definition.
2314         * data.c (EOPNOTSUPP) [HAVE_W32_SYSTEM]: Remove definition.
2315         (gpgme_data_read, gpgme_data_write, gpgme_data_seek): Return
2316         ENOSYS instead EOPNOTSUPP.
2317         * data-compat.c (EOPNOTSUPP) [HAVE_W32_SYSTEM]: Remove definition.
2318         (gpgme_error_to_errno): Map GPG_ERR_NOT_SUPPORTED
2319         to ENOSYS.
2320
2321 2005-03-24  Marcus Brinkmann  <marcus@g10code.de>
2322
2323         * io.h: Rename to ...
2324         * priv-io.h: ... this.
2325         * Makefile.am (libgpgme_real_la_SOURCES): Change io.h to priv-io.h.
2326         * data.c, engine-gpgsm.c, posix-io.c, rungpg.c, version.c,
2327         w32-io.c, wait-private.c, wait-global.c, wait-user.c, wait.c:
2328         Change all includes of "io.h" to "priv-io.h"
2329         
2330 2005-03-09  Werner Koch  <wk@g10code.com>
2331
2332         * w32-util.c (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): Do not
2333         cast away type checks.
2334
2335         * io.h [W32]: Do not include stdio.h.  If it is needed do it at
2336         the right place.
2337
2338         * data.h [W32]: Removed kludge for EOPNOTSUP.
2339         * data.c, data-compat.c [W32]: Explicitly test for it here.
2340
2341         Replaced use of _WIN32 by HAVE_W32_SYSTEM except for public header
2342         files.
2343
2344 2005-03-07  Timo Schulz  <twoaday@g10code.de>
2345  
2346         * gpgme.h: [_WIN32] Removed ssize_t typedef.
2347         * ath.h: [_WIN32] Added some (dummy) types.
2348         * io.h: [_WIN32] include stdio.h.
2349         * data.h: [_WIN32] Define EOPNOTSUPP.
2350         * w32-io.c [_WIN32] (_gpgme_io_subsystem_init): New.
2351         * gpgme.c [_WIN32] (gpgme_set_locale): Disabled.
2352
2353 2004-12-12  Marcus Brinkmann  <marcus@g10code.de>
2354
2355         * engine.c (_gpgme_set_engine_info): Fix assertion.
2356
2357 2004-12-11  Marcus Brinkmann  <marcus@g10code.de>
2358
2359         * util.h [HAVE_CONFIG_H && HAVE_TTYNAME_R] (ttyname_r): Define
2360         prototype.
2361         * ttyname_r.c: New file.
2362
2363 2004-12-07  Marcus Brinkmann  <marcus@g10code.de>
2364
2365         * putc_unlocked.c, funopen.c: I just claim copyright on these
2366         files and change their license to LGPL, because they are totally
2367         trivial wrapper functions.
2368         * isascii.c: Change copyright notice to the one from ctype/ctype.h
2369         in the GNU C Library (CVS Head 2004-10-10), where isascii is
2370         defined as a macro doing exactly the same as the function in this
2371         file.
2372         * memrchr.c: Update from the GNU C Library (CVS Head 2001-07-06).
2373         * stpcpy.c: Update from the GNU C Library (CVS Head 2004-10-10).
2374         * ath.c, ath-compat.c, ath.h, ath-pth.c, ath-pth-compat.c,
2375         ath-pthread.c, ath-pthread-compat.c, context.h, conversion.c,
2376         data.c, data-compat.c, data-fd.c, data.h, data-mem.c,
2377         data-stream.c, data-user.c, debug.c, debug.h, decrypt.c,
2378         decrypt-verify.c, delete.c, edit.c, encrypt.c, encrypt-sign.c,
2379         engine-backend.h, engine.c, engine-gpgsm.c, engine.h, error.c,
2380         export.c, genkey.c, get-env.c, gpgme.c, gpgme.h, import.c, io.h,
2381         key.c, keylist.c, mkstatus, Makefile.am, ops.h, op-support.c,
2382         passphrase.c, posix-io.c, posix-sema.c, posix-util.c, progress.c,
2383         rungpg.c, sema.h, sign.c, signers.c, trust-item.c, trustlist.c,
2384         util.h, verify.c, version.c, w32-io.c, w32-sema.c, w32-util.c,
2385         wait.c, wait-global.c, wait.h, wait-private.c, wait-user.c: Change
2386         license to LGPL.
2387
2388 2004-12-07  Marcus Brinkmann  <marcus@g10code.de>
2389
2390         * libgpgme.vers (GPGME_1.1): New version.
2391         * engine-backend.h (struct engine_ops): Add argument FILE_NAME to
2392         member get_version().  Add arguments FILE_NAME and HOME_DIR to
2393         member new().  Change return type of get_file_name and get_version
2394         to char *.
2395         * engine-gpgsm.c (gpgsm_get_version): Change return type to char
2396         pointer.  Do not cache result.
2397         (gpgsm_new): Add file_name and home_dir argument, and use them
2398         instead of the defaults, if set.
2399         * rungpg.c (struct engine_gpg): New member file_name.
2400         (gpg_get_version): Change return type to char pointer, and do not
2401         cache result.
2402         (gpg_release): Free gpg->file_name.
2403         (gpg_new): Take new arguments file_name and home_dir.  Set the
2404         --homedir argument if HOME_DIR is not NULL.  Set gpg->file_name.
2405         (start): Use gpg->file_name instead _gpgme_get_gpg_path, if set.
2406         * engine.h (_gpgme_engine_info_copy, _gpgme_engine_info_release):
2407         New prototypes.
2408         (_gpgme_engine_new): Change first argument to gpgme_engine_info_t
2409         info.
2410         * engine.c: Include <assert.h>.
2411         (gpgme_get_engine_info): Set *INFO within the lock.  Move
2412         ENGINE_INFO and ENGINE_INFO_LOCK to ....
2413         (engine_info, engine_info_lock): ... here.  New static variables.
2414         (engine_get_version): Add file_name argument to
2415         get_version invocation.  Change return type to char pointer.
2416         (gpgme_engine_check_version): Rewritten to free() the return value
2417         of engine_get_version after using it.
2418         (_gpgme_engine_info_release): New function.
2419         (gpgme_get_engine_info): Rewritten.
2420         (_gpgme_engine_info_copy): New function.
2421         (_gpgme_set_engine_info): New function.
2422         (gpgme_set_engine_info): New function.
2423         (_gpgme_engine_new): Change first argument to gpgme_engine_info_t
2424         info, and use that.
2425         * gpgme.h (struct _gpgme_engine_info): Change type of file_name
2426         and version to char * (remove the const).  New member home_dir.
2427         (gpgme_set_engine_info, gpgme_ctx_get_engine_info,
2428         gpgme_ctx_set_engine_info): New prototypes.
2429         * context.h (struct gpgme_context): New member engine_info.
2430         * gpgme.c (gpgme_new): Allocate CTX->engine_info.
2431         (gpgme_release): Deallocate CTX->engine_info.
2432         (gpgme_ctx_get_engine_info, gpgme_ctx_set_engine_info): New
2433         functions.
2434         * op-support.c (_gpgme_op_reset): Look for correct engine info and
2435         pass it to _gpgme_engine_new.
2436         * version.c (gpgme_check_version): Adjust to
2437         _gpgme_compare_versions returning an int.
2438         (_gpgme_compare_versions): Return an int value, not a const char
2439         pointer.
2440         * ops.h (_gpgme_compare_versions): Same for prototype.
2441
2442 2004-10-03  Marcus Brinkmann  <marcus@g10code.de>
2443
2444         * verify.c (parse_trust): If no reason is provided, set
2445         SIG->validity_reason to 0.
2446         (calc_sig_summary): Set GPGME_SIGSUM_CRL_TOO_OLD if appropriate.
2447
2448 2004-10-22  Marcus Brinkmann  <marcus@g10code.de>
2449
2450         * engine-gpgsm.c (map_assuan_error): Return 0 if ERR is 0.
2451         (start): Call map_assuan_error on return value of
2452         assuan_write_line.
2453
2454 2004-10-05  Marcus Brinkmann  <marcus@g10code.de>
2455
2456         * op-support.c (_gpgme_op_data_lookup): Use char pointer for
2457         pointer arithmetic.
2458
2459 2004-09-30  Marcus Brinkmann  <marcus@g10code.de>
2460
2461         * gpgme.m4: Implement the --api-version check.
2462
2463         * rungpg.c (read_status): Move the polling of the output data pipe
2464         to just before removing the command fd, from just before adding
2465         it.  This avoids buffering problems.
2466
2467         * data.c (_gpgme_data_inbound_handler): Use _gpgme_io_read, not
2468         read, to improve debug output.
2469
2470 2004-09-29  Marcus Brinkmann  <marcus@g10code.de>
2471
2472         * gpgme.h (GPGME_IMPORT_NEW, GPGME_IMPORT_UID, GPGME_IMPORT_SIG,
2473         GPGME_IMPORT_SUBKEY, GPGME_IMPORT_SECRET,
2474         (GPGME_KEYLIST_MODE_LOCAL, GPGME_KEYLIST_MODERN_EXTERN,
2475         GPGME_KEYLIST_MODE_SIGS, GPGME_KEYLIST_MODE_VALIDATE): Change from
2476         enum to macros.
2477         (gpgme_keylist_mode_t): Define as unsigned int.
2478         (gpgme_key_t): Change type of keylist_mode to
2479         gpgme_keylist_mode_t.
2480
2481 2004-09-23  Marcus Brinkmann  <marcus@g10code.de>
2482
2483         * data.c (_gpgme_data_outbound_handler): Close the file descriptor
2484         if we get an EPIPE.
2485         
2486         * data-stream.c (stream_seek): Call ftello and return the current
2487         offset.
2488         * data.h (struct gpgme_data): Change type of data.mem.offset to
2489         off_t.
2490         * data.c (gpgme_data_seek): Check dh->cbs->seek callback, not read
2491         callback.  If SEEK_CUR, adjust the offset by the pending buffer
2492         size.  Clear pending buffer on success.
2493
2494
2495 2004-09-14  Marcus Brinkmann  <marcus@g10code.de>
2496
2497         * gpgme.m4: Add copyright notice.
2498
2499 2004-08-18  Marcus Brinkmann  <marcus@g10code.de>
2500
2501         * passphrase.c (_gpgme_passphrase_status_handler): Always run the
2502         status handler.
2503
2504 2004-08-17  Marcus Brinkmann  <marcus@g10code.de>
2505
2506         * rungpg.c (build_argv): Use --no-sk-comment, not --no-comment.
2507
2508 2004-06-23  Marcus Brinkmann  <marcus@g10code.de>
2509
2510         * key.c (_gpgme_key_append_name): Make sure tail points to the
2511         byte following the uid.
2512         (_gpgme_key_add_sig): Likewise.  Don't use calloc, but malloc and
2513         memset.
2514
2515 2004-06-02  Marcus Brinkmann  <marcus@g10code.de>
2516
2517         * libgpgme.vers: Remove C-style comment, which is not supported by
2518         older binutils.
2519
2520 2004-05-21  Marcus Brinkmann  <marcus@g10code.de>
2521
2522         * gpgme-config.in (Options): Support --api-version.
2523
2524         * libgpgme.vers: List all gpgme symbols under version GPGME_1.0.
2525
2526         * decrypt.c (_gpgme_decrypt_status_handler): Fix last change.
2527         * verify.c (parse_error): Likewise.
2528
2529         * verify.c (parse_error): Do not skip location of where token.
2530
2531         * gpgme.h (gpgme_status_code_t): Add GPGME_STATUS_REVKEYSIG.
2532         * verify.c (_gpgme_verify_status_handler): Add handling of
2533         GPGME_STATUS_REVKEYSIG.
2534         (parse_trust): Likewise.
2535
2536 2004-05-21  Marcus Brinkmann  <marcus@g10code.de>
2537
2538         * gpgme.h (struct _gpgme_decrypt_result): New fields
2539         wrong_key_usage and _unused.
2540         * decrypt.c (_gpgme_decrypt_status_handler): Don't skip over
2541         character after a matched string, as in a protocol error this
2542         could skip over the trailing binary zero.
2543         Handle decrypt.keyusage error notifications.
2544
2545         * gpgme.h (struct _gpgme_key): New member keylist_mode.
2546         * keylist.c (keylist_colon_handler): Set the keylist_mode of KEY.
2547
2548 2004-04-29  Marcus Brinkmann  <marcus@g10code.de>
2549
2550         * gpgme.h (struct _gpgme_signature): Change member WRONG_KEY_USAGE
2551         to unsigned int.  Same for member _unused.
2552
2553         * keylist.c (set_mainkey_trust_info): Rewritten.
2554         (set_subkey_capability): Handle 'd' (disabled).
2555         (set_mainkey_capability): Rewritten.
2556
2557 2004-04-22  Marcus Brinkmann  <marcus@g10code.de>
2558
2559         * gpgme.m4: Quote first argument to AC_DEFUN.
2560
2561 2004-04-21  Werner Koch  <wk@gnupg.org>
2562
2563         * key.c (gpgme_key_unref): Allow passing NULL like free does.
2564         The rule of least surprise.
2565
2566 2004-04-15  Werner Koch  <wk@gnupg.org>
2567
2568         * verify.c (prepare_new_sig, _gpgme_verify_status_handler): Remove
2569         unused result.signatures items.
2570
2571         * keylist.c (gpgme_get_key): Return an error if FPR is NULL.
2572
2573 2004-04-08  Werner Koch  <wk@gnupg.org>
2574
2575         * verify.c (_gpgme_verify_status_handler): Ignore the error status
2576         if we can't process it.
2577         * decrypt-verify.c (decrypt_verify_status_handler): Backed out
2578         yesterday's hack.  It is not any longer required.
2579
2580 2004-04-07  Werner Koch  <wk@gnupg.org>
2581
2582         * decrypt-verify.c (decrypt_verify_status_handler): Hack to cope
2583         with meaningless error codes from the verify status function.
2584
2585 2004-04-05  Werner Koch  <wk@gnupg.org>
2586
2587         * gpgme.h: Add GPGME_STATUS_NEWSIG.
2588
2589         * verify.c (parse_error): Compare only the last part of the where
2590         token.
2591         (prepare_new_sig): New.
2592         (parse_new_sig): Use prepare_new_sig when required.
2593         (_gpgme_verify_status_handler): Handle STATUS_NEWSIG.
2594
2595         * engine-gpgsm.c (gpgsm_keylist_ext): Send with-validation
2596         option.  Fixed pattern construction.
2597         (status_handler): Add debugging output.
2598
2599 2004-03-23  Marcus Brinkmann  <marcus@g10code.de>
2600
2601         * engine-gpgsm.c (gpgsm_new): Protect _only_ tty related code with
2602         isatty().  Submitted by Bernhard Herzog.
2603
2604 2004-03-11  Marcus Brinkmann  <marcus@g10code.de>
2605
2606         * engine-gpgsm.c (gpgsm_new): Protect all tty related code with
2607         isatty().
2608
2609         * rungpg.c (gpg_cancel): Set GPG->fd_data_map to NULL after
2610         releasing it.
2611         * engine-gpgsm.c (gpgsm_cancel): Only call assuan_disconnect if
2612         GPGSM->assuan_ctx is not NULL.  Set it to NULL afterwards.
2613
2614 2004-03-07  Marcus Brinkmann  <marcus@g10code.de>
2615
2616         * gpgme-config.in: Do not emit include and lib directory for
2617         prefix "/usr" or "".
2618
2619 2004-03-03  Werner Koch  <wk@gnupg.org>
2620
2621         * engine-gpgsm.c (gpgsm_export_ext): Properly insert a space
2622         beween patterns.
2623
2624 2004-02-18  Werner Koch  <wk@gnupg.org>
2625
2626         * gpgme-config.in: Ignore setting of --prefix.
2627
2628 2004-02-25  Marcus Brinkmann  <marcus@g10code.de>
2629
2630         * rungpg.c (gpg_cancel): New function.
2631         (gpg_release): Call it here.
2632         (_gpgme_engine_ops_gpg): Add it here.
2633         * engine-gpgsm.c (gpgsm_cancel): Fix last change.
2634
2635 2004-02-24  Marcus Brinkmann  <marcus@g10code.de>
2636
2637         * gpgme.c (gpgme_cancel): New function.
2638         * engine-backend.h (struct engine_ops): New member cancel.
2639         * engine.h (_gpgme_engine_cancel): New prototype.
2640         * engine.c (_gpgme_engine_cancel): New function.
2641         * engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Add new member cancel.
2642         (gpgsm_cancel): New function.
2643         (gpgsm_release): Use it.
2644         * rungpg.c (_gpgme_engine_ops_gpg): Add new member cancel.
2645
2646 2004-02-17  Werner Koch  <wk@gnupg.org>
2647
2648         * gpgme.h: Add GPGME_KEYLIST_MODE_VALIDATE. 
2649         * engine-gpgsm.c (gpgsm_keylist): Send this to gpgsm.
2650
2651 2004-02-15  Werner Koch  <wk@gnupg.org>
2652
2653         * memrchr.c (memrchr): Fixed implementation.  Problem pointed out
2654         by Adriaan de Groot.
2655
2656 2004-02-01  Marcus Brinkmann  <marcus@g10code.de>
2657
2658         * rungpg.c (build_argv): Use --no-comment, not --comment "".
2659
2660         * data-compat.c (gpgme_data_new_from_filepart): Call fseeko if
2661         available.
2662         * data-stream.c (stream_seek): Likewise.
2663
2664 2004-01-16  Werner Koch  <wk@gnupg.org>
2665
2666         * conversion.c (_gpgme_map_gnupg_error): Handle numerical codes as
2667         used by GnuPG 1.9.x
2668
2669 2004-01-13  Marcus Brinkmann  <marcus@g10code.de>
2670
2671         * gpgme.h (struct _gpgme_key_sig): Fix comment on REVOKED.
2672
2673 2004-01-12  Werner Koch  <wk@gnupg.org>
2674
2675         * sign.c: Include util.h for prototype of _gpgme_parse_timestamp.
2676
2677 2003-12-25  Marcus Brinkmann  <marcus@g10code.de>
2678
2679         * gpgme.h (_GPGME_D_CLASS): Revert this change.
2680         (struct _gpgme_key_sig): For C++ compilers, rename class
2681         member to _obsolete_class.  Add new member sig_class.
2682         (struct _gpgme_new_signature): Same here.
2683         * key.c (gpgme_key_sig_get_ulong_attr): Use CERTSIG->sig_class,
2684         not CERTSIG->class.
2685         * keylist.c (keylist_colon_handler): Likewise for KEYSIG, but keep
2686         setting KEYSIG->class, too.  Rename variable CLASS to SIG_CLASS.
2687         * sign.c (parse_sig_created): Set SIG->sig_class.
2688
2689 2003-12-22  Werner Koch  <wk@gnupg.org>
2690
2691         * gpgme.h (_GPGME_D_CLASS): Kludge for C++ compatibility without
2692         changing the C API.
2693
2694 2003-11-19  Werner Koch  <wk@gnupg.org>
2695
2696         * conversion.c (_gpgme_parse_timestamp): New.
2697         (atoi_1, atoi_2, atoi_4): New.
2698         * keylist.c (parse_timestamp): Removed. Changed all callers to use
2699         the new function.
2700         * verify.c (parse_valid_sig): Ditto.  Repalced the errno check.
2701         * sign.c (parse_sig_created): Ditto.
2702
2703 2003-10-31  Werner Koch  <wk@gnupg.org>
2704
2705         * keylist.c (parse_timestamp): Detect ISO 8601 timestamps and try
2706         to convert them.
2707
2708 2003-10-10  Marcus Brinkmann  <marcus@g10code.de>
2709
2710         * genkey.c (get_key_parameter): Make a copy of the key parameters.
2711         Submitted by Miguel Coca <e970095@zipi.fi.upm.es>.
2712
2713 2003-10-06  Marcus Brinkmann  <marcus@g10code.de>
2714
2715         * data-compat.c: Include <sys/time.h> before <sys/stat.h> for
2716         broken systems.
2717
2718         * engine-gpgsm.c (map_assuan_error): If ERR is -1, return sensible
2719         error.
2720
2721         * io.h (_gpgme_io_subsystem_init): New prototype.
2722         * posix-io.c (_gpgme_io_subsystem_init): Add function.
2723         (_gpgme_io_spawn): Do not fixup signal handler here.
2724         * version.c (do_subsystem_inits): Call _gpgme_io_subsystem_init.
2725
2726         * debug.c (debug_init): Drop const qualifier from E.
2727
2728         * ath.h (struct ath_ops): Make ADDR argument of CONNECT prototype
2729         const.
2730         (ath_connect): Make ADDR argument const.
2731         * ath-pthread.c (ath_connect): Likewise.
2732         * ath-pth.c (ath_connect): Likewise.
2733         * ath-compat.c (ath_connect): Likewise.
2734         * ath.c (ath_connect): Likewise.
2735
2736         * ath.h [HAVE_SYS_SELECT_H]: Include <sys/select.h> for fd_set.
2737         [!HAVE_SYS_SELECT_H]: Include <sys/time.h>.
2738
2739         * conversion.c (_gpgme_hextobyte): Drop "unsigned" from type of
2740         SRC argument.
2741         * util.h (_gpgme_hextobyte): Likewise for prototype.
2742
2743         * gpgme.h: Remove trailing comma in enum.
2744
2745         * rungpg.c: Do not include <time.h>, <sys/time.h>, <sys/types.h>,
2746         <signal.h>, <fcntl.h>, or "unistd.h".
2747
2748 2003-10-02  Marcus Brinkmann  <marcus@g10code.de>
2749
2750         * engine-backend.h (struct engine_ops): Add argument TYPE.
2751         * engine.c (_gpgme_engine_op_edit): Likewise.
2752         * engine.h: Likewise.
2753         * rungpg.c (gpg_edit): Likewise.  Use it.
2754         * edit.c (edit_start): Likewise.  Pass it on.
2755         (gpgme_op_edit_start, gpgme_op_edit): Likewise.
2756         (gpgme_op_card_edit_start, gpgme_op_card_edit): New functions.
2757
2758 2003-09-30  Marcus Brinkmann  <marcus@g10code.de>
2759
2760         * gpgme.h (gpg_strerror_r): Change prototype to match
2761         gpg_strerror_r change.
2762         * error.c (gpg_strerror_r): Likewise, also update implementation.
2763
2764         * gpgme.c (gpgme_hash_algo_name): Change name of RMD160 to
2765         RIPEMD160, name of TIGER to TIGER192, name of CRC32-RFC1510 to
2766         CRC32RFC1510, and name of CRC24-RFC2440 to CRC24RFC2440.
2767
2768 2003-09-14  Marcus Brinkmann  <marcus@g10code.de>
2769
2770         * gpgme.h: Add prototype for gpgme_set_locale.
2771
2772         * gpgme.h: Define macro _GPGME_INLINE depending on the compiler
2773         characteristics and use that instead __inline__.
2774
2775         * context.h (struct gpgme_context): New members lc_ctype and
2776         lc_messages.
2777         * gpgme.c: Include <locale.h>.
2778         (def_lc_lock, def_lc_ctype, def_lc_messages): New static
2779         variables.
2780         (gpgme_set_locale): New function.
2781         * engine.c (_gpgme_engine_new): Add arguments lc_ctype and
2782         lc_messages.
2783         * engine.h (_gpgme_engine_new): Likewise.
2784         * engine-gpgsm.c (gpgsm_new): Likewise.
2785         * rungpg.c (gpg_new): Likewise.
2786         * engine-backend.h (struct engine_ops): Likewise to NEW.
2787         * op-support.c (_gpgme_op_reset): Likewise to invocation of
2788         _gpgme_engine_new.
2789
2790 2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
2791
2792         * gpgme.h (gpgme_strerror_r): New prototype.
2793         * error.c (gpgme_strerror_r): New function.
2794
2795         * get-env.c: New file.
2796         * util.h (_gpgme_getenv): Add prototype.
2797         * Makefile.am (libgpgme_real_la_SOURCES): Add get-env.c.
2798         * rungpg.c (build_argv): Use _gpgme_getenv.
2799         * debug.c (debug_init): Likewise.
2800         * engine-gpgsm.c (gpgsm_new): Likewise.
2801         (gpgsm_new): Use ttyname_r.
2802         * w32-io.c (_gpgme_io_spawn): Disable debugging for now.
2803
2804 2003-09-03  Marcus Brinkmann  <marcus@g10code.de>
2805
2806         * gpgme-config.in: Use $libdir, not @libdir@, for the echo
2807         command.
2808
2809         * gpgme-config.in: Rewritten.
2810         * gpgme.m4: Rewritten.
2811
2812 2003-08-19  Marcus Brinkmann  <marcus@g10code.de>
2813
2814         The ath files (ath.h, ath.c, ath-pth.c, ath-pthread.c,
2815         ath-compat.c, ath-pth-compat.c and ath-pthread-compat.c) have been
2816         updated to have better thread support, and the Makefile.am was
2817         changed to reflect that.
2818
2819         * util.h [!HAVE_FOPENCOOKIE]: Remove fopencookie declaration.
2820         * engine-gpgsm.c (gpgsm_assuan_simple_command): Set ERR to return
2821         value of status_fnc.
2822         * rungpg.c (start): Return SAVED_ERRNO, not errno.
2823
2824 2003-08-18  Marcus Brinkmann  <marcus@g10code.de>
2825
2826         * rungpg.c (start): Use saved_errno instead errno.
2827
2828 2003-08-18  Marcus Brinkmann  <marcus@g10code.de>
2829
2830         * funopen.c, putc_unlocked.c, isascii.c, memrchr.c: New files.
2831         * fopencookie.c: File removed.
2832
2833 2003-08-15  Marcus Brinkmann  <marcus@g10code.de>
2834
2835         * gpgme-config.in: Put gpg-error related flags after gpgme's.
2836
2837 2003-08-14  Marcus Brinkmann  <marcus@g10code.de>
2838
2839         * gpgme.h (struct _gpgme_new_signature): Rename member CLASS to
2840         _OBSOLETE_CLASS, add member CLASS with type unsigned int.
2841         * sign.c (parse_sig_created): Also set SIG->_unused_class for
2842         backward compatibility.
2843
2844 2003-08-04  Marcus Brinkmann  <marcus@g10code.de>
2845
2846         * verify.c (parse_new_sig): Fix status parsing case.
2847
2848 2003-07-31  Marcus Brinkmann  <marcus@g10code.de>
2849
2850         * gpgme.h (struct _gpgme_subkey): Add flag CAN_AUTHENTICATE.
2851         Lower _UNUSED to 23 bits.
2852         (struct _gpgme_key): Likewise.
2853         * keylist.c (set_mainkey_capability): Support 'a' and 'A'.
2854         (set_subkey_capability): Support 'a'.
2855
2856         * keylist.c (gpgme_get_key): Check if there is more than one key
2857         listed, and return GPG_ERR_AMBIGUOUS_NAME in that case.
2858
2859         * util.h (_gpgme_decode_c_string): Change type of LEN argument to
2860         size_t.
2861         (_gpgme_decode_percent_string): Likewise.
2862         * conversion.c (_gpgme_decode_c_string): Likewise.
2863         (_gpgme_decode_percent_string): Likewise.
2864         (_gpgme_map_gnupg_error): Change type of I to unsigned int.
2865         * signers.c (gpgme_signers_clear): Likewise.
2866         (gpgme_signers_enum): New unsigned variable SEQNO, set to SEQ.
2867         Use SEQNO instead SEQ.
2868         * wait.c (fd_table_put): Change type of I and J to unsigned int.
2869         * wait-global.c (_gpgme_wait_global_event_cb): Change type of IDX
2870         to unsigned int.
2871         (gpgme_wait): Change type of I and IDX to unsigned int.
2872         * wait-private.c (_gpgme_wait_on_condition): Change type of IDX
2873         and I to unsigned int.
2874         * posix-io.c (_gpgme_io_close): Cast return value of macro DIM to
2875         int to suppress gcc warning.
2876         (_gpgme_io_set_close_notify): Likewise.
2877         (_gpgme_io_select): Change type of I to unsigned int.
2878         * engine.c (gpgme_get_engine_info): Change type of PROTO to
2879         unsigned int.
2880         * wait-user.c (_gpgme_user_io_cb_handler): Change type of IDX and
2881         I to unsigned int.
2882
2883 2003-07-29  Marcus Brinkmann  <marcus@g10code.de>
2884
2885         * decrypt-verify.c (decrypt_verify_status_handler): Expand silly
2886         and wrong expression.
2887         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
2888         * encrypt.c (encrypt_sym_status_handler): Likewise.
2889         * sign.c (sign_status_handler): Likewise.
2890         * verify.c (verify_status_handler): Likewise.
2891         * decrypt.c (decrypt_status_handler): Likewise.
2892
2893         * engine.c (gpgme_get_engine_info): Initialize NULL.
2894
2895 2003-07-23  Marcus Brinkmann  <marcus@g10code.de>
2896
2897         * gpgme-config.in (gpg_error_libs): Quote GPG_ERROR_CFLAGS and
2898         GPG_ERROR_LIBS when setting the corresponding variables.
2899         Reported by Stéphane Corthésy.
2900
2901 2003-07-22  Marcus Brinkmann  <marcus@g10code.de>
2902
2903         * engine-gpgsm.c (set_recipients): Move declaration of NEWLEN to
2904         the beginning of the block.
2905
2906 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
2907
2908         * data-mem.c (mem_write): Copy original buffer content.
2909
2910 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
2911
2912         * gpgme.h (gpgme_user_ids_release, gpgme_user_ids_append): Remove
2913         prototypes.
2914
2915 2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
2916
2917         * Makefile.am (AM_CPPFLAGS): Add @GPG_ERROR_CFLAGS@.
2918         * gpgme-config.in (gpg_error_libs, gpg_error_cflags): New variables.
2919         Print them.
2920
2921         * op-support.c (_gpgme_parse_inv_userid): Rename to
2922         _gpgme_parse_inv_recp and change to new datatype.
2923         * ops.h (_gpgme_parse_inv_key): Fix prototype.
2924         * gpgme.h (struct _gpgme_invalid_user_id): Rename to
2925         __gpgme_invalid_key.  Rename field ID to KEY.
2926         (gpgme_invalid_user_id_t): Rename to gpgme_invalid_key_t.
2927         (struct _gpgme_op_encrypt_result): Here, too.
2928         (struct _gpgme_op_sign_result): Likewise.
2929         * encrypt.c (struct op_data): Likewise.
2930         (release_op_data): Likewise.
2931         * sign.c (struct op_data): Likewise.
2932         (release_op_data): Likewise.
2933
2934         * posix-io.c (_gpgme_io_read): Save errno across debug calls.
2935         (_gpgme_io_write): Likewise.
2936         (_gpgme_io_pipe): Likewise.
2937         (_gpgme_io_select): Likewise.
2938
2939         * rungpg.c (struct engine_gpg): Remove arg_error.
2940         (add_arg): Don't set arg_error.
2941         (add_data): Likewise.
2942         (start): Don't check arg_error.
2943         (gpg_new): Check return value of add_arg.
2944         * verify.c (parse_notation): Free allocated memory at error.
2945
2946 2003-06-05  Marcus Brinkmann  <marcus@g10code.de>
2947
2948         Everywhere: Use libgpg-error error codes.
2949
2950         * Makefile.am (EXTRA_DIST): Remove mkerrors.
2951         (BUILT_SOURCES): Remove errors.c.
2952         (MOSTLYCLEANFILES): Likewise.
2953         (libgpgme_la_SOURCES): Likewise.  Add error.c.
2954         (errors.c): Remove target.
2955         * mkerrors: File removed.
2956         * error.c: New file.
2957
2958         * gpgme.h (gpgme_error_t): Change to type gpg_error_t.
2959         (gpgme_err_code_t, gpgme_err_source_t): New types.
2960         (gpgme_err_code, gpgme_err_source, gpgme_error, gpgme_err_make):
2961         New static inline functions.
2962         (gpgme_strsource, gpgme_err_code_from_errno,
2963         gpgme_err_code_to_errno, gpgme_err_make_from_errno,
2964         gpgme_error_from_errno): New prototypes.
2965
2966 2003-05-29  Marcus Brinkmann  <marcus@g10code.de>
2967
2968         * gpgme.h (gpgme_op_export_start): Change second arg to const char *.
2969         (gpgme_op_export): Likewise.
2970         (gpgme_op_export_ext_start): New prototype.
2971         (gpgme_op_export_ext): Likewise.
2972         * engine.h: Likewise for _gpgme_engine_op_export and
2973         _gpgme_engine_op_export_ext.
2974         * engine-backend.h (struct engine_ops): Change second argument of
2975         prototype of export to const char *, and add reserverd int as
2976         third argument.  Add prototype for export_ext.
2977         * engine.c (_gpgme_engine_op_export_ext): New function.
2978         (_gpgme_engine_op_export): Change second argument of prototype of
2979         export to const char *, and add reserverd int as third argument.
2980         * rungpg.c (gpg_export): Change second argument of prototype of
2981         export to const char *, and add reserverd int as third argument.
2982         (gpg_export_ext): New function.
2983         (gpg_keylist_ext): Break loop at error.
2984         (_gpgme_engine_ops_gpg): Add gpg_export_ext.
2985         * engine-gpgsm.c (gpgsm_export): Change second argument of
2986         prototype of export to const char *, and add reserverd int as
2987         third argument.
2988         (gpgsm_export_ext): New function.
2989         (_gpgme_engine_ops_gpgsm): Add gpgsm_export_ext.
2990         * export.c (export_start): Change second argument of prototype of
2991         export to const char *, and add reserverd int as third argument.
2992         (gpgme_op_export_start): Likewise.
2993         (export_ext_start): New function.
2994         (gpgme_op_export_ext_start): Likewise.
2995         (gpgme_op_export_ext): Likewise.
2996
2997         * gpgme.h (gpgme_keylist_mode_t): New type for anonymous enum.
2998         (gpgme_sigsum_t): New type for anonymous enum.
2999
3000         * encrypt-sign.c (encrypt_sign_start): Check for errors earlier,
3001         and return an error if RECP is not set.
3002
3003         * Makefile.am (libgpgme_la_SOURCES): Remove user-id.c.
3004         * user-id.c: Remove file.
3005         * ops.h: Remove prototype for _gpgme_user_ids_all_valid.
3006         * gpgme.h (gpgme_encrypt_flags_t): New type.
3007         (gpgme_op_encrypt_start): Change second parameter to type
3008         gpgme_key_t[], and add third parameter.
3009         (gpgme_op_encrypt): Likewise.
3010         (gpgme_op_encrypt_sign_start): Likewise.
3011         (gpgme_op_encrypt_sign): Likewise.
3012         * encrypt.c (encrypt_start): Likewise.
3013         (gpgme_op_encrypt_start): Likewise.
3014         (gpgme_op_encrypt): Likewise.  Pass flags to engine.
3015         * encrypt-sign.c (encrypt_sign_start): Likewise.
3016         (gpgme_op_encrypt_sign_start): Likewise.
3017         (gpgme_op_encrypt_sign): Likewise.
3018         * engine-backend.h (struct engine_ops): Likewise for prototypes of
3019         encrypt and encrypt_sign.
3020         * engine.h: Likewise for prototypes of _gpgme_engine_op_encrypt
3021         and _gpgme_engine_op_encrypt_sign.
3022         * engine.c (_gpgme_engine_op_encrypt): Likewise.
3023         (_gpgme_engine_op_encrypt_sign): Likewise.
3024         * rungpg.c (gpg_encrypt): Likewise.
3025         (gpg_encrypt_sign): Likewise.
3026         * rungpg.c (gpg_encrypt): Check flags for always trust option.
3027         * engine-gpgsm.c (gpgsm_encrypt): Likewise.
3028         (set_recipients): Rewritten to use keys instead user IDs.
3029         * rungpg.c (append_args_from_recipients): Rewritten to use keys
3030         instead user IDs.
3031         * encrypt.c (_gpgme_encrypt_status_handler): Change errors
3032         returned to GPGME_Invalid_Key and GPGME_General_Error.
3033
3034 2003-05-28  Marcus Brinkmann  <marcus@g10code.de>
3035
3036         * engine-gpgsm.c: Rename GpgsmObject to engine_gpgsm_t.
3037         (struct gpgsm_object_s): Rename to struct engine_gpgsm.
3038         * rungpg.c: Rename GpgObject to engine_gpg_t.
3039         (struct gpg_object_s): Rename to struct engine_gpg.
3040
3041         * context.h (struct gpgme_context): Change EngineObject to
3042         engine_object_t.
3043         (enum ctx_op_data_type): Rename to ctx_op_data_id_t.
3044         (ctx_op_data_t): New type.
3045         (struct gpgme_context): Use it.
3046         * ops.h (_gpgme_op_data_lookup): Use new type name.
3047         * op-support.c (_gpgme_op_data_lookup): Likewise.
3048         * engine.c: Rename EngineObject to engine_t in the file.  Also
3049         EngineStatusHandler to engine_status_handler_t,
3050         EngineCommandHandler to engine_command_handler_t and
3051         EngineColonLineHandler to engine_colon_line_handler.    
3052         * rungpg.c (start): Likewise.
3053         * engine-gpgsm.c: Likewise.
3054         * engine-backend.h (struct engine_ops): Likewise
3055         * engine.h (struct engine_object_s): Rename to struct engine.
3056         (EngineObject): Rename to engine_t.  Also everywhere else in the
3057         file.
3058         (EngineStatusHandler): Rename to engine_status_handler_t.
3059         (EngineColonLineHandler): Rename to engine_colon_line_handler_t.
3060         (EngineCommandHandler): Rename to engine_command_handler_t.
3061
3062         * engine-gpgsm.c (gpgsm_export): Fix bug in last change.
3063
3064         * Makefile.am (libgpgme_la_SOURCES): Remove recipient.c, add
3065         user-id.c.
3066         * gpgme.h (gpgme_recipients_t): Removed.
3067         (gpgme_recipients_new, gpgme_recipients_release,
3068         gpgme_recipients_add_name,
3069         gpgme_recipients_add_name_with_validity, gpgme_recipients_count,
3070         gpgme_recipients_enum_open, gpgme_recipients_enum_read,
3071         gpgme_recipients_enum_close): Removed.
3072         (gpgme_op_encrypt, gpgme_op_encrypt_start, gpgme_op_encrypt_sign,
3073         gpgme_op_encrypt_sign_start, gpgme_op_export_start,
3074         gpgme_op_export): Change second argument to gpgme_user_id_t.
3075         (gpgme_user_ids_release): New prototype.
3076         (gpgme_user_ids_append): Likewise.
3077         * ops.h (_gpgme_recipients_all_valid): Remove.
3078         (_gpgme_user_ids_all_valid): Add.
3079         * context.h (struct gpgme_recipients): Removed.
3080         * user-id.c: New file.
3081         * recipient.c: Removed file.
3082         * rungpg.c (append_args_from_recipients): Change last arg to
3083         gpgme_user_id_t.  Reimplement.
3084         (gpg_encrypt): Change second arg to gpgme_user_id_t.
3085         (gpg_encrypt_sign): Likewise.
3086         (gpg_export): Likewise.  Rewrite user ID list code.
3087         * engine.c (_gpgme_engine_op_encrypt): Change second arg to
3088         gpgme_user_id_t.
3089         (_gpgme_engine_op_encrypt_sign): Likewise.
3090         (_gpgme_engine_op_export): Likewise.
3091         * engine.h (_gpgme_engine_op_encrypt, _gpgme_engine_op_encrypt_sign,
3092         _gpgme_engine_op_export): Likewise.
3093         * engine-gpgsm.c (set_recipients): Likewise.  Rewrite loop code.
3094         (gpgsm_encrypt): Likewise.
3095         (gpgsm_export): Likewise.
3096         * engine-backend.h (struct engine_ops): Likewise for members
3097         ENCRYPT, ENCRYPT_SIGN and EXPORT.
3098         * export.c (export_start, gpgme_op_export_start, gpgme_op_export):
3099         Likewise.
3100         * encrypt.c (encrypt_start): Likewise.  Don't check for count of
3101         recipients.
3102         (gpgme_op_encrypt_start): Likewise.
3103         (gpgme_op_encrypt): Likewise.
3104         * encrypt-sign.c (encrypt_sign_start): Likewise.
3105         (gpgme_op_encrypt_sign): Likewise.
3106         (gpgme_op_encrypt_sign_start): Likewise.
3107
3108 2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
3109
3110         * gpgme.h (struct _gpgme_op_import_result): Add skipped_new_keys.
3111         * import.c (parse_import_res): Add skipped_new_keys parser.
3112
3113         * op-support.c (_gpgme_parse_inv_userid): Add missing break
3114         statements.
3115         * encrypt.c (gpgme_op_encrypt): Use gpgme_error_t instead of int.
3116
3117 2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
3118
3119         * encrypt.c (gpgme_op_encrypt_result): Use intermediate variable
3120         HOOK to avoid compiler warning.  Don't ask, you don't want to know.
3121         (_gpgme_encrypt_status_handler): Likewise.
3122         (_gpgme_op_encrypt_init_result): Likewise.
3123         * decrypt.c (gpgme_op_decrypt_result): Likewise.
3124         (_gpgme_decrypt_status_handler): Likewise.
3125         (_gpgme_op_decrypt_init_result): Likewise.
3126         * verify.c (gpgme_op_verify_result): Likewise.
3127         (_gpgme_verify_status_handler): Likewise.
3128         (_gpgme_op_verify_init_result): Likewise.
3129         * edit.c (edit_status_handler): Likewise.
3130         (command_handler): Likewise.
3131         (edit_start): Likewise.
3132         * genkey.c (gpgme_op_genkey_result): Likewise.
3133         (genkey_status_handler): Likewise.
3134         (genkey_start): Likewise.
3135         * import.c (gpgme_op_import_result): Likewise.
3136         (import_status_handler): Likewise.
3137         (_gpgme_op_import_start): Likewise.
3138         * trustlist.c (gpgme_op_trustlist_next): Likewise.
3139         (_gpgme_op_trustlist_event_cb): Likewise.
3140         (gpgme_op_trustlist_start): Likewise.
3141         * keylist.c (gpgme_op_keylist_result): Likewise.
3142         (keylist_colon_handler): Likewise.
3143         (keylist_status_handler): Likewise.
3144         (_gpgme_op_keylist_event_cb): Likewise.
3145         (gpgme_op_keylist_start): Likewise.
3146         (gpgme_op_keylist_ext_start): Likewise.
3147         (gpgme_op_keylist_next): Likewise.
3148         * passphrase.c (_gpgme_passphrase_status_handler): Likewise.
3149         (_gpgme_passphrase_command_handler_internal): Likewise.
3150         * sign.c (gpgme_op_sign_result): Likewise.
3151         (_gpgme_sign_status_handler): Likewise.
3152         (_gpgme_op_sign_init_result): Likewise.
3153
3154         * passphrase.c (_gpgme_passphrase_command_handler_internal): Fix
3155         access to pointer type.
3156
3157 2003-05-26  Marcus Brinkmann  <marcus@g10code.de>
3158
3159         * engine.h (EngineCommandHandler): Change last argument to int fd.
3160         * gpgme.h (gpgme_passphrase_cb_t): Rewritten to take parts of the
3161         description and fd.
3162         (gpgme_edit_cb_t): Change last argument to int fd.
3163         * ops.h (_gpgme_passphrase_command_handler_internal): New prototype.
3164         * passphrase.c: Include <assert.h>.
3165         (op_data_t): Rename userid_hint to uid_hint, remove last_pw_handle.
3166         (release_op_data): Check values before calling free.
3167         (_gpgme_passphrase_status_handler): Likewise.
3168         (_gpgme_passphrase_command_handler_internal): New function.
3169         (_gpgme_passphrase_command_handler): Rewritten.
3170         * edit.c (edit_status_handler): Pass -1 as fd argument.
3171         (command_handler): Update prototype.  New variable processed.  Use
3172         it to store return value of
3173         _gpgme_passphrase_command_handler_internal which is now used
3174         instead _gpgme_passphrase_command_handler.  Use it also to check
3175         if we should call the user's edit function.  Pass fd to user's
3176         edit function.
3177         * rungpg.c (struct gpg_object_s): Change type of cmd.cb_data to
3178         void *.
3179         (gpg_release): Check value before calling free.  Do not release
3180         cmd.cb_data.
3181         (command_cb): Function removed.
3182         (command_handler): New function.  Thus we don't use a data object
3183         for command handler stuff anymore, but handle it directly.  This
3184         allows proper error reporting (cancel of passphrase requests, for
3185         example).  Also all callbacks work via direct writes to the file
3186         descriptor (so that passphrases are not kept in insecure memory).
3187         (gpg_set_command_handler): Rewritten to use even more ugly hacks.
3188         (read_status): Check cmd.keyword before calling free.  Install
3189         command_handler as the I/O callback handler with GPG as private
3190         data.
3191
3192         * rungpg.c (gpg_new): Add --enable-progress-filter to gpg
3193         invocation.
3194         * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Rename to
3195         decrypt_verify_start.
3196         (gpgme_op_decrypt_verify_start): Call decrypt_verify_start.
3197         (gpgme_op_decrypt_verify): Likewise.
3198         * verify.c (verify_status_handler): New function that also calls
3199         progress status handler.
3200         (_gpgme_op_verify_start): Set status handler to verify_status_handler.
3201         Rename to (verify_start).
3202         (gpgme_op_verify_start): Call verify_start.
3203         (gpgme_op_verify): Likewise.
3204         * encrypt.c (encrypt_status_handler): New function.
3205         (_gpgme_encrypt_sym_status_handler): Call progress status handler.
3206         Make static.  Rename to encrypt_sym_status_handler.
3207         (encrypt_start): Set status handler to encrypt_sym_status_handler
3208         or encrypt_status_handler.
3209         * sign.c (sign_status_handler): New function.
3210         (sign_start): Set status handler to sign_status_handler.
3211         * decrypt.c (decrypt_status_handler): New function that also calls
3212         progress status handler.
3213         (decrypt_start): Set status handler to decrypt_status_handler.
3214         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
3215         * decrypt-verify.c (decrypt_verify_status_handler): Call
3216         _gpgme_progress_status_handler.
3217
3218         * conversion.c (_gpgme_decode_c_string): Add missing break
3219         statement.
3220
3221         * recipient.c (gpgme_recipients_add_name_with_validity): Add one
3222         to buffer to allocate.
3223
3224 2003-05-19  Marcus Brinkmann  <marcus@g10code.de>
3225
3226         * verify.c (parse_new_sig): Fix ERRSIG case.
3227         Submitted by Benjamin Lee <benjaminlee@users.sf.net>.
3228
3229 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
3230
3231         * gpgme.h: The following types are renamed.  The old name is kept
3232         as a deprecated typedef.
3233         (GpgmeCtx): Rename to gpgme_ctx_t.
3234         (GpgmeData): Rename to gpgme_data_t.
3235         (GpgmeRecipients): Rename to gpgme_recipients_t.
3236         (GpgmeError): Rename to gpgme_error_t.
3237         (GpgmeDataEncoding): Rename to gpgme_data_encoding_t.
3238         (GpgmePubKeyAlgo): Rename to gpgme_pubkey_algo_t.
3239         (GpgmeHashAlgo): Rename to gpgme_hash_algo_t.
3240         (GpgmeSigStat): Rename to gpgme_sig_stat_t.
3241         (GpgmeSigMode): Rename to gpgme_sig_mode_t.
3242         (GpgmeAttr): Rename to gpgme_attr_t.
3243         (GpgmeValidity): Rename to gpgme_validity_t.
3244         (GpgmeProtocol): Rename to gpgme_protocol_t.
3245         (GpgmeStatusCode): Rename to gpgme_status_code_t.
3246         (GpgmeEngineInfo): Rename to gpgme_engine_info_t.
3247         (GpgmeSubkey): Rename to gpgme_subkey_t.
3248         (GpgmeKeySig): Rename to gpgme_keysig_t.
3249         (GpgmeUserID): Rename to gpgme_user_id_t.
3250         (GpgmePassphraseCb): Rename to gpgme_passphrase_cb_t.
3251         (GpgmeProgressCb): Rename to gpgme_progress_cb_t.
3252         (GpgmeEditCb): Rename to gpgme_edit_cb_t.
3253         (GpgmeIOCb): Rename to gpgme_io_cb_t.
3254         (GpgmeRegisterIOCb): Rename to gpgme_register_io_cb_t.
3255         (GpgmeRemoveIOCb): Rename to gpgme_remove_io_cb_t.
3256         (GpgmeEventIO): Rename to gpgme_event_io_t.
3257         (GpgmeEventIOCb): Rename to gpgme_event_io_cb_t.
3258         (GpgmeIOCbs): Rename to gpgme_io_cbs.
3259         (gpgme_io_cbs_t): New type.
3260         (GpgmeDataReadCb): Rename to gpgme_data_read_cb_t.
3261         (GpgmeDataWriteCb): Rename to gpgme_data_write_cb_t.
3262         (GpgmeDataSeekCb): Rename to gpgme_data_seek_cb_t.
3263         (GpgmeDataReleaseCb): Rename to gpgme_data_release_cb_t.
3264         (GpgmeDataCbs): Rename to gpgme_data_cbs.
3265         (gpgme_data_cbs_t): New type.
3266         (GpgmeInvalidUserID): Rename to gpgme_invalid_user_id_t.
3267         (GpgmeEncryptResult): Rename to gpgme_encrypt_result_t.
3268         (GpgmeDecryptResult): Rename to gpgme_decrypt_result_t.
3269         (GpgmeNewSignature): Rename to gpgme_new_signature_t.
3270         (GpgmeSignResult): Rename to gpgme_sign_result_t.
3271         (GpgmeSigNotation): Rename to gpgme_sig_notation_t.
3272         (GpgmeSignature): Rename to gpgme_signature_t.
3273         (GpgmeVerifyResult): Rename to gpgme_verify_result_t.
3274         (GpgmeImportStatus): Rename to gpgme_import_status_t.
3275         (GpgmeImportResult): Rename to gpgme_import_result_t.
3276         (GpgmeGenKeyResult): Rename to gpgme_genkey_result_t.
3277         (GpgmeKeyListResult): Rename to gpgme_keylist_result_t.
3278         (GpgmeTrustItem): Rename to gpgme_trust_item_t.
3279         * gpgme.h (gpgme_deprecated_error_t): New type, swallowing macros
3280         GPGME_No_Recipients, GPGME_Invalid_Recipient and
3281         GPGME_No_Passphrase.
3282         * data.h (struct gpgme_data_s): Rename to struct gpgme_data.
3283         * context.h (struct gpgme_context_s): Rename to struct
3284         gpgme_context.
3285         (struct gpgme_recipients_s): Rename to gpgme_recipients.
3286
3287 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
3288
3289         * keylist.c (finish_key): Clear OPD->tmp_uid.
3290
3291 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
3292
3293         * verify.c (_gpgme_verify_status_handler): Return GPGME_No_Data
3294         for NODATA status without signatures.
3295
3296 2003-05-05  Marcus Brinkmann  <marcus@g10code.de>
3297
3298         * key.c (_gpgme_key_append_name): Use decoded string to parse user id.
3299         (_gpgme_key_add_sig): Likewise.
3300
3301 2003-05-04  Marcus Brinkmann  <marcus@g10code.de>
3302
3303         * context.h (struct gpgme_context_s): Remove member op_info.
3304
3305         * key.c (_gpgme_key_add_sig): Initialize SIG->uid.
3306
3307         * gpgme.h (GpgmeError): Add deprecated values for
3308         GPGME_Invalid_Type and GPGME_Invalid_Mode.
3309
3310 2003-04-30  Marcus Brinkmann  <marcus@g10code.de>
3311
3312         * gpgme.h (gpgme_get_op_info): Remove prototype.
3313         * ops.h (_gpgme_set_op_info,
3314         _gpgme_data_release_and_return_string, _gpgme_data_get_as_string,
3315         _gpgme_data_append, _gpgme_data_append_string,
3316         _gpgme_data_append_string_for_xml, _gpgme_data_append_for_xml,
3317         _gpgme_data_append_percentstring_for_xml): Likewise.
3318         (_gpgme_progress_status_handler): Change first arg to void *.
3319         * progress.c (_gpgme_progress_status_handler): Likewise.
3320         * conversion.c: Do not include <string.h>, <errno.h>, <ctype.h>,
3321         and <sys/types.h>, but <string.h>.
3322         (_gpgme_data_append): Remove function.
3323         (_gpgme_data_append_string): Likewise.
3324         (_gpgme_data_append_for_xml): Likewise.
3325         (_gpgme_data_append_string_for_xml): Likewise.
3326         (_gpgme_data_append_percentstring_for_xml): Likewise.
3327         * data-mem.c (_gpgme_data_get_as_string): Likewise.
3328         (_gpgme_data_release_and_return_string): Likewise.
3329         * gpgme.c (gpgme_get_op_info): Likewise.
3330         (_gpgme_set_op_info): Likewise.
3331
3332         * gpgme.h (struct _gpgme_key): New structure.
3333         (GpgmeKey): Define using _gpgme_key.
3334         (struct _gpgme_subkey): New structure.
3335         (GpgmeSubKey): New type.
3336         (struct _gpgme_key_sig): New structure.
3337         (GpgmeKeySig): New type.
3338         (struct _gpgme_user_id): New structure.
3339         (GpgmeUserID): New type.
3340         (struct _gpgme_op_keylist_result): New structure.
3341         (GpgmeKeyListResult): New type.
3342         (gpgme_op_keylist_result): New function.
3343         (gpgme_key_get_as_xml): Remove prototype.
3344         * context.h (struct gpgme_context_s): Remove members tmp_key,
3345         tmp_uid, key_cond and key_queue.
3346         (struct key_queue_item_s): Remove structure.
3347         (struct user_id_s): Remove structure.
3348         (struct gpgme_recipients_s): Replace with simple
3349         GpgmeUserID list.
3350         * gpgme.c (gpgme_release): Do not release CTX->tmp_key.
3351         * ops.h (_gpgme_key_add_subkey, _gpgme_key_append_name,
3352         _gpgme_key_add_sig, _gpgme_trust_item_new): New prototypes.
3353         * rungpg.c (command_cb): Return GpgmeError instead int.
3354         New variable ERR.  Use it to hold return value of cmd handler.
3355         (gpg_delete): Access fingerprint of key directly.
3356         (append_args_from_signers): Likewise.
3357         (gpg_edit): Likewise.
3358         (append_args_from_recipients): Use GpgmeUserID for recipient list.
3359         * engine-gpgsm.c: Do not include "key.h".
3360         (gpgsm_delete): Access fingerprint of key directly.
3361         (gpgsm_sign): Likewise.
3362         (set_recipients): Use GpgmeUserID for recipients.  Invert invalid
3363         user ID flag.
3364         * key.h: File removed.
3365         * key.c: Completely reworked to use exposed GpgmeKey data types.
3366         * keylist.c: Likewise.
3367         * recipient.c: Completely reworked to use GpgmeUserID.
3368
3369 2003-04-29  Marcus Brinkmann  <marcus@g10code.de>
3370
3371         * gpgme.h (gpgme_get_key): Remove force_update argument.
3372         * key-cache.c: File removed.
3373         * Makefile.am (libgpgme_la_SOURCES): Remove key-cache.c.
3374         * ops.h (_gpgme_key_cache_add, _gpgme_key_cache_get): Remove
3375         prototypes.
3376         * keylist.c (_gpgme_op_keylist_event_cb): Don't call
3377         _gpgme_key_cache_add.
3378         (gpgme_get_key): New function.
3379         * verify.c (gpgme_get_sig_key): Remove last argument to
3380         gpgme_get_key invocation.
3381
3382         * gpgme.h (struct _gpgme_trust_item): New structure.
3383         (GpgmeTrustItem): New type.
3384         (gpgme_trust_item_ref, gpgme_trust_item_unref): New prototypes.
3385         * context.h (struct trust_queue_item_s): Remove structure.
3386         (struct gpgme_context_s): Remove trust_queue member.
3387         * Makefile.am (libgpgme_la_SOURCES): Add trust-item.c.
3388         * trust-item.c: New file.
3389         * trustlist.c: Do not include <stdio.h> or <time.h>, but
3390         "gpgme.h".
3391         (struct trust_queue_item_s): Change to new type op_data_t.
3392         (trust_status_handler): Change first argument to void *.
3393         (trust_colon_handler): Likewise.
3394         (_gpgme_op_trustlist_event_cb): Use op_data_t type.
3395         (gpgme_op_trustlist_start): Use op_data_t and rework error
3396         handling.
3397         (gpgme_op_trustlist_next): Use op_data_t.
3398         (gpgme_trust_item_release): Remove function.
3399         (gpgme_trust_item_get_string_attr): Likewise.
3400         (gpgme_trust_item_get_int_attr): Likewise.
3401
3402         * verify.c (calc_sig_summary): Do not set GPGME_SIGSUM_SYS_ERROR
3403         for bad signatures.
3404
3405 2003-04-28  Marcus Brinkmann  <marcus@g10code.de>
3406
3407         * context.h: Remove OPDATA_VERIFY_COLLECTING.
3408         (struct gpgme_context_s): Remove member notation.
3409         * gpgme.h: Make enum for GPGME_KEYLIST_MODE_* values.
3410
3411         * gpgme.h (struct _gpgme_sig_notation): New structure.
3412         (GpgmeSigNotation): New type.
3413         (struct _gpgme_signature): New structure.
3414         (GpgmeSignature): New type.
3415         (struct _gpgme_op_verify_result): New structure.
3416         (GpgmeVerifyResult): New type.
3417         (gpgme_op_verify_result): New prototype.
3418         (gpgme_get_notation): Remove prototype.
3419         * ops.h (_gpgme_op_verify_init_result): New prototype.
3420         (_gpgme_verify_status_handler): Change first argument to void *.
3421         * util.h (_gpgme_decode_percent_string, _gpgme_map_gnupg_error):
3422         New prototypes.
3423         * conversion.c (_gpgme_decode_percent_string): New function.
3424         (gnupg_errors): New static global.
3425         (_gpgme_map_gnupg_error): New function.
3426         * gpgme.c (gpgme_release): Don't release CTX->notation.
3427         (gpgme_get_notation): Remove function.
3428         * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Call
3429         _gpgme_op_verify_init_result.
3430         * verify.c: Do not include <stdio.h>, <assert.h> and "key.h", but
3431         do include "gpgme.h".
3432         (struct verify_result): Replace with ...
3433         (op_data_t): ... this type.
3434         (release_verify_result): Remove function.
3435         (release_op_data): New function.
3436         (is_token): Remove function.
3437         (skip_token): Remove function.
3438         (copy_token): Remove function.
3439         (gpgme_op_verify_result): New function.
3440         (calc_sig_summary): Rewritten.
3441         (finish_sig): Remove function.
3442         (parse_new_sig): New function.
3443         (parse_valid_sig): New function.
3444         (parse_notation): New function.
3445         (parse_trust): New function.
3446         (parse_error): New function.
3447         (_gpgme_verify_status_handler): Rewritten.  Change first argument
3448         to void *.
3449         (_gpgme_op_verify_start): Rework error handling.  Call