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