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