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