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