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