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