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