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