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