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