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