a483650e131a0c8c4d281d90f9086ebeaa9dcb2d
[gpgme.git] / gpgme / ChangeLog
1 2003-07-22  Marcus Brinkmann  <marcus@g10code.de>
2
3         * engine-gpgsm.c (set_recipients): Move declaration of NEWLEN to
4         the beginning of the block.
5
6 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
7
8         * data-mem.c (mem_write): Copy original buffer content.
9
10 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
11
12         * gpgme.h (gpgme_user_ids_release, gpgme_user_ids_append): Remove
13         prototypes.
14
15 2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
16
17         * Makefile.am (AM_CPPFLAGS): Add @GPG_ERROR_CFLAGS@.
18         * gpgme-config.in (gpg_error_libs, gpg_error_cflags): New variables.
19         Print them.
20
21         * op-support.c (_gpgme_parse_inv_userid): Rename to
22         _gpgme_parse_inv_recp and change to new datatype.
23         * ops.h (_gpgme_parse_inv_key): Fix prototype.
24         * gpgme.h (struct _gpgme_invalid_user_id): Rename to
25         __gpgme_invalid_key.  Rename field ID to KEY.
26         (gpgme_invalid_user_id_t): Rename to gpgme_invalid_key_t.
27         (struct _gpgme_op_encrypt_result): Here, too.
28         (struct _gpgme_op_sign_result): Likewise.
29         * encrypt.c (struct op_data): Likewise.
30         (release_op_data): Likewise.
31         * sign.c (struct op_data): Likewise.
32         (release_op_data): Likewise.
33
34         * posix-io.c (_gpgme_io_read): Save errno across debug calls.
35         (_gpgme_io_write): Likewise.
36         (_gpgme_io_pipe): Likewise.
37         (_gpgme_io_select): Likewise.
38
39         * rungpg.c (struct engine_gpg): Remove arg_error.
40         (add_arg): Don't set arg_error.
41         (add_data): Likewise.
42         (start): Don't check arg_error.
43         (gpg_new): Check return value of add_arg.
44         * verify.c (parse_notation): Free allocated memory at error.
45
46 2003-06-05  Marcus Brinkmann  <marcus@g10code.de>
47
48         Everywhere: Use libgpg-error error codes.
49
50         * Makefile.am (EXTRA_DIST): Remove mkerrors.
51         (BUILT_SOURCES): Remove errors.c.
52         (MOSTLYCLEANFILES): Likewise.
53         (libgpgme_la_SOURCES): Likewise.  Add error.c.
54         (errors.c): Remove target.
55         * mkerrors: File removed.
56         * error.c: New file.
57
58         * gpgme.h (gpgme_error_t): Change to type gpg_error_t.
59         (gpgme_err_code_t, gpgme_err_source_t): New types.
60         (gpgme_err_code, gpgme_err_source, gpgme_error, gpgme_err_make):
61         New static inline functions.
62         (gpgme_strsource, gpgme_err_code_from_errno,
63         gpgme_err_code_to_errno, gpgme_err_make_from_errno,
64         gpgme_error_from_errno): New prototypes.
65
66 2003-05-29  Marcus Brinkmann  <marcus@g10code.de>
67
68         * gpgme.h (gpgme_op_export_start): Change second arg to const char *.
69         (gpgme_op_export): Likewise.
70         (gpgme_op_export_ext_start): New prototype.
71         (gpgme_op_export_ext): Likewise.
72         * engine.h: Likewise for _gpgme_engine_op_export and
73         _gpgme_engine_op_export_ext.
74         * engine-backend.h (struct engine_ops): Change second argument of
75         prototype of export to const char *, and add reserverd int as
76         third argument.  Add prototype for export_ext.
77         * engine.c (_gpgme_engine_op_export_ext): New function.
78         (_gpgme_engine_op_export): Change second argument of prototype of
79         export to const char *, and add reserverd int as third argument.
80         * rungpg.c (gpg_export): Change second argument of prototype of
81         export to const char *, and add reserverd int as third argument.
82         (gpg_export_ext): New function.
83         (gpg_keylist_ext): Break loop at error.
84         (_gpgme_engine_ops_gpg): Add gpg_export_ext.
85         * engine-gpgsm.c (gpgsm_export): Change second argument of
86         prototype of export to const char *, and add reserverd int as
87         third argument.
88         (gpgsm_export_ext): New function.
89         (_gpgme_engine_ops_gpgsm): Add gpgsm_export_ext.
90         * export.c (export_start): Change second argument of prototype of
91         export to const char *, and add reserverd int as third argument.
92         (gpgme_op_export_start): Likewise.
93         (export_ext_start): New function.
94         (gpgme_op_export_ext_start): Likewise.
95         (gpgme_op_export_ext): Likewise.
96
97         * gpgme.h (gpgme_keylist_mode_t): New type for anonymous enum.
98         (gpgme_sigsum_t): New type for anonymous enum.
99
100         * encrypt-sign.c (encrypt_sign_start): Check for errors earlier,
101         and return an error if RECP is not set.
102
103         * Makefile.am (libgpgme_la_SOURCES): Remove user-id.c.
104         * user-id.c: Remove file.
105         * ops.h: Remove prototype for _gpgme_user_ids_all_valid.
106         * gpgme.h (gpgme_encrypt_flags_t): New type.
107         (gpgme_op_encrypt_start): Change second parameter to type
108         gpgme_key_t[], and add third parameter.
109         (gpgme_op_encrypt): Likewise.
110         (gpgme_op_encrypt_sign_start): Likewise.
111         (gpgme_op_encrypt_sign): Likewise.
112         * encrypt.c (encrypt_start): Likewise.
113         (gpgme_op_encrypt_start): Likewise.
114         (gpgme_op_encrypt): Likewise.  Pass flags to engine.
115         * encrypt-sign.c (encrypt_sign_start): Likewise.
116         (gpgme_op_encrypt_sign_start): Likewise.
117         (gpgme_op_encrypt_sign): Likewise.
118         * engine-backend.h (struct engine_ops): Likewise for prototypes of
119         encrypt and encrypt_sign.
120         * engine.h: Likewise for prototypes of _gpgme_engine_op_encrypt
121         and _gpgme_engine_op_encrypt_sign.
122         * engine.c (_gpgme_engine_op_encrypt): Likewise.
123         (_gpgme_engine_op_encrypt_sign): Likewise.
124         * rungpg.c (gpg_encrypt): Likewise.
125         (gpg_encrypt_sign): Likewise.
126         * rungpg.c (gpg_encrypt): Check flags for always trust option.
127         * engine-gpgsm.c (gpgsm_encrypt): Likewise.
128         (set_recipients): Rewritten to use keys instead user IDs.
129         * rungpg.c (append_args_from_recipients): Rewritten to use keys
130         instead user IDs.
131         * encrypt.c (_gpgme_encrypt_status_handler): Change errors
132         returned to GPGME_Invalid_Key and GPGME_General_Error.
133
134 2003-05-28  Marcus Brinkmann  <marcus@g10code.de>
135
136         * engine-gpgsm.c: Rename GpgsmObject to engine_gpgsm_t.
137         (struct gpgsm_object_s): Rename to struct engine_gpgsm.
138         * rungpg.c: Rename GpgObject to engine_gpg_t.
139         (struct gpg_object_s): Rename to struct engine_gpg.
140
141         * context.h (struct gpgme_context): Change EngineObject to
142         engine_object_t.
143         (enum ctx_op_data_type): Rename to ctx_op_data_id_t.
144         (ctx_op_data_t): New type.
145         (struct gpgme_context): Use it.
146         * ops.h (_gpgme_op_data_lookup): Use new type name.
147         * op-support.c (_gpgme_op_data_lookup): Likewise.
148         * engine.c: Rename EngineObject to engine_t in the file.  Also
149         EngineStatusHandler to engine_status_handler_t,
150         EngineCommandHandler to engine_command_handler_t and
151         EngineColonLineHandler to engine_colon_line_handler.    
152         * rungpg.c (start): Likewise.
153         * engine-gpgsm.c: Likewise.
154         * engine-backend.h (struct engine_ops): Likewise
155         * engine.h (struct engine_object_s): Rename to struct engine.
156         (EngineObject): Rename to engine_t.  Also everywhere else in the
157         file.
158         (EngineStatusHandler): Rename to engine_status_handler_t.
159         (EngineColonLineHandler): Rename to engine_colon_line_handler_t.
160         (EngineCommandHandler): Rename to engine_command_handler_t.
161
162         * engine-gpgsm.c (gpgsm_export): Fix bug in last change.
163
164         * Makefile.am (libgpgme_la_SOURCES): Remove recipient.c, add
165         user-id.c.
166         * gpgme.h (gpgme_recipients_t): Removed.
167         (gpgme_recipients_new, gpgme_recipients_release,
168         gpgme_recipients_add_name,
169         gpgme_recipients_add_name_with_validity, gpgme_recipients_count,
170         gpgme_recipients_enum_open, gpgme_recipients_enum_read,
171         gpgme_recipients_enum_close): Removed.
172         (gpgme_op_encrypt, gpgme_op_encrypt_start, gpgme_op_encrypt_sign,
173         gpgme_op_encrypt_sign_start, gpgme_op_export_start,
174         gpgme_op_export): Change second argument to gpgme_user_id_t.
175         (gpgme_user_ids_release): New prototype.
176         (gpgme_user_ids_append): Likewise.
177         * ops.h (_gpgme_recipients_all_valid): Remove.
178         (_gpgme_user_ids_all_valid): Add.
179         * context.h (struct gpgme_recipients): Removed.
180         * user-id.c: New file.
181         * recipient.c: Removed file.
182         * rungpg.c (append_args_from_recipients): Change last arg to
183         gpgme_user_id_t.  Reimplement.
184         (gpg_encrypt): Change second arg to gpgme_user_id_t.
185         (gpg_encrypt_sign): Likewise.
186         (gpg_export): Likewise.  Rewrite user ID list code.
187         * engine.c (_gpgme_engine_op_encrypt): Change second arg to
188         gpgme_user_id_t.
189         (_gpgme_engine_op_encrypt_sign): Likewise.
190         (_gpgme_engine_op_export): Likewise.
191         * engine.h (_gpgme_engine_op_encrypt, _gpgme_engine_op_encrypt_sign,
192         _gpgme_engine_op_export): Likewise.
193         * engine-gpgsm.c (set_recipients): Likewise.  Rewrite loop code.
194         (gpgsm_encrypt): Likewise.
195         (gpgsm_export): Likewise.
196         * engine-backend.h (struct engine_ops): Likewise for members
197         ENCRYPT, ENCRYPT_SIGN and EXPORT.
198         * export.c (export_start, gpgme_op_export_start, gpgme_op_export):
199         Likewise.
200         * encrypt.c (encrypt_start): Likewise.  Don't check for count of
201         recipients.
202         (gpgme_op_encrypt_start): Likewise.
203         (gpgme_op_encrypt): Likewise.
204         * encrypt-sign.c (encrypt_sign_start): Likewise.
205         (gpgme_op_encrypt_sign): Likewise.
206         (gpgme_op_encrypt_sign_start): Likewise.
207
208 2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
209
210         * gpgme.h (struct _gpgme_op_import_result): Add skipped_new_keys.
211         * import.c (parse_import_res): Add skipped_new_keys parser.
212
213         * op-support.c (_gpgme_parse_inv_userid): Add missing break
214         statements.
215         * encrypt.c (gpgme_op_encrypt): Use gpgme_error_t instead of int.
216
217 2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
218
219         * encrypt.c (gpgme_op_encrypt_result): Use intermediate variable
220         HOOK to avoid compiler warning.  Don't ask, you don't want to know.
221         (_gpgme_encrypt_status_handler): Likewise.
222         (_gpgme_op_encrypt_init_result): Likewise.
223         * decrypt.c (gpgme_op_decrypt_result): Likewise.
224         (_gpgme_decrypt_status_handler): Likewise.
225         (_gpgme_op_decrypt_init_result): Likewise.
226         * verify.c (gpgme_op_verify_result): Likewise.
227         (_gpgme_verify_status_handler): Likewise.
228         (_gpgme_op_verify_init_result): Likewise.
229         * edit.c (edit_status_handler): Likewise.
230         (command_handler): Likewise.
231         (edit_start): Likewise.
232         * genkey.c (gpgme_op_genkey_result): Likewise.
233         (genkey_status_handler): Likewise.
234         (genkey_start): Likewise.
235         * import.c (gpgme_op_import_result): Likewise.
236         (import_status_handler): Likewise.
237         (_gpgme_op_import_start): Likewise.
238         * trustlist.c (gpgme_op_trustlist_next): Likewise.
239         (_gpgme_op_trustlist_event_cb): Likewise.
240         (gpgme_op_trustlist_start): Likewise.
241         * keylist.c (gpgme_op_keylist_result): Likewise.
242         (keylist_colon_handler): Likewise.
243         (keylist_status_handler): Likewise.
244         (_gpgme_op_keylist_event_cb): Likewise.
245         (gpgme_op_keylist_start): Likewise.
246         (gpgme_op_keylist_ext_start): Likewise.
247         (gpgme_op_keylist_next): Likewise.
248         * passphrase.c (_gpgme_passphrase_status_handler): Likewise.
249         (_gpgme_passphrase_command_handler_internal): Likewise.
250         * sign.c (gpgme_op_sign_result): Likewise.
251         (_gpgme_sign_status_handler): Likewise.
252         (_gpgme_op_sign_init_result): Likewise.
253
254         * passphrase.c (_gpgme_passphrase_command_handler_internal): Fix
255         access to pointer type.
256
257 2003-05-26  Marcus Brinkmann  <marcus@g10code.de>
258
259         * engine.h (EngineCommandHandler): Change last argument to int fd.
260         * gpgme.h (gpgme_passphrase_cb_t): Rewritten to take parts of the
261         description and fd.
262         (gpgme_edit_cb_t): Change last argument to int fd.
263         * ops.h (_gpgme_passphrase_command_handler_internal): New prototype.
264         * passphrase.c: Include <assert.h>.
265         (op_data_t): Rename userid_hint to uid_hint, remove last_pw_handle.
266         (release_op_data): Check values before calling free.
267         (_gpgme_passphrase_status_handler): Likewise.
268         (_gpgme_passphrase_command_handler_internal): New function.
269         (_gpgme_passphrase_command_handler): Rewritten.
270         * edit.c (edit_status_handler): Pass -1 as fd argument.
271         (command_handler): Update prototype.  New variable processed.  Use
272         it to store return value of
273         _gpgme_passphrase_command_handler_internal which is now used
274         instead _gpgme_passphrase_command_handler.  Use it also to check
275         if we should call the user's edit function.  Pass fd to user's
276         edit function.
277         * rungpg.c (struct gpg_object_s): Change type of cmd.cb_data to
278         void *.
279         (gpg_release): Check value before calling free.  Do not release
280         cmd.cb_data.
281         (command_cb): Function removed.
282         (command_handler): New function.  Thus we don't use a data object
283         for command handler stuff anymore, but handle it directly.  This
284         allows proper error reporting (cancel of passphrase requests, for
285         example).  Also all callbacks work via direct writes to the file
286         descriptor (so that passphrases are not kept in insecure memory).
287         (gpg_set_command_handler): Rewritten to use even more ugly hacks.
288         (read_status): Check cmd.keyword before calling free.  Install
289         command_handler as the I/O callback handler with GPG as private
290         data.
291
292         * rungpg.c (gpg_new): Add --enable-progress-filter to gpg
293         invocation.
294         * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Rename to
295         decrypt_verify_start.
296         (gpgme_op_decrypt_verify_start): Call decrypt_verify_start.
297         (gpgme_op_decrypt_verify): Likewise.
298         * verify.c (verify_status_handler): New function that also calls
299         progress status handler.
300         (_gpgme_op_verify_start): Set status handler to verify_status_handler.
301         Rename to (verify_start).
302         (gpgme_op_verify_start): Call verify_start.
303         (gpgme_op_verify): Likewise.
304         * encrypt.c (encrypt_status_handler): New function.
305         (_gpgme_encrypt_sym_status_handler): Call progress status handler.
306         Make static.  Rename to encrypt_sym_status_handler.
307         (encrypt_start): Set status handler to encrypt_sym_status_handler
308         or encrypt_status_handler.
309         * sign.c (sign_status_handler): New function.
310         (sign_start): Set status handler to sign_status_handler.
311         * decrypt.c (decrypt_status_handler): New function that also calls
312         progress status handler.
313         (decrypt_start): Set status handler to decrypt_status_handler.
314         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
315         * decrypt-verify.c (decrypt_verify_status_handler): Call
316         _gpgme_progress_status_handler.
317
318         * conversion.c (_gpgme_decode_c_string): Add missing break
319         statement.
320
321         * recipient.c (gpgme_recipients_add_name_with_validity): Add one
322         to buffer to allocate.
323
324 2003-05-19  Marcus Brinkmann  <marcus@g10code.de>
325
326         * verify.c (parse_new_sig): Fix ERRSIG case.
327         Submitted by Benjamin Lee <benjaminlee@users.sf.net>.
328
329 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
330
331         * gpgme.h: The following types are renamed.  The old name is kept
332         as a deprecated typedef.
333         (GpgmeCtx): Rename to gpgme_ctx_t.
334         (GpgmeData): Rename to gpgme_data_t.
335         (GpgmeRecipients): Rename to gpgme_recipients_t.
336         (GpgmeError): Rename to gpgme_error_t.
337         (GpgmeDataEncoding): Rename to gpgme_data_encoding_t.
338         (GpgmePubKeyAlgo): Rename to gpgme_pubkey_algo_t.
339         (GpgmeHashAlgo): Rename to gpgme_hash_algo_t.
340         (GpgmeSigStat): Rename to gpgme_sig_stat_t.
341         (GpgmeSigMode): Rename to gpgme_sig_mode_t.
342         (GpgmeAttr): Rename to gpgme_attr_t.
343         (GpgmeValidity): Rename to gpgme_validity_t.
344         (GpgmeProtocol): Rename to gpgme_protocol_t.
345         (GpgmeStatusCode): Rename to gpgme_status_code_t.
346         (GpgmeEngineInfo): Rename to gpgme_engine_info_t.
347         (GpgmeSubkey): Rename to gpgme_subkey_t.
348         (GpgmeKeySig): Rename to gpgme_keysig_t.
349         (GpgmeUserID): Rename to gpgme_user_id_t.
350         (GpgmePassphraseCb): Rename to gpgme_passphrase_cb_t.
351         (GpgmeProgressCb): Rename to gpgme_progress_cb_t.
352         (GpgmeEditCb): Rename to gpgme_edit_cb_t.
353         (GpgmeIOCb): Rename to gpgme_io_cb_t.
354         (GpgmeRegisterIOCb): Rename to gpgme_register_io_cb_t.
355         (GpgmeRemoveIOCb): Rename to gpgme_remove_io_cb_t.
356         (GpgmeEventIO): Rename to gpgme_event_io_t.
357         (GpgmeEventIOCb): Rename to gpgme_event_io_cb_t.
358         (GpgmeIOCbs): Rename to gpgme_io_cbs.
359         (gpgme_io_cbs_t): New type.
360         (GpgmeDataReadCb): Rename to gpgme_data_read_cb_t.
361         (GpgmeDataWriteCb): Rename to gpgme_data_write_cb_t.
362         (GpgmeDataSeekCb): Rename to gpgme_data_seek_cb_t.
363         (GpgmeDataReleaseCb): Rename to gpgme_data_release_cb_t.
364         (GpgmeDataCbs): Rename to gpgme_data_cbs.
365         (gpgme_data_cbs_t): New type.
366         (GpgmeInvalidUserID): Rename to gpgme_invalid_user_id_t.
367         (GpgmeEncryptResult): Rename to gpgme_encrypt_result_t.
368         (GpgmeDecryptResult): Rename to gpgme_decrypt_result_t.
369         (GpgmeNewSignature): Rename to gpgme_new_signature_t.
370         (GpgmeSignResult): Rename to gpgme_sign_result_t.
371         (GpgmeSigNotation): Rename to gpgme_sig_notation_t.
372         (GpgmeSignature): Rename to gpgme_signature_t.
373         (GpgmeVerifyResult): Rename to gpgme_verify_result_t.
374         (GpgmeImportStatus): Rename to gpgme_import_status_t.
375         (GpgmeImportResult): Rename to gpgme_import_result_t.
376         (GpgmeGenKeyResult): Rename to gpgme_genkey_result_t.
377         (GpgmeKeyListResult): Rename to gpgme_keylist_result_t.
378         (GpgmeTrustItem): Rename to gpgme_trust_item_t.
379         * gpgme.h (gpgme_deprecated_error_t): New type, swallowing macros
380         GPGME_No_Recipients, GPGME_Invalid_Recipient and
381         GPGME_No_Passphrase.
382         * data.h (struct gpgme_data_s): Rename to struct gpgme_data.
383         * context.h (struct gpgme_context_s): Rename to struct
384         gpgme_context.
385         (struct gpgme_recipients_s): Rename to gpgme_recipients.
386
387 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
388
389         * keylist.c (finish_key): Clear OPD->tmp_uid.
390
391 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
392
393         * verify.c (_gpgme_verify_status_handler): Return GPGME_No_Data
394         for NODATA status without signatures.
395
396 2003-05-05  Marcus Brinkmann  <marcus@g10code.de>
397
398         * key.c (_gpgme_key_append_name): Use decoded string to parse user id.
399         (_gpgme_key_add_sig): Likewise.
400
401 2003-05-04  Marcus Brinkmann  <marcus@g10code.de>
402
403         * context.h (struct gpgme_context_s): Remove member op_info.
404
405         * key.c (_gpgme_key_add_sig): Initialize SIG->uid.
406
407         * gpgme.h (GpgmeError): Add deprecated values for
408         GPGME_Invalid_Type and GPGME_Invalid_Mode.
409
410 2003-04-30  Marcus Brinkmann  <marcus@g10code.de>
411
412         * gpgme.h (gpgme_get_op_info): Remove prototype.
413         * ops.h (_gpgme_set_op_info,
414         _gpgme_data_release_and_return_string, _gpgme_data_get_as_string,
415         _gpgme_data_append, _gpgme_data_append_string,
416         _gpgme_data_append_string_for_xml, _gpgme_data_append_for_xml,
417         _gpgme_data_append_percentstring_for_xml): Likewise.
418         (_gpgme_progress_status_handler): Change first arg to void *.
419         * progress.c (_gpgme_progress_status_handler): Likewise.
420         * conversion.c: Do not include <string.h>, <errno.h>, <ctype.h>,
421         and <sys/types.h>, but <string.h>.
422         (_gpgme_data_append): Remove function.
423         (_gpgme_data_append_string): Likewise.
424         (_gpgme_data_append_for_xml): Likewise.
425         (_gpgme_data_append_string_for_xml): Likewise.
426         (_gpgme_data_append_percentstring_for_xml): Likewise.
427         * data-mem.c (_gpgme_data_get_as_string): Likewise.
428         (_gpgme_data_release_and_return_string): Likewise.
429         * gpgme.c (gpgme_get_op_info): Likewise.
430         (_gpgme_set_op_info): Likewise.
431
432         * gpgme.h (struct _gpgme_key): New structure.
433         (GpgmeKey): Define using _gpgme_key.
434         (struct _gpgme_subkey): New structure.
435         (GpgmeSubKey): New type.
436         (struct _gpgme_key_sig): New structure.
437         (GpgmeKeySig): New type.
438         (struct _gpgme_user_id): New structure.
439         (GpgmeUserID): New type.
440         (struct _gpgme_op_keylist_result): New structure.
441         (GpgmeKeyListResult): New type.
442         (gpgme_op_keylist_result): New function.
443         (gpgme_key_get_as_xml): Remove prototype.
444         * context.h (struct gpgme_context_s): Remove members tmp_key,
445         tmp_uid, key_cond and key_queue.
446         (struct key_queue_item_s): Remove structure.
447         (struct user_id_s): Remove structure.
448         (struct gpgme_recipients_s): Replace with simple
449         GpgmeUserID list.
450         * gpgme.c (gpgme_release): Do not release CTX->tmp_key.
451         * ops.h (_gpgme_key_add_subkey, _gpgme_key_append_name,
452         _gpgme_key_add_sig, _gpgme_trust_item_new): New prototypes.
453         * rungpg.c (command_cb): Return GpgmeError instead int.
454         New variable ERR.  Use it to hold return value of cmd handler.
455         (gpg_delete): Access fingerprint of key directly.
456         (append_args_from_signers): Likewise.
457         (gpg_edit): Likewise.
458         (append_args_from_recipients): Use GpgmeUserID for recipient list.
459         * engine-gpgsm.c: Do not include "key.h".
460         (gpgsm_delete): Access fingerprint of key directly.
461         (gpgsm_sign): Likewise.
462         (set_recipients): Use GpgmeUserID for recipients.  Invert invalid
463         user ID flag.
464         * key.h: File removed.
465         * key.c: Completely reworked to use exposed GpgmeKey data types.
466         * keylist.c: Likewise.
467         * recipient.c: Completely reworked to use GpgmeUserID.
468
469 2003-04-29  Marcus Brinkmann  <marcus@g10code.de>
470
471         * gpgme.h (gpgme_get_key): Remove force_update argument.
472         * key-cache.c: File removed.
473         * Makefile.am (libgpgme_la_SOURCES): Remove key-cache.c.
474         * ops.h (_gpgme_key_cache_add, _gpgme_key_cache_get): Remove
475         prototypes.
476         * keylist.c (_gpgme_op_keylist_event_cb): Don't call
477         _gpgme_key_cache_add.
478         (gpgme_get_key): New function.
479         * verify.c (gpgme_get_sig_key): Remove last argument to
480         gpgme_get_key invocation.
481
482         * gpgme.h (struct _gpgme_trust_item): New structure.
483         (GpgmeTrustItem): New type.
484         (gpgme_trust_item_ref, gpgme_trust_item_unref): New prototypes.
485         * context.h (struct trust_queue_item_s): Remove structure.
486         (struct gpgme_context_s): Remove trust_queue member.
487         * Makefile.am (libgpgme_la_SOURCES): Add trust-item.c.
488         * trust-item.c: New file.
489         * trustlist.c: Do not include <stdio.h> or <time.h>, but
490         "gpgme.h".
491         (struct trust_queue_item_s): Change to new type op_data_t.
492         (trust_status_handler): Change first argument to void *.
493         (trust_colon_handler): Likewise.
494         (_gpgme_op_trustlist_event_cb): Use op_data_t type.
495         (gpgme_op_trustlist_start): Use op_data_t and rework error
496         handling.
497         (gpgme_op_trustlist_next): Use op_data_t.
498         (gpgme_trust_item_release): Remove function.
499         (gpgme_trust_item_get_string_attr): Likewise.
500         (gpgme_trust_item_get_int_attr): Likewise.
501
502         * verify.c (calc_sig_summary): Do not set GPGME_SIGSUM_SYS_ERROR
503         for bad signatures.
504
505 2003-04-28  Marcus Brinkmann  <marcus@g10code.de>
506
507         * context.h: Remove OPDATA_VERIFY_COLLECTING.
508         (struct gpgme_context_s): Remove member notation.
509         * gpgme.h: Make enum for GPGME_KEYLIST_MODE_* values.
510
511         * gpgme.h (struct _gpgme_sig_notation): New structure.
512         (GpgmeSigNotation): New type.
513         (struct _gpgme_signature): New structure.
514         (GpgmeSignature): New type.
515         (struct _gpgme_op_verify_result): New structure.
516         (GpgmeVerifyResult): New type.
517         (gpgme_op_verify_result): New prototype.
518         (gpgme_get_notation): Remove prototype.
519         * ops.h (_gpgme_op_verify_init_result): New prototype.
520         (_gpgme_verify_status_handler): Change first argument to void *.
521         * util.h (_gpgme_decode_percent_string, _gpgme_map_gnupg_error):
522         New prototypes.
523         * conversion.c (_gpgme_decode_percent_string): New function.
524         (gnupg_errors): New static global.
525         (_gpgme_map_gnupg_error): New function.
526         * gpgme.c (gpgme_release): Don't release CTX->notation.
527         (gpgme_get_notation): Remove function.
528         * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Call
529         _gpgme_op_verify_init_result.
530         * verify.c: Do not include <stdio.h>, <assert.h> and "key.h", but
531         do include "gpgme.h".
532         (struct verify_result): Replace with ...
533         (op_data_t): ... this type.
534         (release_verify_result): Remove function.
535         (release_op_data): New function.
536         (is_token): Remove function.
537         (skip_token): Remove function.
538         (copy_token): Remove function.
539         (gpgme_op_verify_result): New function.
540         (calc_sig_summary): Rewritten.
541         (finish_sig): Remove function.
542         (parse_new_sig): New function.
543         (parse_valid_sig): New function.
544         (parse_notation): New function.
545         (parse_trust): New function.
546         (parse_error): New function.
547         (_gpgme_verify_status_handler): Rewritten.  Change first argument
548         to void *.
549         (_gpgme_op_verify_start): Rework error handling.  Call
550         _gpgme_op_verify_init_result.
551         (gpgme_op_verify): Do not release or clear CTX->notation.
552         (gpgme_get_sig_status): Rewritten.
553         (gpgme_get_sig_string_attr): Likewise.
554         (gpgme_get_sig_ulong_attr): Likewise.
555         (gpgme_get_sig_key): Likewise.
556
557         * gpgme.h (struct _gpgme_op_decrypt_result): New structure.
558         (GpgmeDecryptResult): New type.
559         (gpgme_op_decrypt_result): New prototype.
560         * ops.h (_gpgme_op_decrypt_init_result): New prototype.
561         (_gpgme_decrypt_status_handler): Fix prototype.
562         (_gpgme_decrypt_start): Remove prototype.
563         * decrypt-verify.c: Do not include <stdio.h>, <stdlib.h>,
564         <string.h> and <assert.h>, "util.h" and "context.h", but
565         "gpgme.h".
566         (decrypt_verify_status_handler): Change first argument to void *,
567         and rework error handling.
568         (_gpgme_op_decrypt_verify_start): New function.
569         (gpgme_op_decrypt_verify_start): Rewrite using
570         _gpgme_op_decrypt_verify_start.
571         (gpgme_op_decrypt_verify): Likewise.
572         * decrypt.c: Include <string.h>, "gpgme.h" and "util.h".
573         (struct decrypt_result): Change to typedef op_data_t, rewritten.
574         (is_token): Remove function.
575         (release_op_data): New function.
576         (skip_token): Remove function.
577         (gpgme_op_decrypt_result): New function.
578         (_gpgme_decrypt_status_handler): Change first argument to void *.
579         Rework error handling.
580         (_gpgme_decrypt_start): Rename to ...
581         (decrypt_start): ... this.  Call _gpgme_op_decrypt_init_result.
582         (_gpgme_op_decrypt_init_result): New function.
583         (gpgme_op_decrypt_start): Use decrypt_start.
584         (gpgme_op_decrypt): Likewise.
585
586 2003-04-27  Marcus Brinkmann  <marcus@g10code.de>
587
588         * encrypt-sign.c: Do not include <stddef.h>, <stdio.h>,
589         <stdlib.h>, <string.h>, <assert.h> and "util.h", but "gpgme.h".
590         (_gpgme_op_encrypt_sign_start): Rename to ...
591         (encrypt_sign_start): ... this.
592         (gpgme_op_encrypt_sign_start): Use encrypt_sign_start, not
593         _gpgme_op_encrypt_sign_start.
594         (gpgme_op_encrypt_sign): Likewise.
595
596         * gpgme.h (GpgmeEncryptResult): New data type.
597         (gpgme_op_encrypt_result): New prototype.
598         * ops.h (_gpgme_op_encrypt_init_result): New prototype.
599         (_gpgme_op_encrypt_status_handler): Fix prototype.
600         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Call
601         _gpgme_op_encrypt_init_result.
602         * encrypt.c: Do not include <stdio.h>, <assert.h>, "util.h" and
603         "wait.h".  Include <errno.h> and "gpgme.h".
604         (SKIP_TOKEN_OR_RETURN): Remove macro.
605         (struct encrypt_result): Rename to ...
606         (op_data_t): ... new data type.  Rewrite for user result data.
607         (append_xml_encinfo): Remove function.
608         (release_op_data): New function.
609         (gpgme_op_encrypt_result): New function.
610         (_gpgme_op_encrypt_status_handler): Change first argument to void *.
611         Rewrite result parsing.
612         (_gpgme_op_encrypt_sym_status_handler): Change first argument to
613         void *.
614         (_gpgme_op_encrypt_init_result): New function.
615         (_gpgme_op_encrypt_start): Rename to ...
616         (encrypt_start): ... this.
617         (gpgme_op_encrypt_start): Use encrypt_start, not
618         gpgme_op_encrypt_start.
619         (gpgme_op_encrypt): Likewise.
620
621         * gpgme.h (GpgmePubKeyAlgo, GpgmeHashAlgo, GpgmeInvalidUserID,
622         GpgmeNewSignature, GpgmeSignResult): New data types.
623         (gpgme_op_sign_result, gpgme_pubkey_algo_name,
624         gpgme_hash_algo_name): New prototypes.
625         * gpgme.c (gpgme_pubkey_algo_name): New function.
626         (gpgme_hash_algo_name): Likewise.
627         * ops.h (_gpgme_parse_inv_userid, _gpgme_op_sign_init_result): New
628         prototype.
629         (_gpgme_op_sign_status_handler): Fix prototype.
630         * op-support.c: Include <errno.h> and <string.h>.
631         (_gpgme_parse_inv_userid): New function.
632         * sign.c: Include <errno.h> and "gpgme.h", but not <stdio.h>,
633         <assert.h> and "util.h".
634         (SKIP_TOKEN_OR_RETURN): Remove macro.
635         (struct sign_result): Change to op_data_t type and rework it.
636         (release_sign_result): Rename to ...
637         (release_op_data): ... this and rewrite it.
638         (append_xml_info): Remove function.
639         (gpgme_op_sign_result): New function.
640         (parse_sig_created): New function.
641         (_gpgme_sign_status_handler): Change first argument to void *.
642         Rewrite the function to use the new result structure and functions.
643         (_gpgme_op_sign_init_result): New function.
644         (_gpgme_op_sign_start): Rename to ...
645         (sign_start): ... this.  Call _gpgme_op_sign_init_result.
646         (gpgme_op_sign_start): Use sign_start instead _gpgme_op_sign_start.
647         (gpgme_op_sign): Likewise.
648         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Call
649         _gpgme_op_sign_init_result.
650         
651         * delete.c: Include <errno.h> and "gpgme.h", but not "util.h" or
652         "key.h".
653         (enum delete_problem): Move into function delete_status_handler.
654         (delete_status_handler): Change first argument to void *.  Parse
655         delete problem with strtol instead atoi.  Return better error
656         values.
657         (_gpgme_op_delete_start): Rename to ...
658         (delete_start): ... this.  Rework error handling.
659         (gpgme_op_delete_start): Use delete_start instead
660         _gpgme_op_delete_start.
661         (gpgme_op_delete): Likewise.
662         * gpgme.h (GpgmeDataType): Removed.
663
664 2003-04-25  Marcus Brinkmann  <marcus@g10code.de>
665
666         * gpgme.h: Change GPGME_IMPORT_PRIVATE to GPGME_IMPORT_SECRET.
667         * import.c (parse_import_res): Parse unchanged field.
668
669         * gpgme.h: New enum for GPGME_IMPORT_NEW, GPGME_IMPORT_UID,
670         GPGME_IMPORT_SIG, GPGME_IMPORT_SUBKEY, GPGME_IMPORT_PRIVATE.
671         (GpgmeError): GPGME_Unknown_Reason, GPGME_Not_Found,
672         GPGME_Ambiguous_Specification, GPGME_Wrong_Key_Usage,
673         GPGME_Key_Revoked, GPGME_Key_Expired, GPGME_No_CRL_Known,
674         GPGME_CRL_Too_Old, GPGME_Policy_Mismatch, GPGME_No_Secret_Key,
675         GPGME_Key_Not_Trusted, GPGME_Issuer_Missing, GPGME_Chain_Too_Long,
676         GPGME_Unsupported_Algorithm, GPGME_Sig_Expired,
677         GPGME_Bad_Signature, GPGME_No_Public_Key added as new error codes.
678         (struct _gpgme_import_status): New structure.
679         (GpgmeImportStatus): New type.
680         (struct _gpgme_op_import_result): New structure.
681         (GpgmeImportResult): New type.
682         (gpgme_op_import_result): New function.
683         * import.c: Include <errno.h> and "gpgme.h", but not "util.h".
684         (struct import_result): Change to type op_data_t.
685         (release_import_result): Rename to ...
686         (release_op_data): ... this.
687         (append_xml_impinfo): Function removed.
688         (gpgme_op_import_result): New function.
689         (parse_import): New function.
690         (parse_import_res): Likewise.
691         (import_status_handler): Change first argument to void *.  Rewrite
692         to use new functions.
693         (_gpgme_op_import_start): Rework error handling.
694
695         * edit.c: Do not include <assert.h>, "util.h", but "gpgme.h".
696         (edit_resut): Change to typedef for op_data_t.
697         (edit_status_handler): Change first argument to void *.
698         Rework error handling.
699         (command_handler): Rework error handling.
700         (_gpgme_op_edit_start): Rename to ...
701         (edit_start): ... this.  Rework error handling.
702         (gpgme_op_edit_start): Rewrite using edit_start.
703         (gpgme_op_edit): Likewise.
704
705         * ops.h (_gpgme_passphrase_start): Remove prototype.
706         * passphrase.c: Do not include <assert.h>, "util.h" or
707         "debug.h", but "gpgme.h".
708         (struct passphrase_result): Change to typedef for op_data_t.
709         (release_passphrase_result): Rename to release_op_data.
710         (_gpgme_passphrase_status_handler): Change first argument to void *.
711         Use new op_data_t type.
712         (_gpgme_passphrase_command_handler): Use new op_data_t type.
713         (_gpgme_passphrase_start): Remove function.
714         * decrypt.c (_gpgme_decrypt_start): Rewrite error handling.  Do
715         not call _gpgme_passphrase_start, but install command handler.
716         * encrypt.c (_gpgme_op_encrypt_start): Likewise.
717         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
718         * sign.c (_gpgme_op_sign_start): Likewise.
719
720         * context.h (struct gpgme_context_s): Remove member initialized,
721         use_cms and help_data_1.  Add member protocol.  Make use_armor and
722         use_textmode bit flags.  Make keylist_mode, include_certs,
723         signers_len and signers_size unsigned.
724         * gpgme.c (gpgme_new): Initialize CTX->protocol.
725         (gpgme_set_protocol): Do not check CTX.  Use CTX->protocol.
726         (gpgme_get_protocol): Likewise.
727         (gpgme_release): Do not release CTX->help_data_1.
728         * op-support.c (_gpgme_op_reset): Use CTX->protocol.
729
730         * wait-private.c (_gpgme_wait_private_event_cb): Remove variable CTX.
731
732         * data.c: Do not include <assert.h>, but "gpgme.h".
733         (_gpgme_data_inbound_handler): Expand _gpgme_data_append, because
734         it will go.  Do not assert DH.
735         (_gpgme_data_outbound_handler): Do not assert DH.
736         
737         * export.c: Do not include <stdlib.h>, "debug.h" and "util.h", but
738         "gpgme.h".
739         (export_status_handler): Change type of first argument to void *.
740         (_gpgme_op_export_start): Rename to ...
741         (export_start): ... this.  Rework error handling.
742         (gpgme_op_export_start): Rewritten to use export_start instead
743         _gpgme_op_export_start.
744         (gpgme_op_export): Likewise.
745
746         * gpgme.h (GpgmeError): Add GPGME_Busy, GPGME_No_Request.
747         (GPGME_No_Recipients, GPGME_Invalid_Recipient,
748         GPGME_No_Passphrase): New macros.
749
750         * key.c (gpgme_key_get_string_attr): Fix validity attribute.
751
752 2003-04-24  Marcus Brinkmann  <marcus@g10code.de>
753         
754         * gpgme.h (struct _gpgme_op_genkey_result): New structure.
755         (GpgmeGenKeyResult): New type.
756         (gpgme_op_genkey): Drop last argument.
757         (gpgme_op_genkey_result): New function.
758         * genkey.c: Do not include "util.h", but "gpgme.h".
759         (struct genkey_result): Replace with ...
760         (op_data_t): ... this new type.
761         (release_genkey_result): Replace with ...
762         (release_op_data): ... this new function.
763         (gpgme_op_genkey_result): New function.
764         (genkey_status_handler): Rewritten using new op_data_t type.
765         (get_key_parameter): New function.
766         (_gpgme_op_genkey_start): Renamed to
767         (genkey_start): ... this and rewritten.
768         (gpgme_op_genkey_start): Use genkey_start instead
769         _gpgme_op_genkey_start.
770         (gpgme_op_genkey): Rewritten.  Remove FPR argument.
771
772         * context.h (struct gpgme_context_s): Remove member verbosity.
773         * gpgme.c (gpgme_new): Do not set member verbosity.
774         * engine.h (_gpgme_engine_set_verbosity): Remove prototype.
775         * engine.c (_gpgme_engine_set_verbosity): Remove function.
776         * engine-backend.h (struct engine_ops): Remove set_verbosity.
777         * engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Remove set_verbosity member.
778         * rungpg.c (_gpgme_engine_ops_gpg): Likewise.
779         (gpg_set_verbosity): Remove function.
780         * decrypt.c (_gpgme_decrypt_start): Don't call
781         _gpgme_engine_set_verbosity.
782         * delete.c (_gpgme_op_delete_start): Likewise.
783         * edit.c (_gpgme_op_edit_start): Likewise.
784         * encrypt.c (_gpgme_op_encrypt_start): Likewise.
785         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
786         * export.c (_gpgme_op_export_start): Likewise.
787         * genkey.c (_gpgme_op_genkey_start): Likewise.
788         * import.c (_gpgme_op_import_start): Likewise.
789         * keylist.c (gpgme_op_keylist_start): Likewise.
790         (gpgme_op_keylist_ext_start): Likewise.
791         * sign.c (_gpgme_op_sign_start): Likewise.
792         * verify.c (_gpgme_op_verify_start): Likewise.
793
794         * Makefile.am (libgpgme_la_SOURCES): Add key-cache.c.
795         * key.c (key_cache_initialized, key_cache_size,
796         key_cache_max_chain_length, ): Removed.
797         (struct key_cache_item_s, key_cache_lock, key_cache,
798         key_cache_unused_items, hash_key, _gpgme_key_cache_add,
799         _gpgme_key_cache_get, gpgme_get_key): Moved to ...
800         * key-cache.c: ... here.  New file.
801         * key.h (_gpgme_key_cache_init): Remove prototypes.
802         (_gpgme_key_cache_add,_gpgme_key_cache_get): Move to ...
803         * ops.h: ... here.
804         * version.c: Do not include "key.h".
805         (do_subsystem_inits): Do not call _gpgme_key_cache_init.
806
807         * mkstatus: Strip trailing comma.
808         * gpgme.h (GpgmeStatus): Pretty print.
809
810         * gpgme.h (GpgmeError): Rename GPGME_No_Passphrase to
811         GPGME_Bad_Passphrase.
812         * passphrase.c (_gpgme_passphrase_status_handler): Use
813         GPGME_Bad_Passphrase instead GPGME_No_Passphrase.
814
815         * gpgme.h (GpgmeError): Rename GPGME_No_Recipients to
816         GPGME_No_UserID and GPGME_Invalid_Recipient to
817         GPGME_Invalid_UserID.
818         * encrypt.c (_gpgme_encrypt_status_handler): Use GPGME_No_UserID
819         instead GPGME_No_Recipients and GPGME_Invalid_UserID instead
820         GPGME_Invalid_Recipient.
821         (_gpgme_op_encrypt_start): Likewise.
822
823         * gpgme.h (GpgmeError): Remove GPGME_Busy and GPGME_No_Request.
824         * wait-user.c (_gpgme_wait_user_event_cb): Don't clear CTX->pending.
825         * wait-private.c (_gpgme_wait_private_event_cb): Likewise.
826         * wait-global.c (gpgme_wait): Likewise.
827         * verify.c (_gpgme_op_verify_start): Likewise.
828         (gpgme_get_sig_status): Don't check pending flag.
829         (gpgme_get_sig_string_attr): Likewise.
830         (gpgme_get_sig_ulong_attr): Likewise.
831         (gpgme_get_sig_key): Likewise.
832         * op-support.c (_gpgme_op_reset): Likewise.
833         * trustlist.c (gpgme_op_trustlist_start): Don't clear pending flag.
834         (gpgme_op_trustlist_next): Don't check or clear pending flag.
835         (gpgme_op_trustlist_end): Likewise.
836         * sign.c (_gpgme_op_sign_start): Likewise.
837         * context.h (struct gpgme_context_s): Remove member PENDING.
838         * decrypt.c (_gpgme_decrypt_start): Likewise.
839         * delete.c (_gpgme_op_delete_start): Likewise.
840         * edit.c (_gpgme_op_edit_start): Likewise.
841         * encrypt.c (_gpgme_op_encrypt_start): Likewise.
842         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
843         * export.c (_gpgme_op_export_start): Likewise.
844         * genkey.c (_gpgme_op_genkey_start): Likewise.
845         * import.c (_gpgme_op_import_start): Likewise.
846         * key.c (gpgme_get_key): Likewise.
847         * keylist.c (gpgme_op_keylist_start): Likewise.
848         (gpgme_op_keylist_ext_start): Likewise.
849         (gpgme_op_keylist_next): Likewise.
850         (gpgme_op_keylist_end): Likewise.
851         * data-compat.c (gpgme_error_to_errno): Don't convert EBUSY.
852
853 2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
854
855         * gpgme.h (GpgmePassphraseCb): Change type to return GpgmeError,
856         and add argument for returning the result string.
857         (gpgme_cancel): Remove prototype.
858         * gpgme.c (gpgme_cancel): Remove function.
859         * context.h (struct gpgme_context_s): Remove member cancel.
860         * passphrase.c (_gpgme_passphrase_command_handler): Call the
861         passphrase callback in the new way.
862
863 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
864
865         * edit.c (_gpgme_edit_status_handler): Call the progress status
866         handler.
867
868 2003-02-05  Marcus Brinkmann  <marcus@g10code.de>
869
870         * wait-user.c (_gpgme_wait_user_remove_io_cb): Move check for no
871         I/O handlers left to ...
872         (_gpgme_user_io_cb_handler): ... here.
873
874 2003-02-04  Marcus Brinkmann  <marcus@g10code.de>
875
876         * trustlist.c (trustlist_colon_handler): Release ITEM if name
877         could not be allocated.
878         (gpgme_trust_item_release): Only release name if it is allocated.
879         Reported by Marc Mutz <Marc.Mutz@uni-bielefeld.de>.
880
881 2003-02-04  Marcus Brinkmann  <marcus@g10code.de>
882
883         * rungpg.c (read_status): If he status handler returns an error,
884         return it.
885         (status_handler): If read_status fails, just return the error.
886
887 2003-02-01  Marcus Brinkmann  <marcus@g10code.de>
888
889         * engine-gpgsm.c (start): Handle all errors, not only most of
890         them.
891         (xtoi_1, xtoi_2): Remove macro.
892         (status_handler): Replace use of xtoi_2 with _gpgme_hextobyte.
893
894 2003-02-01  Marcus Brinkmann  <marcus@g10code.de>
895
896         * engine-gpgsm.c (map_assuan_error): Replace
897         ASSUAN_Bad_Certificate_Path with ASSUAN_Bad_Certificate_Chain.
898         (gpgsm_new): Use assuan_pipe_connect instead assuan_pipe_connect2.
899
900         * util.h (DIMof): Remove macro.
901
902         * ops.h (_gpgme_op_event_cb, _gpgme_op_event_cb_user,
903         _gpgme_data_unread): Prototypes removed.
904
905 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
906
907         * types.h: File removed.
908         * Makefile.am (libgpgme_la_SOURCES): Remove types.h.
909         * io.h (struct spawn_fd_item_s): Do not include "types.h".
910         * key.h: Likewise.
911         * context.h: Likewise.
912         * cengine-gpgsm.h: Likewise.
913         * engine.h: Include "gpgme.h" instead "types.h".  Add prototypes
914         for EngineStatusHandler, EngineColonLineHandler and
915         EngineCommandHandler.
916         (_gpgme_engine_set_status_handler): Change parameter type from
917         GpgmeStatusHandler to EngineStatusHandler.
918         (_gpgme_engine_set_command_handler): Change parameter type from
919         GpgmeCommandHandler to EngineCommandHandler.
920         (_gpgme_engine_set_colon_line_handler): Change parameter type from
921         GpgmeColonLineHandler to EngineColonLineHandler.
922         * engine-backend.h: Include "engine.h" instead "types.h".
923         (struct engine_ops): Change Gpgme*Handler parameters in members
924         set_command_handler, set_colon_line_handler and set_status_handler
925         to Engine*Handler.
926         * engine.c (_gpgme_engine_set_status_handler): Change parameter
927         type from GpgmeStatusHandler to EngineStatusHandler.
928         (_gpgme_engine_set_command_handler): Change parameter type from
929         GpgmeCommandHandler to EngineCommandHandler.
930         (_gpgme_engine_set_colon_line_handler): Change parameter type from
931         GpgmeColonLineHandler to EngineColonLineHandler.
932         * rungpg.c (struct gpg_object_s): Change type of member status.fnc
933         from GpgmeStatusHandler to EngineStatusHandler.  Change type of
934         member colon.fnc from GpgmeColonLineHandler to
935         EngineColonLineHandler.  Change type of member cmd.fnc from
936         GpgmeCommandHandler to EngineCommandHandler.
937         * engine-gpgsm.c (struct gpgsm_object_s): Likewise.
938         * rungpg.c (gpg_set_status_handler): Change parameter type from
939         GpgmeStatusHandler to EngineStatusHandler.
940         * engine-gpgsm.c (gpgsm_set_status_handler): Likewise.
941         (assuan_simple_command): Likewise.
942         * rungpg.c (gpg_set_colon_line_handler): Change parameter type
943         from GpgmeColonLineHandler to EngineColonLineHandler.
944         * engine-gpgsm.c (gpgsm_set_colon_line_handler): Likewise.
945         * rungpg.c (gpg_set_command_handler): Change parameter type from
946         GpgmeCommandHandler to EngineCommandHandler.
947
948         * engine-gpgsm.c (status_handler): Do not close status fd at end
949         of function.
950
951         * ops.h (_gpgme_op_data_lookup): Add prototype.
952         * op-support.c: Include <stdlib.h>.
953         (_gpgme_op_data_lookup): New function.
954         * decrypt.c (_gpgme_release_decrypt_result): Function removed.
955         (struct decrypt_result_s): Rename to ...
956         (struct decrypt_resul): ... this.
957         (DecryptResult): New type.
958         (_gpgme_decrypt_status_handler): Don't use
959         test_and_allocate_result, but use _gpgme_op_data_lookup to
960         retrieve result data object.
961         * sign.c (_gpgme_release_sign_result): Function removed.
962         (release_sign_result): New function.
963         (struct sign_result_s): Rename to ...
964         (struct sign_result): ... this.
965         (SignResult): New type.
966         (_gpgme_sign_status_handler): Don't use
967         test_and_allocate_result, but use _gpgme_op_data_lookup to
968         retrieve result data object.
969         * encrypt.c (struct encrypt_result_s): Rename to ...
970         (struct encrypt_result): ... this.
971         (_gpgme_release_encrypt_result): Function removed.
972         (release_encrypt_result): New function.
973         (_gpgme_encrypt_status_handler): Don't use
974         test_and_allocate_result, but use _gpgme_op_data_lookup to
975         retrieve result data object.
976         * verify.c (struct verify_result_s): Rename to ...
977         (struct verify_result): ... this.  Remove member next.
978         (VerifyResult): New type.
979         (_gpgme_release_verify_result): Function removed.
980         (release_verify_result): New function.
981         (finish_sig): Change first argument to type VerifyResult.  Diddle
982         the type of the op_data structure.
983         (add_notation): Change first argument to type VerifyResult.
984         (_gpgme_verify_status_handler): Don't use
985         test_and_allocate_result, but use _gpgme_op_data_lookup to
986         retrieve result data object.
987         * passphrase.c (struct passphrase_result_s): Rename to ...
988         (struct passphrase_result): ... this.  Remove member next.
989         (PassphraseResult): New type.
990         (_gpgme_release_passphrase_result): Function removed.
991         (release_passphrase_result): New function.
992         (_gpgme_passphrase_status_handler): Don't use
993         test_and_allocate_result, but use _gpgme_op_data_lookup to
994         retrieve result data object.
995         (_gpgme_passphrase_command_handler): Likewise.
996         * keylist.c (struct keylist_result_s): Rename to ...
997         (struct keylist_result): ... this.  Remove member next.
998         (KeylistResult): New type.
999         (_gpgme_release_keylist_result): Function removed.
1000         (release_keylist_result): New function.
1001         (keylist_status_handler): Don't use
1002         test_and_allocate_result, but use _gpgme_op_data_lookup to
1003         retrieve result data object.
1004         * edit.c (struct edit_result_s): Rename to ...
1005         (struct edit_result): ... this.  Remove member next.
1006         (EditResult): New type.
1007         (_gpgme_release_edit_result): Function removed.
1008         (release_edit_result): New function.
1009         (edit_status_handler): Don't use
1010         test_and_allocate_result, but use _gpgme_op_data_lookup to
1011         retrieve result data object.
1012         (command_handler): Likewise.
1013         * types.h (DecryptResult, SignResult, EncryptResult,
1014         PassphraseResult, ImportResult, DeleteResult, GenKeyResult,
1015         KeylistResult, EditResult): Types removed.
1016         * ops.h: Don't include "types.h", but "gpgme.h" and "context.h".
1017         (test_and_allocate_result): Remove macro.
1018         (_gpgme_release_decrypt_result): Remove prototype.
1019         (_gpgme_decrypt_result): Remove prototype.
1020         (_gpgme_release_sign_result): Remove prototype.
1021         (_gpgme_release_encrypt_result): Remove prototype.
1022         (_gpgme_release_passphrase_result): Remove prototype.
1023         (_gpgme_release_import_result): Remove prototype.
1024         (_gpgme_release_delete_result): Remove prototype.
1025         (_gpgme_release_genkey_result): Remove prototype.
1026         (_gpgme_release_keylist_result): Remove prototype.
1027         (_gpgme_release_edit_result): Remove prototype.
1028         (_gpgme_release_verify_result): Remove prototype.
1029         * gpgme.c (_gpgme_release_result): Rewritten.
1030         * context.h (enum ctx_op_data_type): New enum.
1031         (struct ctx_op_data): New structure.
1032         (struct gpgme_context_s): Replace the member result with a member
1033         op_data.
1034         (fail_on_pending_request): Remove macro.
1035         * op-support.c (_gpgme_op_reset): Expand macro
1036         fail_on_pending_request.
1037         * util.h: Don't include "types.h" or "debug.h", but include "gpgme.h".
1038
1039 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
1040
1041         * types.h (EngineObject): Move typedef to ...
1042         * engine.h: ... here.
1043         * types.h (GpgObject): Move typedef to ...
1044         * rungpg.c: ... here.
1045         * types.h (GpgsmObject): Move typedef to ...
1046         * engine-gpgsm.c: ... here.
1047
1048         * util.h (return_if_fail, return_null_if_fail,
1049         return_val_if_fail): Remove macro.
1050         * gpgme.c (gpgme_cancel): Don't use return_if_fail.
1051         * key.c (gpgme_key_ref): Likewise.
1052         * signers.c (gpgme_signers_enum): Likewise.
1053         (gpgme_signers_clear): Likewise.
1054
1055         * engine-backend.h (struct engine_ops): Rename get_path to
1056         get_file_name.
1057         * gpgme.h (struct _gpgme_engine_info): Rename member path to
1058         file_name.
1059         * version.c: Do not include <stdio.h>, <stdlib.h>, context.h and
1060         util.h.  Other clean ups.
1061         (parse_version_number): Protect more seriously against
1062         overflow.
1063         (gpgme_get_engine_info): Move to ...
1064         * engine.c (gpgme_get_engine_info): ... here.
1065         (_gpgme_engine_get_info): Function removed.
1066         (_gpgme_engine_get_path): Make static and rename to ...
1067         (engine_get_file_name): .. this.
1068         (_gpgme_engine_get_version): Make static and rename to ...
1069         (engine_get_version): ... this.
1070         (_gpgme_engine_get_req_version): Make static and rename to ...
1071         (engine_get_req_version): ... this.
1072         * engine.h (_gpgme_engine_get_path, _gpgme_engine_get_version,
1073         _gpgme_engine_req_version, _gpgme_engine_get_info.): Remove
1074         prototypes.
1075
1076         * gpgme.h (enum GpgmeProtocol): Remove GPGME_PROTOCOL_AUTO.
1077         * gpgme.c (gpgme_set_protocol): Don't handle GPGME_PROTOCOL_AUTO.
1078         (gpgme_get_protocol_name): New function.
1079
1080         * engine-backend.h (struct engine_ops): New member
1081         get_req_version, remove member check_version.
1082         * engine.h (_gpgme_Engine_get_version): New prototype.
1083         * rungpg.c (gpg_get_req_version): New function.
1084         (gpg_check_version): Function removed.
1085         (_gpgme_engine_ops_gpg): Add gpg_get_req_version, remove
1086         gpg_check_version.
1087         * engine-gpgsm.c (gpgsm_get_req_version): New function.
1088         (gpgsm_check_version): Function removed.
1089         (_gpgme_engine_ops_gpgsm): Add gpgsm_get_req_version, remove
1090         gpgsm_check_version.
1091         * engine.c: Include ops.h.
1092          (_gpgme_engine_get_req_version): New function.
1093         (gpgme_engine_check_version): Rewritten.
1094         * version.c (gpgme_get_engine_info): Rewritten.
1095         * gpgme.h (gpgme_engine_info): New structure.
1096         (GpgmeEngineInfo): New type.
1097         
1098 2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
1099
1100         * types.h: Remove byte and ulong types.
1101         * util.h (_gpgme_hextobyte): Change prototype to unsigned char
1102         instead byte.
1103         * conversion.c (_gpgme_hextobyte): Change argument to unsigned
1104         char instead byte.
1105         (_gpgme_decode_c_string): Likewise, and beautify.  Also support a
1106         few more escaped characters.  Be more strict about buffer size.
1107         (_gpgme_data_append_percentstring_for_xml): Change type of SRC,
1108         BUF and DST to unsigned char instead byte.
1109         * progress.c (_gpgme_progress_status_handler): Use unsigned char
1110         instead byte.
1111         * debug.c (trim_spaces): Likewise.
1112
1113         * util.h (mk_error): Remove macro.
1114         * conversion.c, data.c, data-compat.c, decrypt.c, delete.c,
1115         edit.c, encrypt.c, encrypt-sign.c, engine.c, engine-gpgsm.c,
1116         export.c, genkey.c, gpgme.c, import.c, key.c, keylist.c,
1117         passphrase.c, progress.c, recipient.c, rungpg.c, sign.c,
1118         signers.c, trustlist.c, verify.c, wait.c, wait-global.c,
1119         wait-private (literally everywhere): Expand the mk_error macro.
1120
1121         * context.h (wait_on_request_or_fail): Remove macro.
1122
1123         * context.h (gpgme_context_s): Remove member ERROR.
1124         * types.h (GpgmeStatusHandler): Change return type to GpgmeError.
1125         (GpgmeCommandHandler): Change return type to GpgmeError and add
1126         new argument RESULT.
1127         * gpgme.h (GpgmeIOCb): Change return type to GpgmeError.
1128         (GpgmeEventIO): New event GPGME_EVENT_START.
1129         (GpgmeIdleFunc): Remove type.
1130         (gpgme_register_idle): Remove prototype.
1131         * data.c: Include <assert.h>.
1132         (_gpgme_data_inbound_handler): Change return type to GpgmeError.
1133         Return any error instead ignoring it, don't close file descriptor
1134         on error.
1135         (_gpgme_data_outbound_handler): Likewise.
1136         * decrypt.c: Do not include <stdio.h>, <string.h> and <assert.h>.
1137         (_gpgme_decrypt_status_handler): Change return type to GpgmeError.
1138         Return error instead setting ctx->error.  Return success at end of
1139         function.
1140         (gpgme_op_decrypt): Don't work around the old kludge anymore.
1141         * decrypt-verify.c (decrypt_verify_status_handler): Change return
1142         type to GpgmeError.  Return possible errors.
1143         * delete.c: Do not include <stdio.h>, <string.h>, <time.h> and
1144         <assert.h>.
1145         (delete_status_handler): Change return type to GpgmeError.  Return
1146         error instead setting ctx->error.  Return success at end of
1147         function.
1148         * edit.c: Do not include <stdio.h> and <string.h>.
1149         (_gpgme_edit_status_handler): Change type to GpgmeError,
1150         make static and rename to ...
1151         (edit_status_handler): ... this.  Return error directly.
1152         (command_handler): Change return type to GpgmeError, add result
1153         argument.  Return error directly.
1154         * encrypt.c (status_handler_finish): Remove function.
1155         (_gpgme_encrypt_status_handler): Change return type to GpgmeError.
1156         Return error directly.
1157         (_gpgme_encrypt_sym_status_handler): Likewise.
1158         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
1159         * engine-gpgsm.c (close_notify_handler): Do not signal done event
1160         anymore.
1161         (status_handler): Change return type to GpgmeError.  Diddle things
1162         around a bit to return errors directly.
1163         (start): Send start event.
1164         * export.c: Do not include <stdio.h>, <string.h> and <assert.h>.
1165         (export_status_handler): Change return type to GpgmeError.  Don't
1166         check ctx->error.
1167         * genkey.c: Do not include <stdio.h> and <assert.h>.
1168         (genkey_status_handler): Change return type to GpgmeError.  Don't
1169         check ctx->error.  Return errors directly.
1170         * gpgme.c (_gpgme_release_result): Do not initialize ctx->error.
1171         (_gpgme_op_event_cb): Function removed.
1172         (_gpgme_op_event_cb_user): Likewise.
1173         * import.c: Do not include <stdio.h>, <string.h> and <assert.h>.
1174         (import_status_handler): Change return type to GpgmeError.  Don't
1175         check ctx->error.
1176         * keylist.c (keylist_colon_handler, keylist_status_handler, finish_key):
1177         Change return type to GpgmeError, return error directly.
1178         * Makefile (libgpgme_la_SOURCES): Add wait-global.c,
1179         wait-private.c and wait-user.c
1180         * ops.h (test_and_allocate_result): Return error instead setting
1181         ctx->error.
1182         (_gpgme_data_inbound_handler, _gpgme_data_outbound_handler,
1183         _gpgme_verify_status_handler, _gpgme_decrypt_status_handler,
1184         _gpgme_sign_status_handler, _gpgme_encrypt_staus_handler,
1185         _gpgme_passphrase_status_handler, _gpgme_progress_status_handler):
1186         Change return type to GpgmeError.
1187         (_gpgme_passphease_command_handler): Change return type to
1188         GpgmeError and add new argument RESULT.
1189         * op-support.c: Use new callback functions, and change private
1190         data to ctx everywhere.
1191         * passphrase.c (_gpgme_passphrase_status_handler): Change return
1192         type to GpgmeError, return error directly.
1193         (_gpgme_passphrase_command_handler): Change return type to
1194         GpgmeError, add result argument.  Return results accordingly.
1195         * progress.c (_gpgme_progress_status_handler): Change return type
1196         to GpgmeError, return errors directly.
1197         * rungpg.c (status_handler): Change return type to GpgmeError.
1198         Return error directly.
1199         (close_notify_handler): Don't send done event.
1200         (colon_line_handler): Change return type to GpgmeError, return
1201         errors directly.
1202         * rungpg.c (start): Send start event.
1203         * sign.c (_gpgme_sign_status_handler): Change return type to
1204         GpgmeError, return errors directly.
1205         * trustlist.c (trustlist_status_handler): Change return type to
1206         GpgmeError.  Return 0.
1207         (trustlist_colon_handler): Change return type GpgmeError.  Return
1208         errors directly.
1209         * verify.c (add_notation): Change return type to GpgmeError,
1210         return errors directly.
1211         (_gpgme_verify_status_handler): Likewise.
1212         * wait.h (struct fd_table): Remove lock member.
1213         (struct wait_item_s): Moved here from wait.c.
1214         (struct tag): New structure.
1215         (_gpgme_wait_event_cb): Remove prototype.
1216         (_gpgme_wait_private_event_cb, _gpgme_wait_global_event_cb,
1217         _gpgme_wait_user_add_io_cb, _gpgme_wait_user_remove_io_cb,
1218         _gpgme_wait_user_event_io_cb): New prototypes.
1219         * wait.c: Don't include <stdio.h>.
1220         (ftd_global, ctx_done_list, ctx_done_list_size,
1221         ctx_done_list_length, ctx_done_list_lock, idle_function): Remove
1222         global variable.
1223         (gpgme_register_idle, do_select, _gpgme_wait_event_cb): Remove
1224         function.
1225         (gpgme_wait): Move to file wait-global.c.
1226         (_gpgme_add_io_cb): Take ctx as private argument, initialize ctx
1227         member in wait item and tag.
1228         (_gpgme_remove_io_cb): Take ctx from tag.  Don't use FDT lock.
1229         (_gpgme_wait_one, _gpgme_wait_on_condition): Move to
1230         wait-private.c.
1231         (gpgme_fd_table_init): Don't initialize FDT->lock.
1232         (gpgme_fd_table_deinit): Don't destroy FDT->lock.
1233         (_gpgme_fd_table_put): Make static and rename to ...
1234         (fd_table_put): ... this function.  Don't use FDT->lock.
1235         (struct wait_item_s): Move to wait.h.
1236         * wait-global.c: New file.
1237         * wait-private.c: New file.
1238         * wait-user.c: New file.
1239
1240         * key.c (gpgme_key_sig_get_string_attr): Use validity_to_string
1241         instead otrust_to_string to calculate validity.
1242         
1243 2003-01-19  Miguel Coca  <mcoca@gnu.org>
1244
1245         * w32-io.c (_gpgme_io_select): Add missing argument in calls to
1246         DEBUG_BEGIN.
1247         * w32-util.c: Include "sema.h".
1248         (find_program_in_registry): Change DEBUG1 to DEBUG2, fixes compilation
1249         error.
1250
1251 2003-01-19  Marcus Brinkmann  <marcus@g10code.de>
1252
1253         * rungpg.c (_gpgme_engine_ops_gpg): Remove gpg_start.
1254         (gpg_start): Rename to ...
1255         (start): ... this function.  Change arguments to GpgObject.
1256         (gpg_decrypt): Call start.
1257         (gpg_edit): Likewise.
1258         (gpg_encrypt): Likewise.
1259         (gpg_encrypt_sign): Likewise.
1260         (gpg_export): Likewise.
1261         (gpg_import): Likewise.
1262         (gpg_keylist): Likewise.
1263         (gpg_keylist_ext): Likewise.
1264         (gpg_trustlist): Likewise.
1265         (gpg_verify): Likewise.
1266
1267         * engine-gpgsm.c (_gpgme_engine_ops_encrypt): Remove gpgsm_start.
1268         (gpgsm_start): Rename to ...
1269         (struct gpgsm_object_s): Remove member command.
1270         (gpgsm_release): Don't free command.
1271         (start): ... this function.  Change arguments to GpgsmObject and
1272         const char *.
1273         (gpgsm_decrypt): Call start.
1274         (gpgsm_delete): Likewise.
1275         (gpgsm_encrypt): Likewise.
1276         (gpgsm_export): Likewise.
1277         (gpgsm_genkey): Likewise.
1278         (gpgsm_import): Likewise.
1279         (gpgsm_keylist): Likewise.
1280         (gpgsm_keylist_ext): Likewise.
1281         (gpgsm_verify): Likewise.
1282
1283         * decrypt.c (_gpgme_decrypt_start): Don't call
1284         _gpgme_engine_start.
1285         * delete.c (_gpgme_op_delete_start): Likewise.
1286         * edit.c (_gpgme_op_edit_start): Likewise.
1287         * encrypt.c (_gpgme_op_encrypt_start): 
1288         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): 
1289         * export.c (_gpgme_op_export_start): Likewise.
1290         * genkey.c (_gpgme_op_genkey_start): Likewise.
1291         * import.c (_gpgme_op_import_start): Likewise.
1292         * keylist.c (gpgme_op_keylist_ext_start): Likewise.
1293         (gpgme_op_keylist_start): Likewise.
1294         * sign.c (_gpgme_op_sign_start): Likewise.
1295         * trustlist.c (gpgme_op_trustlist_start): Likewise.
1296         * verify.c (_gpgme_op_verify_start): Likewise.
1297
1298         * engine-backend.h (struct engine_ops): Remove member start.
1299
1300         * engine.h (_gpgme_engine_start): Remove prototype.
1301         * engine.c (_gpgme_engine_start): Remove function.
1302
1303 2003-01-06  Werner Koch  <wk@gnupg.org>
1304
1305         * keylist.c (set_mainkey_capability): Handle 'd' and 'D' used
1306         since gpg 1.3 to denote disabled keys.
1307
1308 2003-01-06  Marcus Brinkmann  <marcus@g10code.de>
1309
1310         * data-mem.c: Include <string.h>.
1311         * engine.c: Likewise.
1312
1313 2003-01-06  Marcus Brinkmann  <marcus@g10code.de>
1314
1315         * Makefile.am (libgpgme_la_DEPENDENCIES): Correct bug in last change.
1316
1317 2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
1318
1319         * gpgme.h (gpgme_op_verify, gpgme_op_decrypt_verify): Drop R_STAT
1320         argument.
1321         * decrypt-verify.c (gpgme_op_decrypt_verify): Drop R_STAT
1322         argument.
1323         * verify.c (gpgme_op_verify): Drop R_STAT argument.
1324         (_gpgme_intersect_stati): Function removed.
1325         * ops.h (_gpgme_intersect_stati): Remove prototype.
1326
1327 2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
1328
1329         * libgpgme.vers: New file.
1330         * Makefile.am (EXTRA_DIST): Add libgpgme.vers.
1331         (libgpgme_version_script_cmd): New variable.
1332         (libgpgme_la_LDFLAGS): Add libgpgme_version_script_cmd here.
1333         (libgpgme_la_DEPENDENCIES): New variable.
1334
1335 2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
1336
1337         * key.c (gpgme_key_get_string_attr): Don't accept GPGME_ATTR_IS_SECRET.
1338         (otrust_to_string): New function.
1339         (gpgme_key_get_as_xml): Use it.
1340         (validity_to_string): New function.
1341         (gpgme_key_get_string_attr): Beautify using above functions.
1342         (gpgme_key_get_ulong_attr): Likewise.
1343
1344 2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
1345
1346         * data-mem.c (mem_release): Fix gcc warning.
1347         * data-user.c (user_release): Likewise.
1348
1349 2002-12-06  Marcus Brinkmann  <marcus@g10code.de>
1350
1351         * data.h (gpgme_data_release_cb): Change return type to void.
1352         (gpgme_data_read_cb): Change return type to ssize_t.
1353         * data.c (gpgme_data_read): Likewise.
1354         * data-stream.c (stream_read): Likewise.
1355         * data-fd.c (fd_read): Likewise.
1356         * data-mem.c (mem_read): Likewise.
1357         (mem_release): Change return type to void.
1358         * data-user.c (user_read): Change return type to ssize_t.
1359         (user_release): Change return type to void.
1360         * data-compat.c (old_user_read): Change return type to ssize_t. 
1361         * gpgme.h (GpgmeDataReadCb): Likewise.
1362         (gpgme_data_read): Likewise.
1363         (GpgmeDataSeekCb): Change return type to off_t.
1364
1365 2002-12-04  Marcus Brinkmann  <marcus@g10code.de>
1366
1367         * gpgme.h: Add prototype for gpgme_get_key.
1368         * key.c (gpgme_get_key): New function.
1369         * verify.c (gpgme_get_sig_key): Rewrite using gpgme_get_key.
1370
1371         * gpgme.h: Add prototypes for new interfaces
1372         gpgme_key_sig_get_string_attr and gpgme_key_get_ulong_attr.
1373         (enum GpgmeAttr): New attribute GPGME_ATTR_SIG_CLASS.
1374         * gpgme.c (gpgme_set_keylist_mode): Allow GPGME_KEYLIST_MODE_SIGS.
1375         * key.h (struct certsig_s): New members ALGO, NAME_PART,
1376         EMAIL_PART, COMMENT_PART, NAME, SIG_STAT and SIG_CLASS.
1377
1378         * conversion.c (_gpgme_decode_c_string): Add new parameter LEN.
1379         Use that to determine if allocation is desired or not.
1380         * util.h: Adjust prototype of _gpgme_decode_c_string.
1381         * keylist.c (keylist_colon_handler): Adjust caller of
1382         _gpgme_decode_c_string.
1383
1384         * key.h (struct gpgme_key_s): New member last_uid.
1385         * key.c (_gpgme_key_append_name): Rewritten using
1386         _gpgme_decode_c_string and the last_uid pointer.
1387         (my_isdigit): Macro removed.
1388         (ALLOC_CHUNK): Likewise.
1389         * keylist.c (set_userid_flags): Use last_uid member of KEY.
1390
1391         * context.h (struct user_id_s): New member last_certsig.
1392         * key.h: Add prototype for _gpgme_key_add_certsig.
1393         * key.c (_gpgme_key_add_certsig): New function.
1394         (set_user_id_part): Move function before _gpgme_key_add_certsig.
1395         (parse_user_id): Change first argument to SRC, add new arguments
1396         NAME, EMAIL and COMMENT.  Change code to use these arguments
1397         instead going through UID.  Move function before
1398         _gpgme_add_certsig.
1399         (parse_x509_user_id): Likewise.
1400         (_gpgme_key_append_name): Adjust arguments to parse_x509_user_id
1401         and parse_user_id invocation.
1402         (one_certsig_as_xml): New function.
1403         (one_uid_as_xml): Print signatures.
1404         * context.h (struct gpgme_context_s): New member TMP_UID.
1405         * keylist.c (keylist_colon_handler): Rewritten, implement "sig"
1406         record entries.
1407
1408         * key.c (get_certsig): New function.
1409         (gpgme_key_sig_get_string_attr): Likewise.
1410         (gpgme_key_sig_get_ulong_attr): Likewise.
1411
1412         * keylist.c: Include <ctype.h>.
1413         (my_isdigit): Macro removed.
1414         (set_mainkey_trust_info): Use isdigit, not my_isdigit.
1415         (set_userid_flags): Likewise.
1416         (set_subkey_trust_info): Likewise.
1417         (set_ownertrust): Likewise.
1418         (finish_key): Move function up a bit and remove prototype.
1419
1420         * rungpg.c (gpg_keylist_ext): Correct precedence of signature
1421         listing mode.
1422         (gpg_keylist_ext): Implement signature listing mode.
1423
1424 2002-11-25  Marcus Brinkmann  <marcus@g10code.de>
1425
1426         * rungpg.c (_gpgme_gpg_spawn): Do not set parent fds to -1.
1427         * posix-io.c (_gpgme_io_spawn): Call _gpgme_io_close instead close
1428         for parent fds.
1429         * w32-io.c (_gpgme_io_spawn): Call _gpgme_io_close instead
1430         CloseHandle for parent fds.
1431
1432 2002-11-22  Marcus Brinkmann  <marcus@g10code.de>
1433
1434         * gpgme.h [_MSC_VER]: Define ssize_t as long.
1435
1436 2002-11-22  Werner Koch  <wk@gnupg.org>
1437
1438         * engine-gpgsm.c (_gpgme_gpgsm_new): Save the result of a first
1439         setlocale before doing another setlocale.
1440
1441 2002-11-21  Marcus Brinkmann  <marcus@g10code.de>
1442
1443         * decrypt.c: Some beautyfication.
1444
1445         * verify.c (_gpgme_verify_status_handler): Treat
1446         GPGME_STATUS_UNEXPECTED like GPGME_STATUS_NODATA.
1447         Reported by Miguel Coca <e970095@zipi.fi.upm.es>.
1448
1449 2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
1450
1451         * genkey.c: Only include <config.h> if [HAVE_CONFIG_H].
1452         (struct genkey_result_s): Add new member FPR.
1453         (_gpgme_release_genkey_result): Free RESULT->fpr if set.
1454         (genkey_status_handler): Extract the fingerprint from the status
1455         line.
1456         (gpgme_op_genkey): Add new argument FPR and return the fingerprint
1457         in it.
1458         * gpgme.h: Adjust prototype of gpgme_op_genkey.
1459
1460 2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
1461
1462         * rungpg.c (gpg_keylist): Add --with-fingerprint to gpg invocation
1463         twice, to get fingerprints on subkeys.  Suggested by Timo Schulz
1464         <twoaday@freakmail.de>.
1465         (gpg_keylist_ext): Likewise.
1466
1467 2002-11-05  Marcus Brinkmann  <marcus@g10code.de>
1468
1469         * import.c (append_xml_impinfo): Use
1470         _gpgme_data_append_string_for_xml rather than
1471         _gpgme_data_append_string for the field content.
1472         Submitted by Miguel Coca <e970095@zipi.fi.upm.es>.
1473         
1474 2002-10-10  Marcus Brinkmann  <marcus@g10code.de>
1475
1476         * rungpg.h, engine-gpgsm.h: File removed.
1477         * engine-backend.h: New file.
1478         * Makefile.am (gpgsm_components): New variable, set depending on
1479         automake conditional HAVE_GPGSM.
1480         (libgpgme_la_SOURCES): Add engine-backend.h, remove rungpg.h and
1481         engine-gpgsm.h.  Replace engine-gpgsm.c with ${gpgsm_components}.
1482         (status-table.h): Depend on gpgme.h, not rungpg.h.
1483         * conversion.c: Include <stdlib.h>.
1484         * engine-gpgsm.c: Do not set ENABLE_GPGSM here.  Include
1485         "engine-backend.h" instead "engine-gpgsm.h".  Reorder some
1486         functions and remove all function prototypes.
1487         (_gpgme_gpgsm_get_version): Make static and rename to ...
1488         (gpgsm_get_version): ... this.
1489         (_gpgme_gpgsm_check_version): Make static and rename to ...
1490         (gpgsm_check_version): ... this.
1491         (_gpgme_gpgsm_new): Make static.  Change argument type from
1492         GpgsmObject * to void **.  Call gpgsm_release instead
1493         _gpgme_gpgsm_release.
1494         (_gpgme_gpgsm_op_decrypt): Make static and rename to ...
1495         (gpgsm_check_decrypt): ... this.
1496         (_gpgme_gpgsm_op_delete): Make static and rename to ...
1497         (gpgsm_check_delete): ... this.
1498         (_gpgme_gpgsm_set_recipients): Make static and rename to ...
1499         (gpgsm_check_set_recipients): ... this.
1500         (_gpgme_gpgsm_op_encrypt): Make static and rename to ...
1501         (gpgsm_encrypt): ... this.
1502         (_gpgme_gpgsm_op_export): Make static and rename to ...
1503         (gpgsm_export): ... this.
1504         (_gpgme_gpgsm_op_genkey): Make static and rename to ...
1505         (gpgsm_genkey): ... this.
1506         (_gpgme_gpgsm_op_import): Make static and rename to ...
1507         (gpgsm_import): ... this.
1508         (_gpgme_gpgsm_op_keylist): Make static and rename to ...
1509         (gpgsm_keylist): ... this.
1510         (_gpgme_gpgsm_op_keylist_ext): Make static and rename to ...
1511         (gpgsm_keylist_ext): ... this.
1512         (_gpgme_gpgsm_op_sign): Make static and rename to ...
1513         (gpgsm_sign): ... this.
1514         (_gpgme_gpgsm_op_trustlist): Make static and rename to ...
1515         (gpgsm_trustlist): ... this.
1516         (_gpgme_gpgsm_op_verify): Make static and rename to ...
1517         (gpgsm_verify): ... this.
1518         (gpgsm_status_handler): Rename to ...
1519         (status_handler): ... this.
1520         (_gpgme_gpgsm_set_status_handler): Make static and rename to ...
1521         (gpgsm_set_status_handler): ... this.
1522         (_gpgme_gpgsm_set_colon_line_handler): Make static and rename to ...
1523         (gpgsm_set_colon_line_handler): ... this.
1524         (_gpgme_gpgsm_add_io_cb): Rename to ...
1525         (add_io_cb): ... this.
1526         (_gpgme_gpgsm_start): Make static and rename to ...
1527         (gpgsm_start): ... this.
1528         (_gpgme_gpgsm_set_io_cb): Make static and rename to ...
1529         (gpgsm_set_io_cb): ... this.
1530         (_gpgme_gpgsm_io_event): Make static and rename to ...
1531         (gpgsm_io_event): ... this.
1532         (struct _gpgme_engine_ops_gpgsm): New variable.
1533         [!ENABLE_GPGSM]: Removed.
1534         * engine.c: Do not include <time.h>, <sys/types.h>, <string.h>,
1535         <assert.h>, "io.h", "rungpg.h" and "engine-gpgsm.h".  Include
1536         <stdlib.h> and "engine-backend.h".
1537         (struct engine_object_s): Rewritten.
1538         (engine_ops): New variable.
1539         * engine.c (_gpgme_engine_get_path, _gpgme_engine_get_version,
1540         _gpgme_engine_check_version, _gpgme_engine_new,
1541         _gpgme_engine_release, _gpgme_engine_set_verbosity,
1542         _gpgme_engine_set_status_handler,
1543         _gpgme_engine_set_command_handler,
1544         _gpgme_engine_set_colon_line_handler, _gpgme_engine_op_decrypt,
1545         _gpgme_engine_op_delete, _gpgme_engine_op_edit,
1546         _gpgme_engine_op_encrypt, _gpgme_engine_op_encrypt_sign,
1547         _gpgme_engine_op_export, _gpgme_engine_op_genkey,
1548         _gpgme_engine_op_import, _gpgme_engine_op_keylist,
1549         _gpgme_engine_op_keylist_ext, _gpgme_engine_op_sign,
1550         _gpgme_engine_op_trustlist, _gpgme_engine_op_verify,
1551         _gpgme_engine_start, _gpgme_engine_set_io_cbs,
1552         _gpgme_engine_io_event): Reimplement.
1553         * engine.h: Fix a few comments and a variable name in a prototype.
1554         * ops.h: Do not include "rungpg.h".
1555         * passphrase.c: Include config.h only if [HAVE_CONFIG_H].  Do not
1556         include "rungpg.h".
1557         * recipient.c: Likewise.
1558         * signers.c: Likewise.
1559         * version.c: Likewise.
1560         * rungpg.c: Likewise.  Include "engine-backend.h".  Reorder
1561         functions and remove prototypes.
1562         (_gpgme_gpg_get_version): Make static and rename to ...
1563         (gpg_get_version): ... this.
1564         (_gpgme_gpg_check_version): Make static and rename to ...
1565         (gpg_check_version): ... this.
1566         (_gpgme_gpg_new): Make static.  Change argument type from
1567         GpgObject * to void **.  Call gpg_release instead
1568         _gpgme_gpg_release.
1569         (_gpgme_gpg_op_decrypt): Make static and rename to ...
1570         (gpg_check_decrypt): ... this.
1571         (_gpgme_gpg_op_delete): Make static and rename to ...
1572         (gpg_check_delete): ... this.
1573         (_gpgme_gpg_set_recipients): Make static and rename to ...
1574         (gpg_check_set_recipients): ... this.
1575         (_gpgme_gpg_op_encrypt): Make static and rename to ...
1576         (gpg_encrypt): ... this.
1577         (_gpgme_gpg_op_export): Make static and rename to ...
1578         (gpg_export): ... this.
1579         (_gpgme_gpg_op_genkey): Make static and rename to ...
1580         (gpg_genkey): ... this.
1581         (_gpgme_gpg_op_import): Make static and rename to ...
1582         (gpg_import): ... this.
1583         (_gpgme_gpg_op_keylist): Make static and rename to ...
1584         (gpg_keylist): ... this.
1585         (_gpgme_gpg_op_keylist_ext): Make static and rename to ...
1586         (gpg_keylist_ext): ... this.
1587         (_gpgme_gpg_op_sign): Make static and rename to ...
1588         (gpg_sign): ... this.
1589         (_gpgme_gpg_op_trustlist): Make static and rename to ...
1590         (gpg_trustlist): ... this.
1591         (_gpgme_gpg_op_verify): Make static and rename to ...
1592         (gpg_verify): ... this.
1593         (gpg_status_handler): Rename to ...
1594         (status_handler): ... this.
1595         (_gpgme_gpg_set_status_handler): Make static and rename to ...
1596         (gpg_set_status_handler): ... this.
1597         (_gpgme_gpg_set_colon_line_handler): Make static and rename to ...
1598         (gpg_set_colon_line_handler): ... this.
1599         (gpgme_gpg_add_io_cb): Rename to ...
1600         (add_io_cb): ... this.
1601         (_gpgme_gpg_start): Make static and rename to ...
1602         (gpg_start): ... this.
1603         (_gpgme_gpg_set_io_cb): Make static and rename to ...
1604         (gpg_set_io_cb): ... this.
1605         (_gpgme_gpg_io_event): Make static and rename to ...
1606         (gpg_io_event): ... this.
1607         (struct _gpgme_engine_ops_gpg): New variable.
1608
1609 2002-10-10  Marcus Brinkmann  <marcus@g10code.de>
1610
1611         * engine-gpgsm.c (_gpgme_gpgsm_op_verify) [!ENABLE_GPGSM]: Add
1612         missing argument.
1613
1614 2002-10-09  Marcus Brinkmann  <marcus@g10code.de>
1615
1616         * data.h, data-user.c, data-stream.c, data-mem.c, data-fd.c,
1617         data-compat.c: New file.  Really check them in this time, completes
1618         2002-10-08 change.
1619
1620         * rungpg.h (GpgStatusHandler): Rename type to GpgmeStatusHandler
1621         and move to ...
1622         * types.h (GpgmeStatusHandler): ... here.
1623         * rungpg.h (GpgColonLineHandler): Rename type to GpgmeColonLineHandler.
1624         and move to ...
1625         * types.h (GpgmeColonLineHandler): ... here.
1626         * rungpg.h (GpgCommandHandler): Rename type to GpgmeCommandHandler.
1627         and move to ...
1628         * types.h (GpgmeCommandHandler): ... here.
1629         * engine.h: Don't include "rungpg.h".
1630         (_gpgme_engine_set_status_handler): Change type of
1631         argument from GpgStatusHandler to GpgmeStatusHandler.
1632         (_gpgme_engine_set_colon_line_handler): Change type of
1633         argument from GpgColonLineHandler to GpgmeColonLineHandler.
1634         (_gpgme_engine_set_command_handler): Change type of
1635         argument from GpgCommandHandler to GpgmeCommandHandler.
1636         * engine-gpgsm.h: Don't include "rungpg.h".
1637         (_gpgme_gpgsm_set_status_handler): Change type of
1638         argument from GpgStatusHandler to GpgmeStatusHandler.
1639         (_gpgme_gpgsm_set_colon_line_handler): Change type of
1640         argument from GpgColonLineHandler to GpgmeColonLineHandler.
1641         * engine-gpgsm.c: Do not include "rungpg.h".
1642         (struct gpgsm_object_s): Change type of
1643         status.fnc to GpgmeStatusHandler.  Change type of colon.fnc to
1644         GpgmeColonLineHandler.
1645         (gpgsm_assuan_simple_command): Change type of argument from
1646         GpgStatusHandler to GpgmeStatusHandler.
1647         (_gpgme_gpgsm_set_status_handler): Likewise.
1648         (_gpgme_gpgsm_set_colon_line_handler): Change type of argument from
1649         GpgColonLineHandler to GpgmeColonLineHandler.
1650         * rungpg.h (_gpgme_gpg_set_status_handler): Change type of
1651         argument from GpgStatusHandler to GpgmeStatusHandler.
1652         (_gpgme_gpg_set_colon_line_handler): Change type of
1653         argument from GpgColonLineHandler to GpgmeColonLineHandler.
1654         (_gpgme_gpg_set_command_handler): Change type of
1655         argument from GpgCommandHandler to GpgmeCommandHandler.
1656         * rungpg.c (struct gpg_object_s): Change type of status.fnc to
1657         GpgmeStatusHandler.  Change type of colon.fnc to
1658         GpgmeColonLineHandler.  Change type of cmd.fnc to
1659         GpgmeCommandLineHandler.
1660         (_gpgme_gpg_set_status_handler): Change type of argument FNC to
1661         GpgmeStatusHandler.
1662         (_gpgme_gpg_set_colon_line_handler): Change type of argument FNC
1663         to GpgmeColonLineHandler.
1664         (_gpgme_gpg_set_command_handler): Change type of argument FNC to
1665         GpgmeCommandHandler.
1666         * engine.c (_gpgme_engine_set_status_handler): Change type of
1667         argument FNC to GpgmeStatusHandler.
1668         (_gpgme_engine_set_colon_line_handler): Change type of argument FNC
1669         to GpgmeColonLineHandler.
1670         (_gpgme_engine_set_command_handler): Change type of argument FNC to
1671         GpgmeCommandHandler.
1672
1673         * rungpg.h (_gpgme_gpg_enable_pipemode): Remove prototype.
1674         * rungpg.c (struct gpg_object_s): Remove PM.
1675         (pipemode_cb): Prototype removed.
1676         (add_pm_data): Function removed.
1677         (_gpgme_gpg_enable_pipemode): Likewise.
1678         (pipemode_copy): Likewise.
1679         (pipemode_cb): Likewise.
1680         (add_arg): Don't check for pipemode.
1681         (add_data): Likewise.
1682         (_gpgme_gpg_set_status_handler): Likewise.
1683         (_gpgme_gpg_set_colon_line_handler): Likewise.
1684         (_gpgme_gpg_set_command_handler): Likewise.
1685         (_gpgme_gpg_spawn): Likewise.
1686         (_gpgme_gpg_spawn): Don't set PM.active.
1687         (_gpgme_gpg_op_verify): Remove pipemode case.
1688         * verify.c (_gpgme_op_verify_start): Remove pipemode case.
1689
1690         * rungpg.h (_gpgme_gpg_add_arg, _gpgme_gpg_add_data,
1691         _gpgme_gpg_add_pm_data, _gpgme_gpg_housecleaning,
1692         _gpgme_gpg_set_simple_line_handler): Prototype removed.
1693         (_gpgme_gpg_set_verbosity): New prototype.
1694         * rungpg.c (_gpgme_gpg_add_data): Make static and rename to ...
1695         (add_data): ... this.
1696         (_gpgme_gpg_add_pm_data): Call add_data, not _gpgme_gpg_add_data.
1697         (_gpgme_gpg_set_command_handler): Likewise.
1698         (_gpgme_gpg_op_decrypt, _gpgme_gpg_op_edit, _gpgme_gpg_op_encrypt,
1699         _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
1700         _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_sign,
1701         _gpgme_gpg_op_verify): Likewise.
1702         (_gpgme_gpg_add_pm_data): Rename to ...
1703         (add_pm_data): ... this.
1704         (_gpgme_gpg_op_verify): Call add_pm_data, not
1705         _gpgme_gpg_add_pm_data.
1706         (_gpgme_gpg_add_arg): Make static and rename to ...
1707         (add_arg): ... this.
1708         (_gpgme_gpg_set_command_handler, _gpgme_gpg_new,
1709         _gpgme_gpg_op_decrypt, _gpgme_gpg_op_delete,
1710         _gpgme_append_gpg_args_from_signers, _gpgme_gpg_op_edit,
1711         _gpgme_append_gpg_args_from_recipients, _gpgme_gpg_op_encrypt,
1712         _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
1713         _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_keylist,
1714         _gpgme_gpg_op_keylist_ext, _gpgme_gpg_op_trustlist,
1715         _gpgme_gpg_op_sign, _gpgme_gpg_op_verify): Use add_arg, not
1716         _gpgme_gpg_add_arg.
1717         (_gpgme_gpg_set_verbosity): New function.
1718         (struct gpg_object_s): Remove member simple from colon.
1719         (_gpgme_gpg_set_colon_line_handler): Don't initialize simple.
1720         (_gpgme_gpg_set_simple_line_handler): Removed function.
1721         (read_colon_line): Don't check the GPG->colon.simple.
1722         * engine.c (_gpgme_engine_set_verbosity): Call
1723         _gpgme_gpg_set_verbosity instead _gpgme_gpg_add_arg.
1724
1725 2002-10-08  Marcus Brinkmann  <marcus@g10code.de>
1726
1727         * util.h (_gpgme_malloc, _gpgme_realloc, _gpgme_calloc,
1728         _gpgme_strdup, _gpgme_free): Remove prototypes.
1729         (xtrymalloc, xtrycalloc, xtryrealloc, xtrystrdup, xfree): Remove
1730         macros.
1731         * util.c: File removed.
1732         * Makefile.am (libgpgme_la_SOURCES): Remove util.h.
1733         * conversion.c (_gpgme_decode_c_string): Use malloc instead of
1734         xtrymalloc, realloc instead of xtryrealloc, calloc instead of
1735         xtrycalloc, free instead of xfree.
1736         (_gpgme_data_append_percentstring_for_xml): Likewise.
1737         * data.c (_gpgme_data_new, _gpgme_data_release): Likewise.
1738         * data-compat.c (gpgme_data_new_from_filepart): Likewise.
1739         * data-mem.c (mem_write, mem_release, gpgme_data_new_from_mem,
1740         _gpgme_data_get_as_string): Likewise.
1741         * debug.c (debug_init): Likewise.
1742         * decrypt.c (_gpgme_release_decrypt_result): Likewise.
1743         * delete.c (_gpgme_release_delete_result): Likewise.
1744         * edit.c (_gpgme_release_edit_result, _gpgme_op_edit_start):
1745         Likewise.
1746         * encrypt.c (_gpgme_release_encrypt_result): Likewise.
1747         * engine.c (_gpgme_engine_get_info, _gpgme_engine_new,
1748         _gpgme_engine_release): Likewise.
1749         * engine-gpgsm.c (_gpgme_gpgsm_new, _gpgme_gpgsm_release,
1750         _gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
1751         gpgsm_set_recipients, _gpgme_gpgsm_op_encrypt,
1752         _gpgme_gpgsm_op_export, _gpgme_gpgsm_op_genkey,
1753         _gpgme_gpgsm_op_import, _gpgme_gpgsm_op_keylist,
1754         _gpgme_gpgsm_op_keylist_ext, _gpgme_gpgsm_op_sign,
1755         _gpgme_gpgsm_op_verify, gpgsm_status_handler): Likewise.
1756         * genkey.c (_gpgme_release_genkey_result): Likewise.
1757         * gpgme.c (gpgme_new, gpgme_release): Likewise.
1758         * import.c (_gpgme_release_import_result): Likewise.
1759         * key.c (_gpgme_key_cache_init, _gpgme_key_cache_add, key_new,
1760         add_subkey, gpgme_key_release, _gpgme_key_append_name): Likewise.
1761         * keylist.c (_gpgme_release_keylist_result, keylist_colon_handler,
1762         _gpgme_op_keylist_event_cb, gpgme_op_keylist_next): Likewise.
1763         * ops.h (test_and_allocate_result): Likewise.
1764         * passphrase.c (_gpgme_release_passphrase_result,
1765         _gpgme_passphrase_status_handler,
1766         _gpgme_passphrase_command_handler): Likewise.
1767         * progress.c (_gpgme_progress_status_handler): Likewise.
1768         * recipient.c (gpgme_recipients_new, gpgme_recipients_release,
1769         gpgme_recipients_add_name_with_validity): Likewise.
1770         * rungpg.c (_gpgme_gpg_new, _gpgme_gpg_release,
1771         _gpgme_gpg_add_arg, _gpgme_gpg_add_data,
1772         _gpgme_gpg_set_colon_line_handler, free_argv, free_fd_data_map,
1773         build_argv, _gpgme_gpg_spawn, read_status, read_colon_line):
1774         Likewise.
1775         * sign.c (_gpgme_release_sign_result): Likewise.
1776         * signers.c (_gpgme_signers_add): Likewise.
1777         * trustlist.c (trust_item_new, trustlist_colon_handler,
1778         _gpgme_op_trustlist_event_cb, gpgme_op_trustlist_next,
1779         gpgme_trustitem_release): Likewise.
1780         * verify.c (_gpgme_release_verify_result, finish_sig): Likewise.
1781         * version.c (gpgme_get_engine_info, _gpgme_get_program_version):
1782         Likewise.
1783         * w32-io.c (create_reader, create_writer, destroy_reader,
1784         destroy_writer, build_commandline, _gpgme_io_spawn): Likewise.
1785         * w32-sema.c (critsect_init, _gpgme_sema_cs_destroy): Likewise.
1786         * w32-util.c (read_w32_registry_string): Likewise.
1787         * wait.c (_gpgme_fd_table_deinit, _gpgme_fd_table_put,
1788         _gpgme_wait_event_cb, _gpgme_add_io_cb, _gpgme_remove_io_cb)
1789         * data-compat.c: Include <stdlib.h>.
1790
1791 2002-10-08  Marcus Brinkmann  <marcus@g10code.de>
1792
1793         New data object component:
1794
1795         * gpgme.h (GpgmeDataReadCb, GpgmeDataWriteCb, GpgmeDataSeekCb,
1796         GpgmeDataReleaseCb): New types.
1797         (struct GpgmeDataCbs): New structure.
1798         (gpgme_data_read): Changed prototype to match that of read() closely.
1799         (gpgme_data_write): Similar for write().
1800         (gpgme_data_seek, gpgme_data_new_from_cbs, gpgme_data_new_from_fd,
1801         gpgme_data_new_from_stream): New prototypes.
1802         (gpgme_data_get_type, gpgme_check_engine): Prototype removed.
1803
1804         * Makefile.am (libgpgme_la_SOURCES): Add data.h, data-fd.c,
1805         data-stream.c, data-mem.c, data-user.c and data-compat.c.
1806         * data.c: Reimplemented from scratch.
1807         * (data-compat.c, data-fd.c, data.h, data-mem.c, data-stream.c,
1808         data-user.c): New file.
1809         * context.h (struct gpgme_data_s): Removed.
1810         * conversion.c: Include <errno.h> and <sys/types.h>.
1811         (_gpgme_data_append): New function.
1812         * data.c (_gpgme_data_append_string): Move to ...
1813         * conversion.c (_gpgme_data_append_string): ... here.
1814         * data.c (_gpgme_data_append_for_xml): Move to ...
1815         * conversion.c (_gpgme_data_append_for_xml): ... here.
1816         * data.c (_gpgme_data_append_string_for_xml): Move to ...
1817         * conversion.c (_gpgme_data_append_string_for_xml): ... here.
1818         * data.c (_gpgme_data_append_percentstring_for_xml): Move to ...
1819         * conversion.c (_gpgme_data_append_percentstring_for_xml): ... here.
1820
1821         * ops.h (_gpgme_data_get_mode, _gpgme_data_set_mode): Prototype
1822         removed.
1823         * types.h (GpgmeDataMode): Type removed.
1824
1825         * decrypt.c (_gpgme_decrypt_start): Don't check data type or mode.
1826         * edit.c (_gpgme_op_edit_start): Likewise.
1827         * encrypt.c (_gpgme_op_encrypt_start): Likewise.
1828         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
1829         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
1830         * export.c (_gpgme_op_export_start): Likewise.
1831         * genkey.c (_gpgme_op_genkey_start): Likewise.
1832         * import.c (_gpgme_op_import_start): Likewise.
1833         * sign.c (_gpgme_op_sign_start): Likewise.
1834         * verify.c (_gpgme_op_verify_start): Likewise.
1835         
1836         * encrypt.c (gpgme_op_encrypt): Remove hack that returns invalid
1837         no recipient if no data was returned.
1838         * encrypt-sign.c (gpgme_op_encrypt_sign): Remove hack that returns
1839         no recipient if no data was returned.
1840         * encrypt-sign.c (gpgme_op_encrypt_sign): Remove hack that returns
1841         no recipient if no data was returned.
1842
1843         * engine.c (_gpgme_engine_op_verify): Add new argument to
1844         differentiate detached from normal signatures.
1845         * engine.h (_gpgme_engine_op_verify): Likewise for prototype.
1846         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.  Don't check
1847         mode of data argument.
1848         * engine-gpgsm.h (_gpgme_gpgsm_op_verify): Likewise for prototype.
1849         * gpgme.h (gpgme_op_verify_start): Likewise for prototype.
1850         (gpgme_op_verify): Likewise for prototype.
1851         * rungpg.c (_gpgme_gpg_op_verify): Likewise.
1852         * rungpg.h (_gpgme_gpg_op_verify): Likewise for prototype.
1853         * verify.c (_gpgme_op_verify_start): Likewise.
1854         (gpgme_op_verify_start): Likewise.
1855         (gpgme_op_verify): Likewise.
1856
1857         * rungpg.c (struct arg_and_data_s): New member INBOUND to hold
1858         direction of data object.
1859         (_gpgme_gpg_add_data): Add new argument INBOUND.  Use it to
1860         determine direction of data object.
1861         (_gpgme_gpg_add_pm_data, _gpgme_gpg_set_command_handler,
1862         _gpgme_gpg_op_decrypt, _gpgme_gpg_op_edit, _gpgme_gpg_op_encrypt,
1863         _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
1864         _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_sign,
1865         _gpgme_gpg_op_verify): Add new argument to _gpgme_gpg_add_data
1866         invocation.
1867         (build_argv): Use new member INBOUND to determine direction of
1868         file descriptor.  Don't check the data type.
1869         * rungpg.h (_gpgme_gpg_add_data): Add new argument to prototype.
1870         
1871         * gpgme.c (gpgme_get_op_info): Don't call
1872         _gpgme_data_get_as_string if CTX->op_info is NULL.
1873
1874         * version.c (gpgme_check_engine): Function removed.
1875
1876 2002-09-30  Werner Koch  <wk@gnupg.org>
1877
1878         * keylist.c (keylist_colon_handler): Take care when printing a
1879         NULL with the DEBUG.
1880
1881         * engine-gpgsm.c (struct gpgsm_object_s): New member ANY.
1882         (gpgsm_status_handler): Run the colon function to indicate EOF.
1883         (_gpgme_gpgsm_set_colon_line_handler): Better reset ANY here.
1884
1885 2002-09-28  Marcus Brinkmann  <marcus@g10code.de>
1886
1887         * conversion.c (_gpgme_hextobyte): Prevent superfluous
1888         multiplication with base.  Reported by Stéphane Corthésy.
1889
1890         * keylist.c (gpgme_op_keylist_ext_start): Use private asynchronous
1891         operation type in invocation of _gpgme_op_reset.
1892
1893 2002-09-20  Werner Koch  <wk@gnupg.org>
1894
1895         * ath.c: Include sys/time.h if sys/select.h is not available.
1896
1897 2002-09-13  Marcus Brinkmann  <marcus@g10code.de>
1898
1899         * keylist.c (keylist_status_handler): Do not call finish_key() here.
1900         (gpgme_op_keylist_ext_start): Set CTX->tmp_key to NULL.
1901
1902 2002-09-03  Marcus Brinkmann  <marcus@g10code.de>
1903
1904         * Makefile.am (assuan_libobjs): Remove @LTLIBOBJS@ as we link them
1905         into gpgme unconditionally.
1906         (libgpgme_la_LIBADD): Change @LIBOBJS@ into @LTLIBOBJS@.
1907
1908 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
1909
1910         * Makefile.am (assuan_libobjs): Use @LTLIBOBJS@ instead @LIBOBJS@.
1911
1912 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
1913
1914         * debug.c (_gpgme_debug_add): Test *LINE, not LINE.
1915         (_gpgme_debug_end): Likewise.
1916         Reported by Dr. Stefan Dalibor <Dr.Stefan.Dalibor@bfa.de>.
1917
1918 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
1919
1920         * posix-io.c (_gpgme_io_select): Don't use a non-constant struct
1921         initializer.
1922         * version.c (_gpgme_get_program_version): Likewise.
1923         Reported by Dr. Stefan Dalibor <Dr.Stefan.Dalibor@bfa.de>.
1924
1925 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
1926
1927         * conversion.c (_gpgme_decode_c_string): Set DESTP before
1928         modifying DEST.
1929
1930         * conversion.c (_gpgme_decode_c_string): Fix off by one error in
1931         last change.
1932         * rungpg.c (_gpgme_append_gpg_args_from_signers): Move before
1933         _gpgme_op_edit so its prototype is known early on.
1934
1935         * conversion.c: New file.
1936         * util.h: Add prototypes for _gpgme_decode_c_string and
1937         _gpgme_hextobyte.
1938         * keylist.c (keylist_colon_handler): Call _gpgme_decode_c_string
1939         on issuer name.
1940         * Makefile.am (libgpgme_la_SOURCES): Add conversion.c
1941         * key.c (_gpgme_key_append_name): Replace calls to hextobyte by
1942         calls to _gpgme_hextobyte.
1943         (hash_key): Likewise.
1944
1945 2002-09-01  Marcus Brinkmann  <marcus@g10code.de>
1946
1947         * op-support.c (_gpgme_op_reset): Set CTX->pending after calling
1948         _gpgme_engine_release, as this will reset pending to zero in the
1949         event done callback on cancelled operations.
1950
1951 2002-08-30  Marcus Brinkmann  <marcus@g10code.de>
1952
1953         * rungpg.c (_gpgme_gpg_op_edit): Add args from signers.
1954         Suggested by Miguel Coca <e970095@zipi.fi.upm.es>.
1955
1956         * rungpg.c (_gpgme_gpg_op_edit): Add bogus ctx argument.
1957         * rungpg.h: Also to prototype.
1958         * engine.c (_gpgme_engine_op_edit): Likewise.
1959         * engine.h: Likewise.
1960         * edit.c (_gpgme_op_edit_start): Likewise.
1961
1962 2002-08-29  Werner Koch  <wk@gnupg.org>
1963
1964         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement signer
1965         selection.
1966         * vasprintf.c (va_copy): Define macro if not yet defined.
1967
1968 2002-08-29  Marcus Brinkmann  <marcus@g10code.de>
1969
1970         * passphrase.c (_gpgme_passphrase_status_handler): Reset
1971         CTX->result.passphrase->no_passphrase if passphrase is given (good
1972         or bad).  Submitted by Jean DIRAISON <jean.diraison@free.fr>.
1973
1974 2002-08-28  Marcus Brinkmann  <marcus@g10code.de>
1975
1976         * posix-io.c (_gpgme_io_spawn): Use a double-fork approach.
1977         Return 0 on success, -1 on error.
1978         * version.c (_gpgme_get_program_version): Don't wait for the child.
1979         * engine.c (_gpgme_engine_housecleaning): Function removed.
1980         (do_reaping): Likewise.
1981         (_gpgme_engine_add_child_to_reap_list): Likewise.
1982         (struct reap_s): Removed.
1983         (reap_list): Likewise.
1984         (reap_list_lock): Likewise.
1985         * engine.h (_gpgme_engine_io_event): Remove prototypes for
1986         _gpgme_engine_housecleaning and
1987         _gpgme_engine_add_child_to_reap_list.
1988         * rungpg.c (_gpgme_gpg_release): Don't add child to reap list.
1989         (struct gpg_object_s): Remove PID member.
1990         (_gpgme_gpg_new): Don't initialize GPG->pid.
1991         (_gpgme_gpg_spawn): Don't set GPG->pid.
1992         * wait.c (run_idle): Removed.
1993         (gpgme_wait): Run idle_function directly.
1994
1995 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
1996
1997         * encrypt-sign.c (encrypt_sign_status_handler): Remove dead
1998         variables encrypt_info and encrypt_info_len.
1999         * trustlist.c (gpgme_op_trustlist_start): Set colon line handler.
2000         * posix-sema.c (sema_fatal): Remove function.
2001         All these reported by Stéphane Corthésy.
2002
2003 2002-08-23  Werner Koch  <wk@gnupg.org>
2004
2005         * gpgme-config.in: Made --prefix work for --libs. 
2006
2007 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
2008
2009         * ath.h: Update list of symbols that get a prefix: Rename the
2010         ath_mutex_*_available symbols to ath_*_available.
2011
2012 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
2013
2014         * stpcpy.c: New file from gnulib.
2015         * Makefile.am (assuan_libobjs): Remove jnlib.
2016
2017 2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
2018
2019         * gpgme.h: Add prototype for gpgme_op_import_ext.
2020         * import.c (struct import_result_s): New member `nr_considered'.
2021         Rename `any_imported' to `nr_imported'.
2022         (import_status_handler): Increment nr_imported.  Set nr_considered
2023         if appropriate.
2024         (gpgme_op_import_ext): New function.
2025         (gpgme_op_import): Implement in terms of gpgme_op_import_ext.
2026
2027 2002-08-20  Werner Koch  <wk@gnupg.org>
2028
2029         * gpgme.m4: Replaced with a new and faster version.  This does not
2030         anymore try to build test programs.  If we really need test
2031         programs, we should add an option to gpgme-config to do so. 
2032
2033         * vasprintf.c (int_vasprintf): Hack to handle NULL passed for %s.
2034
2035 2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
2036
2037         * gpgme.c (_gpgme_set_op_info): Append data on subsequent calls.
2038         * encrypt-sign.c (encrypt_sign_status_handler): Remove op_info
2039         handling.
2040
2041 2002-08-19  Werner Koch  <wk@gnupg.org>
2042
2043         * decrypt.c (is_token,skip_token): Duplicated from verify.c
2044         (gpgme_op_decrypt): Hack to properly return Decryption_Failed..
2045         (_gpgme_decrypt_status_handler): Create an operation info.
2046
2047 2002-08-14  Werner Koch  <wk@gnupg.org>
2048
2049         * key.h (struct certsig_s): New.  Use it in gpgme_key_s.
2050         * key.c (gpgme_key_release): Release it. We need to add more code
2051         of course.
2052         (_gpgme_key_append_name): Use memset to intialize the struct.
2053         * gpgme.h (GPGME_KEYLIST_MODE_SIGS): New.
2054         * rungpg.c (_gpgme_gpg_op_keylist): Include sigs in listing depending
2055         non the list mode.
2056         
2057         * key.c (gpgme_key_get_string_attr): Use GPGME_ATTR_TYPE to return
2058         information about the key type (PGP or X.509).
2059         (gpgme_key_get_ulong_attr): Likewise.
2060
2061         * keylist.c (keylist_colon_handler): Include 1 in the check for
2062         valid algorithms so that RSA is usable.  Store the issuer name and
2063         serial number also for "crs" records.  Parse the expire date for
2064         subkeys.
2065         (set_userid_flags): Put them onto the last appended key.
2066
2067 2002-07-29  Marcus Brinkmann  <marcus@g10code.de>
2068
2069         * rungpg.c (_gpgme_gpg_op_edit): Use --with-colons.
2070
2071 2002-07-28  Marcus Brinkmann  <marcus@g10code.de>
2072
2073         * data.c (gpgme_data_read): For GPGME_DATA_TYPE_NONE, return EOF
2074         instead an error.
2075
2076         The following changes make it possible to flush an inbound data
2077         pipe before invoking a command handler:
2078
2079         * posix-io.c (_gpgme_io_select): Accept new argument NONBLOCK to
2080         _gpgme_io_select.  Set timeout of 0 if this is set.
2081         * w32-io.c (_gpgme_io_select): Likewise.
2082         * io.h: Add new argument NONBLOCK to _gpgme_io_select prototype.
2083         * wait.c (do_select): Add new argument to _gpgme_io_select
2084         invocation.
2085         * rungpg.h (_gpgme_gpg_set_command_handler): Add new argument
2086         linked_data to prototype.
2087         * engine.h (_gpgme_engine_set_command_handler): Likewise.
2088         * engine.c (_gpgme_engine_set_command_handler): Likewise.
2089         * passphrase.c (_gpgme_passphrase_start): Pass NULL as linked_data
2090         argument to _gpgme_engine_set_command_handler.
2091         * rungpg.c (struct gpg_object_s): New members linked_data and
2092         linked_idx in CMD.
2093         (_gpgme_gpg_new): Initialize those new members.
2094         (_gpgme_gpg_set_command_handler): Accept new argument linked_data.
2095         (build_argv): Handle linked_data in the same hack as cb_data.
2096         (read_status): If linked_data is in use, flush the pipe before
2097         activating the command handler.
2098         * gpgme.h: Add prototypes for gpgme_op_edit_start and
2099         gpgme_op_edit.
2100
2101         The next changes export the status codes to the user:
2102
2103         * decrypt.c (_gpgme_decrypt_status_handler): Likewise, also prefix
2104         all STATUS_ with GPGME_.
2105         * delete.c (delete_status_handler): Likewise.
2106         * decrypt-verify.c (decrypt_verify_status_handler): Likewise.
2107         * encrypt.c (_gpgme_encrypt_status_handler): Likewise.
2108         (_gpgme_encrypt_sym_status_handler): Likewise.
2109         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
2110         * engine-gpgsm.c (parse_status): Likewise.
2111         (gpgsm_status_handler): Likewise.
2112         (gpgsm_set_recipients): Likewise.
2113         * export.c (export_status_handler): Likewise.
2114         * genkey.c (genkey_status_handler): Likewise.
2115         * import.c (append_xml_impinfo): Likewise.
2116         (import_status_handler): Likewise.
2117         * keylist.c (keylist_status_handler): Likewise.
2118         * passphrase.c (_gpgme_passphrase_status_handler): Likewise.
2119         (command_handler): Likewise.
2120         * progress.c (_gpgme_progress_status_handler): Likewise.
2121         * sign.c (_gpgme_sign_status_handler): Likewise.
2122         * trustlist.c (trustlist_status_handler): Likewise.
2123         * verify.c (_gpgme_verify_status_handler): Likewise.
2124         * gpgme.h (GpgmeEditCb): New type.
2125         * rungpg.h (GpgStatusCode): Rename and move to ...
2126         * gpgme.h (GpgmeStatusCode): ... this and here.
2127         * Makefile.am (status-table.h): Run mkstatus on gpgme.h, not rungpg.h.
2128         * mkstatus: Prefix STATUS with GPGME_.
2129         * rungpg.h (GpgStatusHandler, GpgCommandHandler): Change type
2130         accordingly.
2131         * ops.h (_gpgme_verify_status_handler,
2132         _gpgme_decrypt_status_handler, _gpgme_sign_status_handler,
2133         _gpgme_encrypt_status_handler, _gpgme_passphrase_status_handler,
2134         _gpgme_progress_status_handler): Likewise.
2135         * rungpg.c (struct gpg_object_s): Likewise for CMD.code.
2136
2137         These changes add an edit operation to GPGME:
2138         
2139         * context.h (struct gpgme_context_s): New member RESULT.edit.  *
2140         ops.h: Add prototype for _gpgme_release_edit_result and
2141         _gpgme_passphrase_command_handler.
2142         * passphrase.c (command_handler): Make non-static and rename to ...
2143         (_gpgme_passphrase_command_handler): ... this.
2144         (_gpgme_passphrase_start): Use new name for command handler.
2145         * types.h: Add EditResult type.
2146         * gpgme.c (_gpgme_release_result): Release EDIT result.
2147         * edit.c: New file.
2148         * Makefile.am (libgpgme_la_SOURCES): Add edit.c.
2149         (libgpgme_la_LDADD): Rename to libgpgme_la_LIBADD, and include
2150         assuan_libobjs.
2151         (assuan_libobjs): New variable, set this instead
2152         libgpgme_la_LIBADD.
2153         * engine.h (_gpgme_engine_op_edit): New prototype.
2154         * engine.c (_gpgme_engine_op_edit): New function.
2155         * rungpg.h (_gpgme_gpg_op_edit): New prototype.
2156         * rungpg.c (_gpgme_gpg_op_edit): New function.
2157
2158 2002-07-27  Marcus Brinkmann  <marcus@g10code.de>
2159
2160         * delete.c (delete_problem): New case ambigious specification.
2161         (delete_status_handler): Handle new case (poorly).
2162
2163 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
2164
2165         * engine-gpgsm.c (_gpgme_gpgsm_op_delete): Implement this.
2166
2167 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
2168
2169         * Makefile.am (libgpgme_la_LDADD): Add @LIBOBJS@ for vasprintf and
2170         fopencookie.
2171         * vasprintf.c: Update to more recent libiberty version.
2172         * debug.h: Replace #elsif with #elif.
2173
2174         Submitted by Stéphane Corthésy:
2175         * util.h (vasprintf): Correct prototype.
2176         * encrypt-sign.c: Include <stddef.h>.
2177         (encrypt_sign_status_handler): Change type of ENCRYPT_INFO_LEN to
2178         size_t.
2179         * ath-pthread.c: Include <stdlib.h>, not <malloc.h>.
2180         * ath-pth.c: Likewise.
2181
2182 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
2183
2184         * wait.c (fdt_global): Make static.  Reported by Stéphane
2185         Corthésy.
2186
2187         * rungpg.c (_gpgme_gpg_op_keylist_ext): Skip empty string
2188         patterns.  Reported by Stéphane Corthésy.
2189
2190         * key.c (gpgme_key_get_as_xml): Add OTRUST attribute.  Requested
2191         by Stéphane Corthésy.
2192         (gpgme_key_get_string_attr): Add GPGME_ATTR_SIG_SUMMARY case to
2193         silence gcc warning.
2194
2195         * rungpg.c (_gpgme_gpg_new): Always set utf8 as charset.
2196
2197 2002-07-03  Marcus Brinkmann  <marcus@g10code.de>
2198
2199         * gpgme.c (gpgme_set_io_cbs): Deal with CTX being NULL.
2200
2201         * gpgme.c (_gpgme_op_event_cb_user): New function.
2202         * op-support.c (_gpgme_op_reset): Support a new mode of operation
2203         for private or user event loop.  Use new user event callback
2204         wrapper.
2205         * trustlist.c (gpgme_op_trustlist_start): Use this new mode.
2206         * keylist.c (gpgme_op_keylist_start): Likewise.
2207
2208         * rungpg.c (_gpgme_gpg_io_event): New function.
2209         * rungpg.h (_gpgme_gpg_io_event): New prototype.
2210         * engine-gpgsm.c (_gpgme_gpg_io_event): New function.
2211         * engine-gpgsm.h (_gpgme_gpgsm_io_event): New prototype.
2212         * engine.c (_gpgme_engine_io_event): New function.
2213         * engine.h (_gpgme_engine_io_event): New prototype.
2214         * keylist.c (finish_key): Call _gpgme_engine_io_event, and move
2215         the real work for the default IO callback routines to ...
2216         (_gpgme_op_keylist_event_cb): ... here.  New function.
2217         * trustlist.c (trustlist_colon_handler): Signal
2218         GPGME_EVENT_NEXT_TRUSTITEM.  Move queue manipulation to ...
2219         (_gpgme_op_trustlist_event_cb): ... here.  New function.
2220         * gpgme.c (_gpgme_op_event_cb): Call _gpgme_op_keylist_event_cb
2221         and _gpgme_op_trustlist_event_cb when appropriate.
2222         * ops.h (_gpgme_op_keylist_event_cb): New prototype.
2223         (_gpgme_op_trustlist_event_cb): Likewise.
2224         * op-support.c (_gpgme_op_reset): Add comment why we don't use the
2225         user provided event handler directly.
2226         * gpgme.h (GpgmeRegisterIOCb): Return GpgmeError value, and TAG in
2227         a pointer argument.
2228         * wait.c (_gpgme_add_io_cb): Likewise.
2229         * wait.h (_gpgme_add_io_cb): Likewise for prototype.
2230         * rungpg.c (_gpgme_gpg_add_io_cb): Call IO_CBS->add with new
2231         argument.  Fix up error handling.
2232         * engine-gpgsm.c (_gpgme_gpgsm_add_io_cb): Call IO_CBS->add with
2233         new argument, fix up error handling.
2234
2235 2002-07-03  Werner Koch  <wk@gnupg.org>
2236
2237         * encrypt.c (status_handler_finish): New.
2238         (_gpgme_encrypt_status_handler): Moved some code out to the new
2239         function and call this function also in case we get into the
2240         status handler with an error which might happen due to a kludge in
2241         engine-gpgsm.c
2242
2243 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
2244
2245         * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
2246         table (eg use synchronous mode).
2247
2248 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
2249
2250         * ops.h (_gpgme_wait_on_condition): Remove HANG argument from
2251         prototype and change return type to GpgmeError.
2252         (_gpgme_wait_one): New prototype.
2253         * wait.c (gpgme_wait): Replace with the meat from
2254         _gpgme_wait_on_condition here, and remove the support for
2255         conditions.
2256         (_gpgme_wait_on_condition): Remove HANG argument from prototype
2257         and change return type to GpgmeError.  Replace with meat from
2258         _gpgme_wait_one and add support for conditions.
2259         (_gpgme_wait_one): Just call _gpgme_wait_on_condition without
2260         condition.
2261         * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
2262         table (eg use synchronous mode).
2263         (gpgme_op_keylist_next): Remove HANG argument from
2264         _gpgme_wait_on_condition.  Check its return value.
2265         * trustlist.c (gpgme_op_trustlist_start): Always use our own FD
2266         table (eg use synchronous mode).
2267         (gpgme_op_trustlist_next): Remove HANG argument from
2268         _gpgme_wait_on_condition.  Check its return value.
2269         
2270 2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
2271
2272         * gpgme.h: Fix documentation of key attribute retrieval functions.
2273
2274 2002-06-26  Werner Koch  <wk@gnupg.org>
2275
2276         * engine-gpgsm.c (map_assuan_error): Map No_Data_Available to EOF.
2277
2278         * import.c (append_xml_impinfo): Kludge to print fingerprint
2279         instead of keyid for use with gpgsm.
2280         (import_status_handler): Set a flag to know whether any import
2281         occured.
2282         (gpgme_op_import): Reurn -1 if no certificate ewas imported.
2283
2284 2002-06-25  Werner Koch  <wk@gnupg.org>
2285
2286         * engine-gpgsm.c (_gpgme_gpgsm_set_io_cbs) [ENABLE_GPGSM]: Fixed
2287         function arguments.
2288
2289 2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
2290
2291         * engine-gpgsm.c (_gpgme_gpgsm_op_export): Only export the keys
2292         listed in RECP.
2293         * export.c (gpgme_op_export): If no data was returned, return
2294         GPGME_No_Recipients.
2295
2296 2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
2297
2298         * engine-gpgsm.c (_gpgme_gpgsm_op_export): Implement.
2299
2300 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
2301
2302         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return ERR.
2303         (parse_status): New function.
2304         (gpgsm_status_handler): Use parse_status.
2305         (gpgsm_assuan_simple_command): Accept new arguments STATUS_FNC and
2306         STATUS_FNC_VALUE and process status messages.
2307         (gpgsm_set_recipients): Pass new arugments to gpgsm_assuan_simple_command.
2308         (gpgsm_set_fd): Likewise.
2309         (_gpgme_gpgsm_op_keylist): Likewise.
2310         (_gpgme_gpgsm_op_keylist_ext): Likewise.
2311         (_gpgme_gpgsm_op_sign): Likewise.
2312
2313 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
2314
2315         * wait.c (_gpgme_remove_io_cb): Unlock FDT->lock.
2316
2317 2002-06-20  Werner Koch  <wk@gnupg.org>
2318
2319         * rungpg.c (build_argv): Ignore GPG_AGENT_INFO if set but empty.
2320
2321         * verify.c (calc_sig_summary): Set bad policy for wrong key usage.
2322         (skip_token): New.
2323         (_gpgme_verify_status_handler): Watch out for wrong key usage.
2324         (gpgme_get_sig_string_attr): Hack to return info on the key
2325         usage.  Does now make use of the former RESERVED argument which
2326         has been renamed to WHATIDX.
2327         (gpgme_get_sig_ulong_attr): Renamed RESERVED to WHATIDX.
2328
2329 2002-06-14  Marcus Brinkmann  <marcus@g10code.de>
2330
2331         * wait.c (do_select): Return -1 on error, and 0 if nothing to run.
2332         (_gpgme_wait_one): Only set HANG to zero if do_select returned an
2333         error, or there are no more file descriptors to wait on.
2334         (_gpgme_wait_on_condition): Ignore return value from do_select for
2335         now.
2336
2337 2002-06-13  Werner Koch  <wk@gnupg.org>
2338
2339         * verify.c (gpgme_op_verify): Make sure that we never access an
2340         unitialized result structure.
2341
2342 2002-06-12  Werner Koch  <wk@gnupg.org>
2343
2344         * keylist.c (struct keylist_result_s): New.
2345         (_gpgme_release_keylist_result): Release it here 
2346         (keylist_status_handler): Handle truncated.
2347         (append_xml_keylistinfo): New.
2348         * gpgme.c (_gpgme_release_result): and use it here.
2349         * types.h: Declare the new type here.
2350         * context.h (struct gpgme_context_s): Use it here.
2351
2352 2002-06-11  Marcus Brinkmann  <marcus@g10code.de>
2353
2354         * engine-gpgsm.c (_gpgme_gpgsm_release): Close status_cb.fd.
2355         (_gpgme_gpgsm_new): Duplicate status file descriptor, so we can
2356         use our own close notification mechanism without interfering with
2357         assuan.
2358
2359 2002-06-11  Werner Koch  <wk@gnupg.org>
2360
2361         * gpgme.h: Add GPGME_ATTR_SIG_SUMMARY and the GPGME_SIGSUM_
2362         constants.
2363         * verify.c (calc_sig_summary): New.
2364         (gpgme_get_sig_ulong_attr): And use it here.
2365
2366 2002-06-10  Werner Koch  <wk@gnupg.org>
2367
2368         * rungpg.h: Add new status codes TRUNCATED and ERROR.
2369         * verify.c (is_token, copy_token): New.
2370         (_gpgme_verify_status_handler): Use copy_token, handle the new
2371         ERROR status and store the errorcode used withgpgsm and trust
2372         status codes.
2373         * gpgme.h: New attribute ERRTOK.
2374         * key.c (gpgme_key_get_string_attr): Add dummy case for it.
2375         (gpgme_get_sig_string_attr): Use it here to return the last error.
2376
2377 2002-06-10  Marcus Brinkmann  <marcus@g10code.de>
2378
2379         * engine-gpgsm.c (_gpgme_gpgsm_start): Move the code that sets the
2380         close notification for the status fd to ...
2381         (_gpgme_gpgsm_new): ... here.
2382         * wait.h: Include "sema.h".  Remove prototypes of
2383         _gpgme_remove_proc_from_wait_queue and
2384         _gpgme_register_pipe_handler.  Add prototypes of
2385         _gpgme_fd_table_init, _gpgme_fd_table_deinit, _gpgme_fd_table_put,
2386         _gpgme_add_io_cb, _gpgme_remove_io_cb, _gpgme_wait_event_cb and
2387         _gpgme_wait_one..
2388         * wait.c: Remove global variables PROC_QUEUE, PROC_QUEUE_LOCK,
2389         FD_TABLE_SIZE, FD_TABLE, FD_TABLE_LOCK.  New global variables
2390         FDT_GLOBAL, CTX_DONE_LIST, CTX_DONE_LIST_SIZE,
2391         CTX_DONE_LIST_LENGTH and CTX_DONE_LIST_LOCK.  Remove struct
2392         proc_s.  Replace struct wait_item_s.
2393         (_gpgme_fd_table_init): New function.
2394         (_gpgme_fd_table_deinit): Likewise.
2395         (_gpgme_fd_table_put): Likewise.
2396         (set_process_done): Remove function.
2397         (do_select): Take argument FDT.  Use that to decide which fds to
2398         select on.
2399         (_gpgme_remove_proc_from_wait_queue): Remove function.
2400         (_gpgme_wait_event_cb): New function.
2401         (_gpgme_wait_one): Likewise.
2402         (_gpgme_register_pipe_hanldler): Remove function.
2403         (_gpgme_add_io_cb): New function.
2404         (_gpgme_remove_io_cb): Likewise.
2405         (_gpgme_freeze_fd): Remove function.
2406         (_gpgme_thaw_fd): Remove function.
2407         * rungpg.c (struct fd_data_map_s): Add new member TAG.
2408         (struct gpg_object_s): Likewise for STATUS and COLON.  Add member
2409         IDX to CMD.  Add new member IO_CBS.
2410         (close_notify_handler): New variables POSSIBLY_DONE and NOT_DONE.
2411         For each I/O callback, check if it should be unregistered.  If all
2412         callbacks have been unregistered, trigger GPGME_EVENT_DONE.
2413         Remove member RUNNING.
2414         (_gpgme_gpg_new): Initialize new members.
2415         (_gpgme_gpg_release): Check PID not RUNNING.  Don't call
2416         _gpgme_remove_proc_from_wait_queue.  Close GPG->CMD.FD if set.
2417         (build_argv): Store away the index instead the file descriptor for
2418         CMD.
2419         (_gpgme_gpg_add_io_cb): New function.
2420         (_gpgme_gpg_spawn): Use _gpgme_gpg_add_io_cb to register IO
2421         callbacks.
2422         (gpg_status_handler): Change return type to void, remove PID
2423         argument, close filedescriptor if EOF or error occurs.
2424         (read_status): Use _gpgme_gpg_add_io_cb instead _gpgme_thaw_fd.
2425         Use IO_CBS->remove instead _gpgme_freeze_fd.
2426         (gpg_colon_line_handler): Change return type to void, remove PID
2427         argument, close filedescriptor if EOF or error occurs.
2428         (command_cb): Use IO_CBS->remove instead _gpgme_freeze_fd.
2429         (_gpgme_gpg_set_io_cbs): New function.
2430         * rungpg.h (_gpgme_gpg_set_io_cbs): Prototype for
2431         _gpgme_gpg_set_io_cbs.
2432         * gpgme.h (GpgmeIOCb): New type.
2433         (GpgmeRegisterIOCb): Likewise.
2434         (GpgmeRemoveIOCb): Likewise.
2435         (GpgmeEventIO): Likewise.
2436         (GpgmeEventIOCb): Likewise.
2437         (struct GpgmeIOCbs): New structure to hold I/O callbacks.
2438         (gpgme_set_op_io_cbs): New prototype.
2439         (gpgme_get_op_io_cbs): Likewise.
2440         * ops.h: New prototype for _gpgme_op_event_cb.  Remove prototypes
2441         for _gpgme_freeze_fd and _gpgme_thaw_fd.  Remove PID argument from
2442         _gpgme_data_inbound_handler and _gpgme_data_outbound_handler
2443         prototype.  Add prototype for _gpgme_op_reset.
2444         Add synchronous argument to _gpgme_decrypt_start prototype.
2445         * io.h: Beautification.
2446         * gpgme.c: Include "wait.h".
2447         (gpgme_new): Initialize FDT.
2448         (gpgme_set_io_cbs): New function.
2449         (gpgme_get_io_cbs): Likewise.
2450         (_gpgme_op_event_cb): Likewise.
2451         * data.c (_gpgme_data_inbound_handler): Change return type to
2452         void.  Drop PID argument.  Close FD on error and EOF.
2453         (write_mem_data): Don't close FD here ...
2454         (write_cb_data): ... or here ...
2455         (_gpgme_data_outbound_handler): ... but here.  Change return type
2456         to void.  Drop PID argument.
2457         * context.h: Include "wait.h".
2458         (struct gpgme_context_s): New members FDT and IO_CBS.
2459         * op-support.c: New file.
2460         * Makefile.am (libgpgme_la_SOURCES): Add op-support.c.
2461         * ops.h: Add prototype for _gpgme_op_reset().
2462         * decrypt.c (_gpgme_decrypt_start): New argument SYNCHRONOUS.  Use
2463         _gpgme_op_reset.
2464         (gpgme_op_decrypt_start): Add synchronous argument.
2465         (gpgme_op_decrypt): Likewise.  Use _gpgme_wait_one instead
2466         gpgme_wait.
2467         * delete.c (gpgme_op_delete_start): Rename to ...
2468         (_gpgme_op_delete_start): ... this.  New argument SYNCHRONOUS.
2469         Use _gpgme_op_reset.  Make function static.
2470         (gpgme_op_delete_start): Just a wrapper around
2471         _gpgme_op_delete_start now.
2472         (gpgme_op_delete): Add synchronous argument.  Use _gpgme_wait_one
2473         instead gpgme_wait.
2474         * encrypt.c: Include "wait.h".
2475         (ggpgme_op_encrypt_start): Rename to ...
2476         (_gpgme_op_encrypt_start): ... this.  New argument SYNCHRONOUS.
2477         Use _gpgme_op_reset.  Make function static.
2478         (gpgme_op_encrypt_start): Just a wrapper around
2479         _gpgme_op_encrypt_start now.
2480         (gpgme_op_encrypt): Add synchronous argument.  Use _gpgme_wait_one
2481         instead gpgme_wait.
2482         * encrypt_sign.c (gpgme_op_encrypt_sign_start): Rename to ...
2483         (_gpgme_op_encrypt_sign_start): ... this.  New argument
2484         SYNCHRONOUS.  Use _gpgme_op_reset.  Make function static.
2485         (gpgme_op_encrypt_sign_start): Just a wrapper around
2486         _gpgme_op_encrypt_sign_start now.
2487         (gpgme_op_encrypt_sign): Add synchronous argument.  Use
2488         _gpgme_wait_one instead gpgme_wait.
2489         * export.c (gpgme_op_export_start): Rename to ...
2490         (_gpgme_op_export_start): ... this.  New argument SYNCHRONOUS.
2491         Use _gpgme_op_reset.  Make function static.
2492         (gpgme_op_export_start): Just a wrapper around
2493         _gpgme_op_export_start now.
2494         (gpgme_op_export): Add synchronous argument.  Use _gpgme_wait_one
2495         instead gpgme_wait.
2496         * genkey.c (gpgme_op_genkey_start): Rename to ...
2497         (_gpgme_op_genkey_start): ... this.  New argument SYNCHRONOUS.
2498         Use _gpgme_op_reset.  Make function static.
2499         (gpgme_op_genkey_start): Just a wrapper around
2500         _gpgme_op_genkey_start now.
2501         (gpgme_op_genkey): Add synchronous argument.  Use _gpgme_wait_one
2502         instead gpgme_wait.
2503         * import.c (gpgme_op_import_start): Rename to ...
2504         (_gpgme_op_import_start): ... this.  New argument SYNCHRONOUS.
2505         Use _gpgme_op_reset.  Make function static.
2506         (gpgme_op_import_start): Just a wrapper around
2507         _gpgme_op_import_start now.
2508         (gpgme_op_import): Add synchronous argument.  Use _gpgme_wait_one
2509         instead gpgme_wait.
2510         * keylist.c (gpgme_op_keylist_start): Use _gpgme_op_reset.
2511         (gpgme_op_keylist_ext_start): Likewise.
2512         * sign.c (gpgme_op_sign_start): Rename to ...
2513         (_gpgme_op_sign_start): ... this.  New argument SYNCHRONOUS.  Use
2514         _gpgme_op_reset.  Make function static.
2515         (gpgme_op_sign_start): Just a wrapper around _gpgme_op_sign_start
2516         now.
2517         (gpgme_op_sign): Add synchronous argument.  Use _gpgme_wait_one
2518         instead gpgme_wait.
2519         * trustlist.c (gpgme_op_trustlist_start): Use _gpgme_op_reset.
2520         * verify.c (gpgme_op_verify_start): Rename to ...
2521         (_gpgme_op_verify_start): ... this.  New argument SYNCHRONOUS.
2522         Use _gpgme_op_reset.  Make function static.
2523         (gpgme_op_verify_start): Just a wrapper around
2524         _gpgme_op_verify_start now.
2525         (gpgme_op_verify): Add synchronous argument.  Use _gpgme_wait_one
2526         instead gpgme_wait.
2527         * engine-gpgsm.c (iocb_data_t): New type.
2528         (struct gpgsm_object_s): New member status_cb.  Replace input_fd
2529         and input_data with input_cb.  Replace output_fd and output_data
2530         with output_cb.  Replace message_fd and message_data with
2531         message_cb.  New member io_cbs.
2532         (_gpgme_gpgsm_new): Initialize all new members (and drop the old
2533         ones).
2534         (close_notify_handler): New variable POSSIBLY_DONE.  For each I/O
2535         callback, check if it should be unregistered.  If all callbacks
2536         have been unregistered, trigger GPGME_EVENT_DONE.
2537         (_gpgme_gpgsm_release): Remove variable PID.  Use new variable
2538         names to close the file descriptors.
2539         (_gpgme_gpgsm_op_decrypt): Use new variable names,
2540         (_gpgme_gpgsm_op_encrypt): Likewise.
2541         (_gpgme_gpgsm_op_genkey): Likewise.
2542         (_gpgme_gpgsm_op_import): Likewise.
2543         (_gpgme_gpgsm_op_keylist): Likewise.
2544         (_gpgme_gpgsm_op_keylist_ext): Likewise.
2545         (_gpgme_gpgsm_op_sign): Likewise.
2546         (_gpgme_gpgsm_op_verify): Likewise.
2547         (gpgsm_status_handler): Drop argument PID.  Change return type to
2548         void.  Close status pipe before returning because of EOF or error.
2549         (_gpgme_gpgsm_add_io_cb): New function.
2550         (_gpgme_gpgsm_start): Use _gpgme_gpgsm_add_io_cb to register
2551         callback function.
2552         (_gpgme_gpgsm_set_io_cbs): New function.
2553         * engine-gpgsm.h: New prototype for _gpgme_gpgsm_set_io_cbs.
2554         * engine.c (_gpgme_engine_set_io_cbs): New function.
2555         * engine.h: New prototype for _gpgme_engine_set_io_cbs.
2556
2557 2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
2558
2559         * Makefile.am (libgpgme_la_SOURCES): Remove mutex.h.
2560
2561 2002-06-03  Marcus Brinkmann  <marcus@g10code.de>
2562
2563         * key.c: Include <ctype.h>.
2564         (_gpgme_key_append_name): Skip one more char when
2565         processing escaped char.  Submitted by Marc Mutz <mutz@kde.org>.
2566         Handle hexadecimal encodings.  Also reported by Marc.  Thanks!
2567
2568 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
2569
2570         * ath.h: Enable the _gpgme_ prefix.  Fix all those prefix macros.
2571         * posix-sema.c: Use that prefix here.
2572         * posix-io.c: Include "ath.h".
2573         (_gpgme_io_read): Use _gpgme_ath_read instead read.
2574         (_gpgme_io_write): Use _gpgme_ath_write instead write.
2575         (_gpgme_io_waitpid): Use _gpgme_ath_waitpid instead waitpid.
2576         (_gpgme_io_select): Use _gpgme_ath_select instead select.
2577
2578 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
2579
2580         * Makefile.am (ath_components): New variable.
2581         (ath_components_pthread): Likewise.
2582         (ath_components_pth): Likewise.
2583         (system_components): Add ath_componentes.
2584
2585         * ath.h: New file.
2586         * ath.c: Likewise.
2587         * ath-pthread.c: Likewise.
2588         * ath-pth.c: Likewise.
2589         * posix-sema.c (_gpgme_sema_cs_enter): Rework to use the ATH
2590         interface.
2591         * mutex.h: Remove file.
2592
2593 2002-05-30  Werner Koch  <wk@gnupg.org>
2594
2595         * key.c (gpgme_key_get_string_attr): Return NULL when asking for
2596         an issuer with IDX > 0.  We don't support altIssuerNames for now.
2597
2598 2002-05-22  Werner Koch  <wk@gnupg.org>
2599
2600         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Aehmm, added
2601         missing variable definition.  Oohh - Marcus was faster.
2602
2603 2002-05-22  Marcus Brinkmann  <marcus@gnu.org>
2604
2605         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Fix last change.
2606
2607 2002-05-21  Werner Koch  <wk@gnupg.org>
2608
2609         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist)
2610         (_gpgme_gpgsm_op_keylist_ext):  Pass the keylist mode to gpgsm.
2611
2612 2002-05-10  Werner Koch  <wk@gnupg.org>
2613
2614         * key.h (gpgme_key_s): Add OTRUST.
2615         * keylist.c (set_ownertrust): New.
2616         (keylist_colon_handler): Get the ownertrust value
2617         * key.c (gpgme_key_get_string_attr,gpgme_key_get_ulong_attr):
2618         Return that value.
2619
2620 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
2621
2622         * w32-util.c: New static variable GET_PATH_LOCK.
2623         (_gpgme_get_gpg_path): Remove superfluous NULL initializer.
2624         Take lock while determining path.
2625         (_gpgme_get_gpgsm_path): Likewise.
2626         * version.c (do_subsystem_inits): Set DONE to 1 after
2627         initialization.
2628         (gpgme_get_engine_info): New variable ENGINE_INFO_LOCK.  Take lock
2629         while determining engine info.
2630         * rungpg.c (_gpgme_gpg_get_version): New variable
2631         GPG_VERSION_LOCK.  Take the lock while determining the program
2632         version.
2633         * posix-io.c: Include "sema.h".
2634         (_gpgme_io_spawn): New variable FIXED_SIGNALS_LOCK.  Take the lock
2635         while fixing the signals.
2636         (_gpgme_io_select): Make READFDS and WRITEFDS non-static.
2637         * key.c: Include "sema.h".  New globals KEY_CACHE_LOCK and
2638         KEY_REF_LOCK.
2639         (capabilities_to_string): Make STRINGS very const.
2640         (_gpgme_key_cache_add): Lock the key cache.
2641         (_gpgme_key_cache_get): Likewise.
2642         (gpgme_key_ref, gpgme_key_release): Lock the key_ref_lock.
2643         * import.c (append_xml_impinfo): Make IMPORTED_FIELDS and
2644         IMPORT_RES_FIELDS very const.  Make FIELD and FIELD_NAME a litle
2645         const.
2646         * engine.c (_gpgme_engine_get_info): New variable
2647         ENGINE_INFO_LOCK.  Take lock while determining engine info.
2648         * engine-gpgsm.c: Include "sema.h".
2649         (_gpgme_gpgsm_get_version): New variable GPGSM_VERSION_LOCK.  Take
2650         lock while getting program version.
2651
2652 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
2653
2654         * debug.h: New file.
2655         * Makefile.am (libgpgme_la_SOURCES): Add debug.h.
2656         * util.h: Removed all prototypes and declarations related to
2657         debugging.  Include "debug.h".
2658
2659         * debug.c (debug_level): Comment variable and remove superfluous
2660         zero initializer.
2661         (errfp): Likewise.
2662         (_gpgme_debug_enabled): Function removed.
2663         (struct debug_control_s): Definition removed.
2664         (_gpgme_debug_level): Function removed.
2665         (_gpgme_debug_begin): Rewritten to use vasprintf.  Accept a
2666         pritnf-style format specification and a variable number of
2667         arguments.
2668         (_gpgme_debug_add): Rewritten using vasprintf.  Expect that format
2669         starts out with "%s" for simplicity.
2670         (_gpgme_debug_end): Rewritten using vasprintf.  Do not accept a
2671         TEXT argument anymore.
2672
2673         * posix-io.c (_gpgme_io_select): Use new level argument for
2674         DEBUG_BEGIN instead explicit if construct.
2675
2676         * debug.c (debug_init): Remove superfluous zero initializer,
2677         remove volatile flag of INITIALIZED.  Do not use the
2678         double-checked locking algorithm, it is fundamentally flawed and
2679         will empty your fridge (on a more serious note, despite the
2680         volatile flag it doesn't give you the guarantee you would expect,
2681         for example on a DEC Alpha or an SMP machine.  The volatile only
2682         serializes accesses to the volatile variable, but not to the other
2683         variables).
2684
2685 2002-05-03  Werner Koch  <wk@gnupg.org>
2686
2687         * engine-gpgsm.c (_gpgme_gpgsm_new): Redirect any gpgsm error
2688         output to /dev/null.
2689
2690         * verify.c (gpgme_get_sig_key): Set the protocol of the listctx.
2691         * gpgme.c (gpgme_get_protocol): New.
2692
2693         * data.c (gpgme_data_write): Changed type of BUFFER to void*.
2694         (gpgme_data_read): Ditto.
2695
2696         * verify.c (_gpgme_verify_status_handler): Handle TRUST_* status
2697         lines so that a claim can be made without looking up the key.
2698         (gpgme_get_sig_string_attr): New. 
2699         (gpgme_get_sig_ulong_attr): New.
2700
2701         * gpgme.h (GpgmeAttr): Added GPGME_ATTR_SIG_STATUS.
2702
2703         * rungpg.h: Add new status codes from gpg 1.0.7 and formatted the
2704         list to align with the status.h file from gnupg.
2705
2706         * gpgme.h (GpgmeSigStat): Add _GOOD_EXP and _GOOD_EXPKEY.
2707         * verify.c (_gpgme_verify_status_handler, finish_sig): Handle
2708         these new status codes.  Store the expiration time 
2709
2710 2002-04-27  Werner Koch  <wk@gnupg.org>
2711
2712         * gpgme.h (GpgmeData_Encoding): New.
2713         * data.c (gpgme_data_get_encoding,gpgme_data_set_encoding): New.
2714         * engine-gpgsm.c (map_input_enc): New. Use it in all local
2715         functions where the INPUT command gets send.
2716
2717 2002-04-27  Marcus Brinkmann  <marcus@g10code.de>
2718
2719         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Close the output
2720         descriptor only when we don't need it anymore.  Close the message
2721         descriptor if we don't need it.
2722
2723 2002-04-26  Werner Koch  <wk@gnupg.org>
2724
2725         * Makefile.am (libgpgme_la_LIBADD): Use libtool libraries.
2726
2727 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
2728
2729         * rungpg.c (_gpgme_gpg_release): Call gpgme_data_release on
2730         GPG->cmd.cb_data, not xfree.
2731
2732 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
2733
2734         * engine-gpgsm.c (_gpgme_gpgsm_new): Set the display, ttyname,
2735         ttytype, lc_ctype and lc_messages options in the server.
2736
2737 2002-04-24  Marcus Brinkmann  <marcus@g10code.de>
2738
2739         * engine-gpgsm.c (map_assuan_error): Add new error codes.
2740
2741 2002-04-23  Werner Koch  <wk@gnupg.org>
2742
2743         * key.c (gpgme_key_get_ulong_attr): Swapped use of can_encrypt and
2744         can_certify to return the requested values.
2745
2746 2002-04-23  Marcus Brinkmann  <marcus@g10code.de>
2747
2748         * gpgme.c (gpgme_get_progress_cb): Allow either return parameter
2749         to be NULL.
2750         (gpgme_get_passphrase_cb): Likewise.
2751
2752 2002-04-22  Marcus Brinkmann  <marcus@g10code.de>
2753
2754         * gpgme.c (gpgme_get_passphrase_cb): New function.
2755         (gpgme_get_progress_cb): New function.
2756         * gpgme.h: Add new prototypes for gpgme_get_passphrase_cb and
2757         gpgme_get_progress_cb.
2758
2759 2002-03-28  Werner Koch  <wk@gnupg.org>
2760
2761         * gpgme.h (GpgmeAttr): Add values for issuer and chaining.
2762         * key.h (gpgme_key_s): Add issuer and chaining elements for X509.
2763         * keylist.c (keylist_colon_handler): Store them.
2764         * key.c (gpgme_key_release): Free them.
2765         (gpgme_key_get_as_xml,gpgme_key_get_string_attr): Print them.
2766
2767 2002-03-26  Werner Koch  <wk@gnupg.org>
2768
2769         * Makefile.am (libgpgme_la_SOURCES): Add mutex.h
2770
2771 2002-03-21  Werner Koch  <wk@gnupg.org>
2772
2773         * util.h [!HAVE_FOPENCOOKIE]: Make sure off_t and ssize_t are
2774         defined.
2775
2776 2002-03-18  Marcus Brinkmann  <marcus@g10code.de>
2777
2778         * Makefile.am (system_components): New variable, set depending on
2779         HAVE_DOSISH_SYSTEM.
2780         (libgpgme_la_SOURCES): Use system_components.  Remove `syshdr.h'.
2781         * syshdr.h: File removed.
2782
2783         * posix-io.c: Remove !HAVE_DOSISH_SYSTEM safeguard.  Clean up source.
2784         * posix-sema.c: Likewise.
2785         * posix-util.c: Likewise.
2786
2787         * w32-io.c: Remove HAVE_DOSISH_SYSTEM safeguard.
2788         * w32-sema.c: Likewise.
2789         * w32-util.c: Likewise.
2790
2791         * posix-io.c: Include `unistd.h', do not include `syshdr.h'.
2792         * posix-sema.c: Likewise.
2793         * w32-io.c: Include `io.h', do not include `syshdr.h'
2794         * w32-sema.c: Likewise.
2795         * w32-util.c: Likewise.
2796         * data.c: Do not include `syshdr.h'.
2797         * wait.c: Likewise.
2798         * wait.h: Code cleanup.
2799
2800         * mutex.h: New file.
2801         * posix-sema.c: Implement.
2802
2803 2002-03-08  Werner Koch  <wk@gnupg.org>
2804
2805         * util.h [!HAVE_FOPENCOOKIE]: Fixed type.  Thanks to Frank Heckenbach.
2806
2807 2002-03-07  Werner Koch  <wk@gnupg.org>
2808
2809         * gpgme.h (gpgme_op_keylist_ext_start): Add prototype.
2810
2811 2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
2812
2813         * encrypt.c (_gpgme_encrypt_sym_status_handler): New function.
2814         (gpgme_op_encrypt_start): New variable SYMMETRIC, set it if RECP
2815         is null, and if it is set, use _gpgme_encrypt_sym_status_handler
2816         as status handler and run _gpgme_passphrase_start.
2817         * rungpg.c (_gpgme_gpg_op_encrypt): If RECP is zero, do symmetric
2818         encryption.
2819         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): If RECP is zero,
2820         return error value.
2821
2822         * rungpg.c (_gpgme_gpg_op_verify): Add "--" argument.
2823
2824 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
2825
2826         * passphrase.c (_gpgme_passphrase_status_handler): Also set the
2827         error No_Passphrase if only a bad passphrase was provided.
2828
2829 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
2830
2831         * rungpg.c (_gpgme_gpg_op_verify): If TEXT is of mode
2832         GPGME_DATA_MODE_IN, construct a command line that stores the
2833         plaintext in TEXT.
2834         * verify.c (gpgme_op_verify_start): Accept TEXT being
2835         uninitialized, and in this case interpret SIG as a normal or
2836         cleartext signature and TEXT as a return data object.
2837         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.
2838
2839 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
2840
2841         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext) [!ENABLE_GPGSM]:
2842         Add stub function.
2843
2844 2002-02-28  Werner Koch  <wk@gnupg.org>
2845
2846         * key.h (subkey_s): New member expires_at.
2847         * keylist.c (keylist_colon_handler): Set it here
2848         * key.c (gpgme_key_get_as_xml,gpgme_key_get_ulong_attr): Return it.
2849
2850 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
2851
2852         * rungpg.h (_gpgme_gpg_op_keylist_ext): New prototype.
2853         * rungpg.c (_gpgme_gpg_op_keylist_ext): New function.
2854         * engine-gpgsm.h (_gpgme_gpgsm_op_keylist_ext): New prototype.
2855         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): New function.
2856         * engine.h (_gpgme_engine_op_keylist_ext): New prototype.
2857         * engine.c (_gpgme_engine_op_keylist_ext): New function.
2858         * keylist.c (gpgme_op_keylist_ext_start): New function.
2859
2860 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
2861
2862         * gpgme.h: Add new error code GPGME_Invalid_Recipient.
2863         * encrypt.c (struct encrypt_result_s): New member invalid_recipients,
2864         rename no_recipients to no_valid_recipients.
2865         (_gpgme_encrypt_status_handler): Include error for invalid
2866         recipients.
2867         * engine-gpgsm.c (gpgsm_set_recipients): Change type of first
2868         argument to GpgsmObject.  Use that to report back the status about
2869         the recipients.
2870
2871 2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
2872
2873         * verify.c (_gpgme_verify_status_handler): Fix the last change.
2874
2875 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
2876
2877         * engine.c (_gpgme_engine_op_encrypt_sign): New function.
2878         * engine.h (_gpgme_engine_op_encrypt_sign): New prototype.
2879         * rungpg.c (_gpgme_append_gpg_args_from_signers): New function.
2880         (_gpgme_gpg_op_sign): Use that new function.
2881         (_gpgme_gpg_op_encrypt_sign): New function.
2882         * rungpg.h (_gpgme_gpg_op_encrypt_sign): New prototype. 
2883         * gpgme.h (gpgme_op_encrypt_sign_start): New prototype.
2884         (gpgme_op_encrypt_sign): Likewise.
2885         * Makefile.am (libgpgme_la_SOURCES): Add encrypt-sign.c.
2886         * ops.h (_gpgme_encrypt_status_handler): Add prototype.
2887         (_gpgme_sign_status_handler): Add prototype.
2888         * sign.c (sign_status_handler): Rename to ...
2889         (_gpgme_sign_status_handler): ... this and make non-static.
2890         * encrypt.c (encrypt_status_handler): Rename to ...
2891         (_gpgme_encrypt_status_handler): ... this and make non-static.
2892         * encrypt.c (gpgme_op_encrypt_start): Use new status handler name.
2893         * sign.c (gpgme_op_sign_start): Likewise.
2894         
2895 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
2896
2897         * verify.c (_gpgme_verify_status_handler): Parse the args line to
2898         see if the problem is due to a missing key, and report that back
2899         to the user.
2900
2901 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
2902
2903         * context.h (struct gpgme_context_s): New member include_certs.
2904         * gpgme.h (gpgme_set_include_certs): Add prototype.
2905         (gpgme_get_include_certs): Likewise.
2906         * gpgme.c (gpgme_set_include_certs): New function.
2907         (gpgme_get_include_certs): Likewise.
2908         (gpgme_new): Set include_certs to 1 (the default).
2909         * engine.c (_gpgme_engine_op_sign): Accept new argument include_certs,
2910         and pass it to _gpgme_gpgsm_op_sign.
2911         * engine.h (_gpgme_engine_op_sign): Likewise for prototype.
2912         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Accept new argument
2913         include_certs and handle it.
2914         * engine-gpgsm.h (_gpgme_gpgsm_start): Add new argument include_certs.
2915         * sign.c (gpgme_op_sign_start): Add new argument to
2916         _gpgme_engine_op_sign call.
2917
2918 2002-02-14  Werner Koch  <wk@gnupg.org>
2919
2920         * keylist.c (gpgme_op_keylist_start): Do not use a verbose listing.
2921
2922 2002-02-13  Werner Koch  <wk@gnupg.org>
2923
2924         * vasprintf.c, fopencookie.c: Add replacement functions.
2925         * util.h: Add prototypes for them.
2926
2927 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
2928
2929         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return 0 if we
2930         reach the end of the function.
2931
2932 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
2933
2934         * genkey.c (gpgme_op_genkey_start): Fix logic in validity check.
2935         (gpgme_op_genkey_start): Skip newlines after opening tag.
2936
2937         * engine-gpgsm.c (_gpgme_gpgsm_start): Remove cruft.
2938
2939 2002-02-08  Marcus Brinkmann  <marcus@g10code.de>
2940
2941         * genkey.c (gpgme_op_genkey_start): Allow PUBKEY and SECKEY to be
2942         set, and pass them down to the crypto engine.
2943         * engine-gpgsm.h (_gpgme_gpgsm_start): New arguments PUBKEY and SECKEY.
2944         * engine.h: Likewise.
2945         * rungpg.h (_gpgme_gpg_spawn): Likewise.
2946         * engine.c (_gpgme_engine_op_genkey): Likewise.  Use those
2947         arguments.
2948         * rungpg.c (_gpgme_gpg_op_genkey): Likewise.  Complain if those
2949         arguments are set.
2950         * engine-gpgsm.c (_gpgme_gpgsm_op_genkey): Likewise.  Implement
2951         function.
2952
2953         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Beautify comment.
2954
2955 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
2956
2957         * rungpg.c (_gpgme_gpg_op_keylist): Remove handling of keylist
2958         mode (for now).
2959
2960 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
2961
2962         * wait.c (gpgme_wait): Add new argument STATUS, in which the
2963         status of the returned context is returned.
2964         (_gpgme_wait_on_condition): Rework the function a bit, to make it
2965         aware of cancelled processes, and to allow to use gpgme_wait with
2966         CTX being NULL (as documented in the source).
2967         (struct proc_s): New member REPORTED.
2968         * gpgme.h: Fix prototype.
2969         * verify.c (gpgme_op_verify): Fix use of gpgme_wait.
2970         * sign.c (gpgme_op_sign): Likewise.
2971         * import.c (gpgme_op_import): Likewise.
2972         * genkey.c (gpgme_op_genkey): Likewise.
2973         * export.c (gpgme_op_export): Likewise.
2974         * encrypt.c (gpgme_op_encrypt): Likewise.
2975         * delete.c (gpgme_op_delete): Likewise.
2976         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
2977
2978 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
2979
2980         * gpgme.c (gpgme_set_keylist_mode): Possibly return an error
2981         value.
2982         (gpgme_get_keylist_mode): New function.
2983         (gpgme_new): Set the default for keylist_mode member of CTX.
2984
2985         * gpgme.h (gpgme_set_keylist_mode): Fix prototype.
2986         (gpgme_get_keylist_mode): New prototype.
2987         (GPGME_KEYLIST_MODE_LOCAL): New macro.
2988         (GPGME_KEYLIST_MODE_EXTERN): Likewise..
2989
2990 2002-02-02  Marcus Brinkmann  <marcus@g10code.de>
2991
2992         This patch has gotten a bit large... mmh.  The main thing that
2993         happens here is that error values are now not determined in the
2994         operation function after gpgme_wait completed, but in the status
2995         handler when EOF is received.  It should always be the case that
2996         either an error is flagged or EOF is received, so that after a
2997         gpgme_wait you should never have the situation that no error is
2998         flagged and EOF is not received.  One problem is that the engine
2999         status handlers don't have access to the context, a horrible
3000         kludge works around this for now.  All errors that happen during a
3001         pending operation should be catched and reported in ctx->error,
3002         including out-of-core and cancellation.  This rounds up neatly a
3003         couple of loose ends, and makes it possible to pass up any errors
3004         in the communication with the backend as well.  As a bonus, there
3005         will be a function to access gpgme->wait, so that the operations
3006         can truly be implemented with their _start function.
3007
3008         * engine-gpgsm.c (gpgsm_status_handler): Horrible kludge to report
3009         error back to the context.
3010         * rungpg.c (gpg_status_handler): Same horrible kludge applied here.
3011
3012         * engine-gpgsm.c (gpgsm_assuan_simple_command): Add error checking.
3013
3014         * wait.c (_gpgme_wait_on_condition): If canceled, set CTX->error
3015         to a value indication that.
3016
3017         * verify.c (add_notation): Set error, not out_of_core.
3018         (finish_sig): Likewise.
3019         (gpgme_op_verify_start): Don't clear out_of_core.
3020         (_gpgme_verify_status_handler): At EOF, clean up the notation data.
3021         (gpgme_op_verify): And don't do it here.
3022
3023         * trustlist.c (trustlist_status_handler): Check error, not out_of_core.
3024         (gpgme_op_trustlist_start): Don't clear out_of_core.
3025         (gpgme_op_trustlist_next): Check error, not out_of_core.
3026         (gpgme_op_trustlist_end): Likewise.
3027
3028         * ops.h (test_and_allocate_result): New macro.
3029         (_gpgme_passphrase_result): Remove prototype.
3030         * delete.c (gpgme_op_delete): Return error from context.
3031         (delete_status_handler): Use macro test_and_allocate_result.
3032         Perform error checking at EOF.
3033         (gpgme_op_delete_start): Release result.
3034         * passphrase.c (_gpgme_passphrase_status_handler): Use macro
3035         test_and_allocate_result, and perform error checking here.
3036         (_gpgme_passphrase_result): Function removed.
3037         * sign.c (gpgme_op_sign_start): Do not set out_of_core to zero.
3038         (gpgme_op_sign): Just return the error value from the context.
3039         (sign_status_handler): Only progress if no error is set yet.  If
3040         we process an EOF, set the resulting error value (if any).
3041         * decrypt.c (_gpgme_decrypt_result): Function removed.
3042         (create_result_struct): Function removed.
3043         (_gpgme_decrypt_status_handler): Use macro test_and_allocate_result,
3044         caclulate error on EOF, do not progress with errors.
3045         (_gpgme_decrypt_start): Do not set out_of_core to zero.
3046         (gpgme_op_decrypt): Just return the error value from the context.
3047         * encrypt.c (encrypt_status_handler): Perform the error checking
3048         here.
3049         (gpgme_op_encrypt_start): Do not clear out_of_core.
3050         * export.c (export_status_handler): Return if error is set in context.
3051         (gpgme_op_export_start): Release result.
3052         (gpgme_op_export): Return error from context.
3053         * decrypt-verify.c (gpgme_op_decrypt_verify): Return the error in
3054         the context.
3055         * genkey.c (genkey_status_handler): Use macro
3056         test_and_allocate_result.  Perform error checking at EOF.
3057         (gpgme_op_genkey): Just return the error from context.
3058         * import.c (gpgme_op_import): Return the error from context.
3059         (import_status_handler): Use macro test_and_allocate_result.
3060         * keylist.c (gpgme_op_keylist_start): Do not clear out_of_core.
3061         (gpgme_op_keylist_next): Return error of context.
3062         (keylist_colon_handler): Set error instead out_of_code.
3063         (finish_key): Likewise.
3064
3065         * context.h: Remove member out_of_core, add member error.
3066         * gpgme.c (_gpgme_release_result): Clear error flag.
3067
3068         * engine.h (_gpgme_engine_get_error): New prototype.
3069         * engine.c (_gpgme_engine_get_error): New function.
3070         * engine-gpgsm.c (_gpgme_gpgsm_get_error): New function.
3071
3072         * engine-gpgsm.c (map_assuan_error): New function.
3073         (gpgsm_assuan_simple_command): Change return type to GpgmeError,
3074         use the new function to map error values.
3075         (gpgsm_set_fd): Change return type tp GpgmeError.
3076         (_gpgme_gpgsm_op_decrypt): Change type of ERR to GpgmeError.
3077         (gpgsm_set_recipients): Likewise.  Change type of return value
3078         equivalently.  Adjust error values.
3079         (_gpgme_gpgsm_op_import): Likewise.
3080         (_gpgme_gpgsm_op_sign): Likewise.
3081         (struct gpgsm_object_s): New member error.
3082         (gpgsm_status_handler): Set error if error occurs.  Determine
3083         error number from ERR line received.  If assuan_read_line fails,
3084         terminate the connection.
3085
3086 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
3087
3088         * Makefile.am (MOSTLYCLEANFILES): New variable.
3089
3090 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
3091
3092         * engine-gpgsm.c (gpgsm_status_handler): At error, terminate the
3093         connection to the server.
3094
3095 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
3096
3097         * rungpg.h: Add STATUS_KEY_CREATED.
3098
3099         * progress.c: New file.
3100         * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
3101
3102         * genkey.c (genkey_status_handler): Use
3103         _gpgme_progress_status_handler.  Add check for status.
3104         (struct genkey_result_s): New structure.
3105         (_gpgme_release_genkey_result): New function.
3106         (gpgme_op_genkey): Check for error.
3107         * gpgme.c (_gpgme_release_result): Call
3108         _gpgme_release_genkey_result.
3109         * ops.h (_gpgme_release_genkey_result): Add prototype.
3110         * types.h (GenKeyResult): New type.
3111         * context.h (gpgme_context_s): Add GenKeyResult to member result.
3112
3113 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
3114
3115         * gpgme.c (_gpgme_release_result): Call
3116         _gpgme_release_delete_result.
3117         * ops.h (_gpgme_release_delete_result): Add prototype.
3118         * types.h (DeleteResult): New type.
3119         * context.h (gpgme_context_s): Add DeleteResult to member result.
3120
3121         * delete.c (enum delete_problem): New type.
3122         (struct delete_result_s): New structure.
3123         (_gpgme_release_delete_result): New function.
3124         (delete_status_handler): Implement more status codes.
3125         (gpgme_op_delete): Return error on failure.
3126
3127         * import.c (MAX_IMPORTED_FIELDS): Bump up to 14.
3128
3129 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
3130
3131         * import.c (struct import_result_s): New structure.
3132         (_gpgme_release_import_result): New function.
3133         (append_xml_impinfo): Likewise.
3134         (import_status_handler): Implement.
3135         * gpgme.c (_gpgme_release_result): Add call to
3136         _gpgme_release_import_result.
3137         * ops.h (_gpgme_release_import_result): Add prototype.
3138         * types.h (ImportResult): New type.
3139         * context.h (gpgme_context_s): Add ImportResult to member result.
3140
3141         * encrypt.c (gpgme_op_encrypt): Code clean up.
3142
3143 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
3144
3145         * gpgme.h: Add lots of comment and fix the formatting.  Add
3146         gpgme_trustlist_end prototype.
3147
3148 2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
3149
3150         * gpgme.h: Add new type GpgmeIdleFunc.  Change type of
3151         gpgme_register_idle to return and accept this type.
3152         * wait.c (gpgme_register_idle): Fix type.
3153         Save and return old value of idle_function.
3154
3155 2002-01-29  Werner Koch  <wk@gnupg.org>
3156
3157         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode.
3158
3159         * keylist.c (keylist_colon_handler): Add support for the new "crs"
3160         record type.
3161
3162 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
3163
3164         * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect,
3165         not assuan_pipe_disconnect.
3166
3167         * Makefile.am (libgpgme_la_LIBADD): Change to link assuan and
3168         jnlib (needed by assuan) statically into libgpgme.  Linking a
3169         static library into a shared library this way is not portable.
3170
3171 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
3172
3173         * gpgme.h (GpgmePassphraseCb): Change type of R_HD from void* to
3174         void**.
3175
3176 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
3177
3178         * data.c (gpgme_data_new_from_filepart): Change type of LENGTH
3179         from off_t to size_t.
3180         * gpgme.h: Likewise.
3181
3182 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
3183
3184         * wait.c (_gpgme_wait_on_condition): If the process finished,
3185         reset the pending flag.  Also if the operation was cancelled.
3186
3187         (struct proc_s): Rename READY to DONE.
3188         (wait_item_s): Likewise.
3189         (set_process_ready): Rename to ...
3190         (set_process_done): ... this.
3191         (_gpgme_remove_proc_from_wait_queue): Call set_process_done
3192         instead set_process_ready.
3193         (_gpgme_wait_on_condition): Likewise.
3194         (do_select): Rename READY to DONE.
3195
3196         * verify.c (gpgme_op_verify): Do not set pending to zero here.
3197         * sign.c (gpgme_op_sign): Likewise.
3198         * import.c (gpgme_op_import): Likewise.
3199         * genkey.c (gpgme_op_genkey): Likewise.
3200         * export.c (gpgme_op_export): Likewise.
3201         * encrypt.c (gpgme_op_encrypt): Likewise.
3202         * delete.c (gpgme_op_delete): Likewise.
3203         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
3204         * decrypt.c (gpgme_op_decrypt): Likewise.
3205
3206 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
3207
3208         * export.c: Cleanup.
3209
3210 2002-01-15  Marcus Brinkmann  <marcus@g10code.de>
3211
3212         * trustlist.c: Various source clean ups.
3213         (my_isdigit): Removed.
3214         (gpgme_op_trustlist_end): New function.
3215
3216 2002-01-13  Marcus Brinkmann  <marcus@g10code.de>
3217
3218         * gpgme.c: Various source clean ups, like renaming C to CTX where
3219         appropriate.
3220         (gpgme_new): Clear R_CTX before starting the work.
3221         (my_isdigit): Removed.
3222         (my_isxdigit): Likewise.
3223
3224         * data.c: Various source clean ups.
3225         (gpgme_data_new_from_mem): Check BUFFER after clearing R_DH.
3226         (gpgme_data_new_with_read_cb): Similar for READ_CB.
3227         (gpgme_data_new_from_file): Loop over fread while EINTR.
3228         (gpgme_data_new_from_filepart): Rediddled a bit.  Allow LENGTH to
3229         be zero.  Loop over fread while EINTR.
3230
3231         (my_isdigit): Removed.
3232         (my_isxdigit): Likewise.
3233
3234 2001-12-21  Marcus Brinkmann  <marcus@g10code.de>
3235
3236         * engine-gpgsm.c (_gpgme_gpgsm_new): Replace General_Error with
3237         Pipe_Error where appropriate.
3238
3239 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
3240
3241         * engine.c: Include `string.h'.  Reported by Stéphane Corthésy.
3242
3243         * version.c (get_engine_info): Remove prototype.
3244
3245 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
3246
3247         * engine-gpgsm.c (_gpgme_gpgsm_new): New variable CHILD_FDS.
3248         Fill it with the servers fds, and pass it to assuan_pipe_connect.
3249
3250 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
3251
3252         * keylist.c (gpgme_op_keylist_end): New function.
3253         * gpgme.h (gpgme_op_keylist_end): New prototype.
3254
3255         * engine.h (gpgme_engine_check_version): Move prototype to ...
3256         * gpgme.h (gpgme_engine_check_version): ... here.
3257
3258         * genkey.c (gpgme_op_genkey_start): Remove unused variable.
3259
3260 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
3261
3262         * version.c (gpgme_get_engine_info): Reimplemented.
3263         (gpgme_check_engine): Reimplemented.
3264         (_gpgme_compare_versions): Return NULL if MY_VERSION is NULL.
3265
3266         * engine.c: Include `io.h'.
3267         (gpgme_engine_get_info): New function.
3268         * engine.h (gpgme_engine_check_version, _gpgme_engine_get_info):
3269         Add prototype.
3270
3271 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
3272
3273         * rungpg.c (struct reap_s, reap_list, reap_list_lock): Moved to ...
3274         * engine.c (struct reap_s, reap_list, reap_list_lock): ... here.
3275         Include `time.h', `sys/types.h', `assert.h', and `sema.h'.
3276
3277         * rungpg.c (_gpgme_engine_add_child_to_reap_list): New function.
3278         (do_reaping, _gpgme_gpg_housecleaning): Moved to ...
3279         * engine.c (do_reaping, _gpgme_engine_housecleaning): ... here.
3280         * rungpg.c (_gpgme_gpg_release): Replace code that is now in its
3281         own function by call to _gpgme_engine_add_child_to_reap_list().
3282
3283         * wait.c: Include `engine.h'.
3284         (run_idle): Call _gpgme_engine_housecleaning(), not
3285         _gpgme_gpg_housecleaning().
3286         
3287 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
3288
3289         * key.c (_gpgme_key_append_name): Append, not prepend, the uid.
3290         Initialize the next field of the uid structure.
3291         (gpgme_key_get_as_xml): Do not list last uid first.
3292
3293 2001-12-17  Marcus Brinkmann  <marcus@g10code.de>
3294
3295         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New
3296         function [!ENABLE_GPGSM].
3297
3298 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
3299
3300         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Put TEXT into
3301         message_data, not SIG.
3302         (_gpgme_gpgsm_op_sign): Use `--detached', not `--detach'.
3303
3304         * sign.c (sign_status_handler): Call
3305         _gpgme_passphrase_status_handler early.
3306
3307 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
3308
3309         * engine-gpgsm.c: Revert last change.
3310
3311 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
3312
3313         * engine-gpgsm.c (gpgsm_status_handler): Freeze the output file
3314         handler when ending this operation, otherwise the wait function
3315         will sit on it.
3316
3317 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
3318
3319         * engine-gpgsm.c (struct gpgsm_object_s): New member colon.attic.
3320         (_gpgme_gpgsm_new): Initialize some more members.
3321         (_gpgme_gpgsm_release): Free the colon line handler's attic line.
3322         (gpgsm_status_handler): Rework the inline-data processing.
3323
3324 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
3325
3326         * rungpg.c (_gpgme_gpg_spawn): Do not add the fds to the child
3327         list that are not dup'ed, for those the close-on-exec flag is set
3328         now.
3329         * version.c (_gpgme_get_program_version): Remove first entry in
3330         CFD, as the close-on-exec flag is now set for this fd.
3331
3332 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
3333
3334         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): Do not add `armor'
3335         option to `ENCRYPT'.
3336         * engine-gpgsm.c (gpgsm_set_recipients): Free LINE when returning
3337         successfully.
3338
3339 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
3340
3341         * engine-gpgsm.c (close_notify_handler): New function.
3342         (_gpgme_gpgsm_new): Manage the file descriptors a
3343         bit differently.  Do not set close-on-exec flags.
3344         (_gpgme_gpgsm_op_decrypt): Do not set message_fd
3345         to -1, this is done by the close handler.
3346         (_gpgme_gpgsm_op_encrypt): Likewise.
3347         (_gpgme_gpgsm_op_import): Likewise (also for output_fd).
3348         (_gpgme_gpgsm_op_keylist): Likewise (also for input_fd and output_fd).
3349         (_gpgme_gpgsm_op_sign): Likewise.
3350         (_gpgme_gpgsm_op_verify): Likewise, but for output_fd.
3351
3352         * posix-io.c (_gpgme_io_pipe): Set the close-on-exec flag for the
3353         non-inherited file descriptor index of the pipe.
3354
3355 2001-12-13  Werner Koch  <wk@gnupg.org>
3356
3357         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New.
3358         (gpgsm_status_handler): Pass datalines to a colon handler
3359         * engine.c (_gpgme_engine_set_colon_line_handler): Set the colon
3360         handler for gpgsm.
3361
3362         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Allow NULL for
3363         pattern.
3364         (gpgsm_assuan_simple_command): Removed underscore from
3365         assuan_write_line.
3366         (_gpgme_gpgsm_start): Ditto.
3367         (gpgsm_assuan_simple_command): Replaced interal Assuan read
3368         function by the new assuan_read_line.  Removed the use of the
3369         internal header.
3370         (gpgsm_status_handler): Ditto. Use the new assuan_pending_line.
3371         (_gpgme_gpgsm_start): Use the documented way to get an fd from
3372         assuan.
3373
3374         * keylist.c (keylist_colon_handler): Handle "crt" records
3375         * key.h (gpgme_key_s): Add an x509 flag.
3376         * key.c (parse_x509_user_id): New.
3377         (_gpgme_key_append_name): Handle x.509 names.
3378
3379 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
3380
3381         * engine-gpgsm.c (gpgsm_status_handler): Make it work with current
3382         version of assuan.
3383
3384 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
3385
3386         * engine-gpgsm.c (gpgsm_set_fd): Accept one more argument OPT.
3387         (_gpgme_gpgsm_op_encrypt): Pass armor argument to gpgsm_set_fd for
3388         output descriptor.
3389         (_gpgme_gpgsm_op_sign): Likewise.
3390
3391 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
3392
3393         * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
3394         occurs.
3395
3396 2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
3397
3398         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
3399
3400 2001-11-24  Marcus Brinkmann  <marcus@g10code.de>
3401
3402         * engine-gpgsm.c (gpgsm_status_handler): Don't break if bsearch fails.
3403         Deal with assuan read line returning more than one line (for now).
3404
3405 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
3406
3407         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement it according to
3408         the current protocol definition.
3409
3410 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
3411
3412         * engine-gpgsm.c (_gpgme_gpgsm_new): Set CLOEXEC flag for parent
3413         ends of the pipe.
3414
3415 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
3416
3417         * engine-gpgsm.c: Include stdlib.h and string.h.  Also include,
3418         for now, rungpg.h and status-table.h.
3419         (gpgsm_status_handler): Implement more of the status handler.
3420
3421 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
3422
3423         * engine.c (_gpgme_engine_op_decrypt): Implement CMS case.
3424         (_gpgme_engine_op_delete): Likewise.
3425         (_gpgme_engine_op_encrypt): Likewise.
3426         (_gpgme_engine_op_export): Likewise.
3427         (_gpgme_engine_op_genkey): Likewise.
3428         (_gpgme_engine_op_keylist): Likewise.
3429         (_gpgme_engine_op_sign): Likewise.
3430         (_gpgme_engine_op_trustlist): Likewise.
3431
3432         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): New function.
3433         (gpgsm_assuan_simple_command): Likewise.
3434         (gpgsm_set_recipients): Likewise.
3435         (gpgsm_set_fd): Reimplement using gpgsm_assuan_simple_command.
3436         (_gpgme_gpgsm_op_delete): New function.
3437         (_gpgme_gpgsm_op_export): Likewise.
3438         (_gpgme_gpgsm_op_genkey): Likewise.
3439         (_gpgme_gpgsm_op_sign): Likewise.
3440         (_gpgme_gpgsm_op_keylist): Likewise.
3441         (_gpgme_gpgsm_op_trustlist): Likewise.
3442         (_gpgme_gpgsm_release): Release command.
3443         (_gpgme_gpgsm_op_decrypt): Allocate command.
3444         (_gpgme_gpgsm_op_import): Likewise.
3445         (gpgsm_status_handler): Also treat `ERR' strings as EOF.
3446
3447 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
3448
3449         * gpgme.h (gpgme_set_protocol): New prototype.
3450
3451 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
3452
3453         * engine-gpgsm.c (_gpgme_gpgsm_op_decrypt): New function.
3454         (_gpgme_gpgsm_op_import): Likewise.
3455
3456 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
3457
3458         * engine-gpgsm.c: Shuffle around header inclusion a bit, to still
3459         keep them seperate.
3460         (_gpgme_set_status_handler) [!ENABLE_GPGSM]: New function.
3461
3462 2001-11-22  Werner Koch  <wk@gnupg.org>
3463
3464         * engine-gpgsm.c: Include more headers so that NULL and mk_error
3465         is defined even with an undefined GPGSM_PATH.
3466
3467 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
3468
3469         * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
3470         gpg_outbound_handler): Moved to ...
3471         * data.c (_gpgme_data_inbound_handler, write_mem_data,
3472         write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
3473         _gpgme_* ones non-static.
3474         * data.c: Include io.h.
3475
3476         * ops.h (_gpgme_data_inbound_handler): New prototype.
3477         (_gpgme_data_outbound_handler): Likewise.
3478         (_gpgme_gpg_spawn): Use these new functions.
3479
3480         * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
3481         _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
3482         _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
3483         _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
3484         _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
3485         _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
3486         Include <rungpg.h> for status handler function.
3487
3488         * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
3489         input_data, output_fd, output_data, message_fd, message_data, command
3490         and status.
3491         (_gpgme_gpgsm_new): Open input, output and message pipes before
3492         connecting to the client.  Close server's ends afterwards.
3493         (_gpgme_gpgsm_release): Close open file descriptors.  Remove
3494         server process from wait queue.
3495         (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
3496         _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
3497         
3498         * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
3499         (_gpgme_engine_set_status_handler): Likewise.
3500         (_gpgme_engine_op_verify): Likewise.
3501
3502 2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
3503
3504         * context.h: Do not include rungpg.h, but engine.h.
3505         (struct gpgme_context_s): Replace member gpg with engine.
3506         * gpgme.c (gpgme_release): Release engine, not gpg.
3507
3508         * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
3509         moved ...
3510         * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
3511         Make static, change order of arguments, and return an error value.
3512         * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
3513
3514         * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
3515         (_gpgme_gpg_op_encrypt): Likewise.
3516         (_gpgme_gpg_op_decrypt): Likewise.
3517         (_gpgme_gpg_op_delete): Likewise.
3518         (_gpgme_gpg_op_export): Likewise.
3519         (_gpgme_gpg_op_genkey): Likewise.
3520         (_gpgme_gpg_op_import): Likewise.
3521         (_gpgme_gpg_op_keylist): Likewise.
3522         (_gpgme_gpg_op_sign): Likewise.
3523         (_gpgme_gpg_op_trustlist): Likewise.
3524         * rungpg.c (_gpgme_gpg_op_verify): New function.
3525         (_gpgme_gpg_op_encrypt): Likewise.
3526         (_gpgme_gpg_op_decrypt): Likewise.
3527         (_gpgme_gpg_op_delete): Likewise.
3528         (_gpgme_gpg_op_export): Likewise.
3529         (_gpgme_gpg_op_genkey): Likewise.
3530         (_gpgme_gpg_op_import): Likewise.
3531         (_gpgme_gpg_op_keylist): Likewise.
3532         (_gpgme_gpg_op_sign): Likewise.
3533         (_gpgme_gpg_op_trustlist): Likewise.
3534
3535         * engine.h (_gpgme_engine_set_status_handler): Add prototype.
3536         (_gpgme_engine_set_command_handler): Likewise.
3537         (_gpgme_engine_set_colon_line_handler): Likewise.
3538         (_gpgme_engine_op_decrypt): Likewise.
3539         (_gpgme_engine_op_delete): Likewise.
3540         (_gpgme_engine_op_encrypt): Likewise.
3541         (_gpgme_engine_op_export): Likewise.
3542         (_gpgme_engine_op_genkey): Likewise.
3543         (_gpgme_engine_op_import): Likewise.
3544         (_gpgme_engine_op_keylist): Likewise.
3545         (_gpgme_engine_op_sign): Likewise.
3546         (_gpgme_engine_op_trustlist): Likewise.
3547         (_gpgme_engine_op_verify): Likewise.
3548         (_gpgme_engine_start): Likewise.
3549         * engine.c (_gpgme_engine_set_status_handler): New function.
3550         (_gpgme_engine_set_command_handler): Likewise.
3551         (_gpgme_engine_set_colon_line_handler): Likewise.
3552         (_gpgme_engine_op_decrypt): Likewise.
3553         (_gpgme_engine_op_delete): Likewise.
3554         (_gpgme_engine_op_encrypt): Likewise.
3555         (_gpgme_engine_op_export): Likewise.
3556         (_gpgme_engine_op_genkey): Likewise.
3557         (_gpgme_engine_op_import): Likewise.
3558         (_gpgme_engine_op_keylist): Likewise.
3559         (_gpgme_engine_op_sign): Likewise.
3560         (_gpgme_engine_op_trustlist): Likewise.
3561         (_gpgme_engine_op_verify): Likewise.
3562         (_gpgme_engine_start): Likewise.
3563
3564         * verify.c (gpgme_op_verify_start): Reimplement in terms of above
3565         functions.
3566         * encrypt.c (gpgme_op_encrypt_start): Likewise.
3567         * decrypt.c (_gpgme_decrypt_start): Likewise.
3568         * passphrase.c (_gpgme_passphrase_start): Likewise.
3569         * keylist.c (gpgme_op_keylist_start): Likewise.
3570
3571 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
3572
3573         * types.h: Add types EngineObject and GpgsmObject.
3574
3575         * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
3576         engine-gpgsm.c, engine.h and engine.c.
3577         * engine.h: New file.
3578         * engine.c: Likewise.
3579         * engine-gpgsm.h: Likewise.
3580         * engine-gpgsm.c: Likewise.
3581         
3582         * rungpg.c (_gpgme_gpg_get_version): New function.
3583         (_gpgme_gpg_check_version): Likewise.
3584         * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
3585         _gpgme_gpg_check_version.
3586
3587         * version.c (compare_versions): Rename to ...
3588         (_gpgme_compare_versions): ... this.  Make non-static.
3589         (gpgme_check_version): Use _gpgme_compare_versions rather than
3590         compare_versions.
3591         (gpgme_check_engine): Likewise.
3592         * ops.h (_gpgme_get_program_version): Add prototype.
3593
3594 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
3595
3596         * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
3597         (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
3598         (libgpgme_la_LIBADD): Likewise.
3599
3600 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
3601
3602         * version.c: Remove global variables lineno and
3603         tmp_engine_version.
3604         (version_handler): Removed.
3605         (_gpgme_get_program_version): New function.
3606         (get_engine_info): Don't use context and version_handler,
3607         but _gpgme_get_program_version.
3608         * ops.h (_gpgme_get_program_version): Add prototype for
3609         _gpgme_get_program_version (we expect to use it elsewhere soon).
3610
3611 2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
3612
3613         * version.c (get_engine_info): If GnuPG is not available, return
3614         an error message.
3615         * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
3616         undefined.
3617         (_gpgme_get_gpgsm_path): New function.
3618         * w32-util.c (find_program_in_registry): New static function.
3619         (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
3620         to use find_program_in_registry.
3621         (_gpgme_get_gpgsm_path): New function.
3622         (util.h): Prototype _gpgme_get_gpgsm_path).
3623         * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
3624         returns non-null.
3625
3626 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
3627
3628         * decrypt-verify.c: New file.
3629         * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
3630         * types.h: Add decrypt-verify types.
3631         * ops.h: Likewise.
3632         * context.h: Add result type for decrypt-verify.
3633         * gpgme.h: Add decrypt-verify prototypes.
3634
3635         * decrypt.c (decrypt_status_handler): Renamed to ...
3636         (_gpgme_decrypt_status_handler): ... this.  Make non-static.
3637         (_gpgme_decrypt_start): New function, derived from
3638         gpgme_op_decrypt_start.
3639         (gpgme_op_decrypt_start): Reimplement in terms of
3640         _gpgme_decrypt_start.
3641         (_gpgme_decrypt_result): New function to retrieve error value.
3642         (gpgme_op_decrypt): Use _gpgme_decrypt_result.
3643         * ops.h: Add prototypes for new functions.
3644
3645         * verify.c (verify_status_handler): Renamed to ...
3646         (_gpgme_verify_status_handler): ... this.  Make non-static.
3647         (gpgme_op_verify_start): Use new function name.
3648         (intersect_stati): Renamed to ...
3649         (_gpgme_intersect_stati): ... this.  Make non-static.
3650         (gpgme_op_verify): Use new name.
3651         * ops.h: Add prototypes for new functions.
3652
3653 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
3654
3655         * passphrase.c: New file.
3656         * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
3657         * ops.h (_gpgme_passphrase_result): Add prototypes from
3658         passphrase.c.
3659         * types.h: Likewise.
3660         * context.h: Add member passphrase to result.
3661         * gpgme.c (_gpgme_release_result): Release passphrase member.
3662
3663         * decrypt.c: Some formatting and variable name changes (like
3664         CTX instead C).
3665         (struct decrypt_result_s): Remove members now found in
3666         passphrase result.
3667         (_gpgme_release_decrypt_result): Don't release removed members.
3668         (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
3669         and don't handle the cases catched there.
3670         (command_handler): Removed.
3671         (gpgme_op_decrypt_start): Don't set command handler, but invoke
3672         _gpgme_passphrase_start which does it.
3673         (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
3674         cases covered by it.
3675
3676         * sign.c Some formatting and variable name changes (like
3677         CTX instead C).
3678         (struct sign_result_s): Remove members now found in
3679         passphrase result.
3680         (_gpgme_release_sign_result): Don't release removed members.
3681         (sign_status_handler): Call _gpgme_passphrase_status_handler,
3682         and don't handle the cases catched there.
3683         (command_handler): Removed.
3684         (gpgme_op_sign_start): Don't set command handler, but invoke
3685         _gpgme_passphrase_start which does it.
3686         (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
3687         cases covered by it.
3688
3689 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
3690
3691         * decrypt.c (command_handler): Fix last change.
3692
3693 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
3694
3695         * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
3696         Rename R2 to NEXT_RESULT.
3697         (intersect_stati): Rename RES to RESULT.
3698         (gpgme_get_sig_status): Likewise.  Do not check return_type, but
3699         the member verify of result.
3700         (gpgme_get_sig_key): Likewise.
3701
3702         * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
3703         RESULT is zero, return.
3704         (sign_status_handler, command_handler): Do not check return_type,
3705         but the member sign of result.
3706         (gpgme_op_sign): Likewise.  Drop assertion.
3707
3708         * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
3709         If RESULT is zero, return.
3710         (encrypt_status_handler): Do not check return_type, but the member
3711         encrypt of result.
3712         (gpgme_op_encrypt): Likewise.  Drop assertion.
3713
3714         * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
3715         (create_result_struct): Do not set result_type.
3716         (command_handler, decrypt_status_handler): Do not check
3717         return_type, but the member decrypt of result.
3718         (gpgme_op_decrypt): Likewise.  Drop assertion.
3719
3720         * context.h (enum ResultType): Removed.
3721         (struct gpgme_context_s): Remove member result_type.
3722         (struct result): Replaces union result.
3723         * gpgme.c: Include string.h.
3724         (_gpgme_release_result): Release all members of c->result, which
3725         is now a struct.  Zero out all members of the struct afterwards.
3726
3727 2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
3728
3729         * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
3730         Release all members of the list GPG->arglist.
3731         Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
3732
3733 2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
3734
3735         * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
3736
3737         * key.c: Include string.h.
3738         * data.c: Likewise.
3739         * recipient.c: Likewise.
3740
3741 2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
3742
3743         * context.h: New member signers_len.
3744         * signers.c (gpgme_signers_clear): Require that signers are
3745         non-NULL with assertion.  Use signers_len to determine how much
3746         keys to release.  Add documentation.
3747         (gpgme_signers_add): Use signers_len to determine if the buffer is
3748         large enough.  Use xtryrealloc rather than xtrymalloc and copying.
3749         Add documentation.
3750         (gpgme_signers_enum): Use signers_len to determine if key is
3751         available.  Add documentation.
3752
3753 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
3754
3755         * data.c (_gpgme_data_append): Check if LENGTH is smaller than
3756         ALLOC_CHUNK, not DH->length.
3757
3758 2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
3759
3760         * gpgme.c (gpgme_set_protocol): Fix last change.
3761
3762 2001-10-15  Werner Koch  <wk@gnupg.org>
3763
3764         * gpgme.h (GpgmeProtocol): New.
3765         * gpgme.c (gpgme_set_protocol): New.
3766
3767 2001-09-26  Werner Koch  <wk@gnupg.org>
3768
3769         * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
3770         (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
3771
3772 2001-09-17  Werner Koch  <wk@gnupg.org>
3773
3774         * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
3775         callers to use this function without a check for tmp_key.
3776         
3777         * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
3778         emptying the queue.  Bug reported by Stéphane Corthésy.
3779
3780 2001-09-12  Werner Koch  <wk@gnupg.org>
3781
3782         * data.c (gpgme_data_rewind): Allow rewind for callbacks.
3783
3784 2001-09-07  Werner Koch  <wk@gnupg.org>
3785
3786         * rungpg.h: Add NO_RECP.
3787         * encrypt.c (encrypt_status_handler): Take on No_RECP.
3788         (gpgme_op_encrypt): Better error return.
3789
3790         * verify.c (verify_status_handler): Take on NODATA.
3791
3792 2001-09-03  Werner Koch  <wk@gnupg.org>
3793
3794         * rungpg.h: Added STATUS_INV_RECP.
3795         * gpgme.c (_gpgme_release_result): Add support for new
3796         EncryptResult object.
3797         * encrypt.c (append_xml_encinfo): New.
3798         (encrypt_status_handler): Add some status parsing.
3799         (_gpgme_release_encrypt_result): New.
3800
3801 2001-08-29  Werner Koch  <wk@gnupg.org>
3802
3803         * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
3804
3805         * keylist.c (keylist_colon_handler): Do a finish key if we receive
3806         an EOF here.  This is probably the reason for a lot of bugs
3807         related to keylisting.  It is so obvious.  Kudos to Enno Cramer
3808         for pointing that out. 
3809
3810 2001-08-28  Werner Koch  <wk@gnupg.org>
3811
3812         * gpgme.c, gpgme.h (gpgme_get_op_info): New.
3813         (_gpgme_set_op_info): New. 
3814         (_gpgme_release_result): Reset the op_info here.
3815         * sign.c (append_xml_siginfo): New.
3816         (sign_status_handler): Store the sig create information.
3817
3818 2001-07-31  Werner Koch  <wk@gnupg.org>
3819
3820         * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
3821
3822 2001-07-30  Werner Koch  <wk@gnupg.org>
3823
3824         * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
3825
3826         * rungpg.c (build_argv): Disable armor comments
3827         * w32-io.c (build_commandline): Need to add quotes here
3828
3829 2001-07-24  Werner Koch  <wk@gnupg.org>
3830
3831         * data.c (gpgme_data_read): Add a a way to return the available bytes.
3832
3833 2001-07-23  Werner Koch  <wk@gnupg.org>
3834
3835         * util.c: Removed stpcpy() because we use the version from jnlib.
3836
3837 2001-07-19  Werner Koch  <wk@gnupg.org>
3838
3839         * mkstatus: Define the collating sequence for sort.
3840
3841 2001-06-26  Werner Koch  <wk@gnupg.org>
3842
3843         * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
3844
3845 2001-06-15  Werner Koch  <wk@gnupg.org>
3846
3847         * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
3848         to Timo for pointing this out.
3849
3850 2001-06-01  Werner Koch  <wk@gnupg.org>
3851
3852         * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
3853         Johannes Poehlmann.
3854
3855 2001-05-28  Werner Koch  <wk@gnupg.org>
3856
3857         * version.c (gpgme_check_engine): Stop version number parsing at
3858         the opening angle and not the closing one.  By Tommy Reynolds.
3859
3860 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
3861
3862         * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
3863         line, because it gave an error if another operation had been made 
3864         before using the same context.
3865         
3866         * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
3867         one line to release the gpg object in the context (if any).
3868         
3869 2001-04-26  Werner Koch  <wk@gnupg.org>
3870
3871         * key.c, key.h (_gpgme_key_cache_init): New.
3872         (_gpgme_key_cache_add): New.
3873         (_gpgme_key_cache_get): New.
3874         * version.c (do_subsystem_inits): Init the cache.
3875         * keylist.c (finish_key): Put key into the cache
3876         * verify.c (gpgme_get_sig_key): First look into the cache.
3877
3878 2001-04-19  Werner Koch  <wk@gnupg.org>
3879
3880         * keylist.c (parse_timestamp): Adjusted for the changed
3881         --fixed-list-mode of gpg 1.0.4h.
3882
3883 2001-04-05  Werner Koch  <wk@gnupg.org>
3884
3885         * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
3886
3887 2001-04-04  Werner Koch  <wk@gnupg.org>
3888
3889         * w32-io.c (_gpgme_io_select): Don't select on the writer if there
3890         are still bytes pending.  Timo found this not easy to track down
3891         race condition. 
3892
3893 2001-04-02  Werner Koch  <wk@gnupg.org>
3894
3895         * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
3896         * key.c (gpgme_key_get_ulong_attr): And return those attribs.
3897
3898         * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
3899         the mode set in the current context.  Suggested by Timo.
3900
3901         * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
3902         can_encrypt. By Timo.
3903
3904 2001-03-30  Werner Koch  <wk@gnupg.org>
3905
3906         * debug.c (debug_init): Allow to specify a debug file.
3907         (_gpgme_debug_level): New.
3908
3909         * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
3910    &nbs