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