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