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