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