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