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