2002-07-03 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / ChangeLog
1 2002-07-03  Marcus Brinkmann  <marcus@g10code.de>
2
3         * gpgme.c (gpgme_set_io_cbs): Deal with CTX being NULL.
4
5         * gpgme.c (_gpgme_op_event_cb_user): New function.
6         * op-support.c (_gpgme_op_reset): Support a new mode of operation
7         for private or user event loop.  Use new user event callback
8         wrapper.
9         * trustlist.c (gpgme_op_trustlist_start): Use this new mode.
10         * keylist.c (gpgme_op_keylist_start): Likewise.
11
12         * rungpg.c (_gpgme_gpg_io_event): New function.
13         * rungpg.h (_gpgme_gpg_io_event): New prototype.
14         * engine-gpgsm.c (_gpgme_gpg_io_event): New function.
15         * engine-gpgsm.h (_gpgme_gpgsm_io_event): New prototype.
16         * engine.c (_gpgme_engine_io_event): New function.
17         * engine.h (_gpgme_engine_io_event): New prototype.
18         * keylist.c (finish_key): Call _gpgme_engine_io_event, and move
19         the real work for the default IO callback routines to ...
20         (_gpgme_op_keylist_event_cb): ... here.  New function.
21         * trustlist.c (trustlist_colon_handler): Signal
22         GPGME_EVENT_NEXT_TRUSTITEM.  Move queue manipulation to ...
23         (_gpgme_op_trustlist_event_cb): ... here.  New function.
24         * gpgme.c (_gpgme_op_event_cb): Call _gpgme_op_keylist_event_cb
25         and _gpgme_op_trustlist_event_cb when appropriate.
26         * ops.h (_gpgme_op_keylist_event_cb): New prototype.
27         (_gpgme_op_trustlist_event_cb): Likewise.
28         * op-support.c (_gpgme_op_reset): Add comment why we don't use the
29         user provided event handler directly.
30         * gpgme.h (GpgmeRegisterIOCb): Return GpgmeError value, and TAG in
31         a pointer argument.
32         * wait.c (_gpgme_add_io_cb): Likewise.
33         * wait.h (_gpgme_add_io_cb): Likewise for prototype.
34         * rungpg.c (_gpgme_gpg_add_io_cb): Call IO_CBS->add with new
35         argument.  Fix up error handling.
36         * engine-gpgsm.c (_gpgme_gpgsm_add_io_cb): Call IO_CBS->add with
37         new argument, fix up error handling.
38
39 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
40
41         * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
42         table (eg use synchronous mode).
43
44 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
45
46         * ops.h (_gpgme_wait_on_condition): Remove HANG argument from
47         prototype and change return type to GpgmeError.
48         (_gpgme_wait_one): New prototype.
49         * wait.c (gpgme_wait): Replace with the meat from
50         _gpgme_wait_on_condition here, and remove the support for
51         conditions.
52         (_gpgme_wait_on_condition): Remove HANG argument from prototype
53         and change return type to GpgmeError.  Replace with meat from
54         _gpgme_wait_one and add support for conditions.
55         (_gpgme_wait_one): Just call _gpgme_wait_on_condition without
56         condition.
57         * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
58         table (eg use synchronous mode).
59         (gpgme_op_keylist_next): Remove HANG argument from
60         _gpgme_wait_on_condition.  Check its return value.
61         * trustlist.c (gpgme_op_trustlist_start): Always use our own FD
62         table (eg use synchronous mode).
63         (gpgme_op_trustlist_next): Remove HANG argument from
64         _gpgme_wait_on_condition.  Check its return value.
65         
66 2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
67
68         * gpgme.h: Fix documentation of key attribute retrieval functions.
69
70 2002-06-26  Werner Koch  <wk@gnupg.org>
71
72         * engine-gpgsm.c (map_assuan_error): Map No_Data_Available to EOF.
73
74         * import.c (append_xml_impinfo): Kludge to print fingerprint
75         instead of keyid for use with gpgsm.
76         (import_status_handler): Set a flag to know whether any import
77         occured.
78         (gpgme_op_import): Reurn -1 if no certificate ewas imported.
79
80 2002-06-25  Werner Koch  <wk@gnupg.org>
81
82         * engine-gpgsm.c (_gpgme_gpgsm_set_io_cbs) [ENABLE_GPGSM]: Fixed
83         function arguments.
84
85 2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
86
87         * engine-gpgsm.c (_gpgme_gpgsm_op_export): Only export the keys
88         listed in RECP.
89         * export.c (gpgme_op_export): If no data was returned, return
90         GPGME_No_Recipients.
91
92 2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
93
94         * engine-gpgsm.c (_gpgme_gpgsm_op_export): Implement.
95
96 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
97
98         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return ERR.
99         (parse_status): New function.
100         (gpgsm_status_handler): Use parse_status.
101         (gpgsm_assuan_simple_command): Accept new arguments STATUS_FNC and
102         STATUS_FNC_VALUE and process status messages.
103         (gpgsm_set_recipients): Pass new arugments to gpgsm_assuan_simple_command.
104         (gpgsm_set_fd): Likewise.
105         (_gpgme_gpgsm_op_keylist): Likewise.
106         (_gpgme_gpgsm_op_keylist_ext): Likewise.
107         (_gpgme_gpgsm_op_sign): Likewise.
108
109 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
110
111         * wait.c (_gpgme_remove_io_cb): Unlock FDT->lock.
112
113 2002-06-20  Werner Koch  <wk@gnupg.org>
114
115         * rungpg.c (build_argv): Ignore GPG_AGENT_INFO if set but empty.
116
117         * verify.c (calc_sig_summary): Set bad policy for wrong key usage.
118         (skip_token): New.
119         (_gpgme_verify_status_handler): Watch out for wrong key usage.
120         (gpgme_get_sig_string_attr): Hack to return info on the key
121         usage.  Does now make use of the former RESERVED argument which
122         has been renamed to WHATIDX.
123         (gpgme_get_sig_ulong_attr): Renamed RESERVED to WHATIDX.
124
125 2002-06-14  Marcus Brinkmann  <marcus@g10code.de>
126
127         * wait.c (do_select): Return -1 on error, and 0 if nothing to run.
128         (_gpgme_wait_one): Only set HANG to zero if do_select returned an
129         error, or there are no more file descriptors to wait on.
130         (_gpgme_wait_on_condition): Ignore return value from do_select for
131         now.
132
133 2002-06-13  Werner Koch  <wk@gnupg.org>
134
135         * verify.c (gpgme_op_verify): Make sure that we never access an
136         unitialized result structure.
137
138 2002-06-12  Werner Koch  <wk@gnupg.org>
139
140         * keylist.c (struct keylist_result_s): New.
141         (_gpgme_release_keylist_result): Release it here 
142         (keylist_status_handler): Handle truncated.
143         (append_xml_keylistinfo): New.
144         * gpgme.c (_gpgme_release_result): and use it here.
145         * types.h: Declare the new type here.
146         * context.h (struct gpgme_context_s): Use it here.
147
148 2002-06-11  Marcus Brinkmann  <marcus@g10code.de>
149
150         * engine-gpgsm.c (_gpgme_gpgsm_release): Close status_cb.fd.
151         (_gpgme_gpgsm_new): Duplicate status file descriptor, so we can
152         use our own close notification mechanism without interfering with
153         assuan.
154
155 2002-06-11  Werner Koch  <wk@gnupg.org>
156
157         * gpgme.h: Add GPGME_ATTR_SIG_SUMMARY and the GPGME_SIGSUM_
158         constants.
159         * verify.c (calc_sig_summary): New.
160         (gpgme_get_sig_ulong_attr): And use it here.
161
162 2002-06-10  Werner Koch  <wk@gnupg.org>
163
164         * rungpg.h: Add new status codes TRUNCATED and ERROR.
165         * verify.c (is_token, copy_token): New.
166         (_gpgme_verify_status_handler): Use copy_token, handle the new
167         ERROR status and store the errorcode used withgpgsm and trust
168         status codes.
169         * gpgme.h: New attribute ERRTOK.
170         * key.c (gpgme_key_get_string_attr): Add dummy case for it.
171         (gpgme_get_sig_string_attr): Use it here to return the last error.
172
173 2002-06-10  Marcus Brinkmann  <marcus@g10code.de>
174
175         * engine-gpgsm.c (_gpgme_gpgsm_start): Move the code that sets the
176         close notification for the status fd to ...
177         (_gpgme_gpgsm_new): ... here.
178         * wait.h: Include "sema.h".  Remove prototypes of
179         _gpgme_remove_proc_from_wait_queue and
180         _gpgme_register_pipe_handler.  Add prototypes of
181         _gpgme_fd_table_init, _gpgme_fd_table_deinit, _gpgme_fd_table_put,
182         _gpgme_add_io_cb, _gpgme_remove_io_cb, _gpgme_wait_event_cb and
183         _gpgme_wait_one..
184         * wait.c: Remove global variables PROC_QUEUE, PROC_QUEUE_LOCK,
185         FD_TABLE_SIZE, FD_TABLE, FD_TABLE_LOCK.  New global variables
186         FDT_GLOBAL, CTX_DONE_LIST, CTX_DONE_LIST_SIZE,
187         CTX_DONE_LIST_LENGTH and CTX_DONE_LIST_LOCK.  Remove struct
188         proc_s.  Replace struct wait_item_s.
189         (_gpgme_fd_table_init): New function.
190         (_gpgme_fd_table_deinit): Likewise.
191         (_gpgme_fd_table_put): Likewise.
192         (set_process_done): Remove function.
193         (do_select): Take argument FDT.  Use that to decide which fds to
194         select on.
195         (_gpgme_remove_proc_from_wait_queue): Remove function.
196         (_gpgme_wait_event_cb): New function.
197         (_gpgme_wait_one): Likewise.
198         (_gpgme_register_pipe_hanldler): Remove function.
199         (_gpgme_add_io_cb): New function.
200         (_gpgme_remove_io_cb): Likewise.
201         (_gpgme_freeze_fd): Remove function.
202         (_gpgme_thaw_fd): Remove function.
203         * rungpg.c (struct fd_data_map_s): Add new member TAG.
204         (struct gpg_object_s): Likewise for STATUS and COLON.  Add member
205         IDX to CMD.  Add new member IO_CBS.
206         (close_notify_handler): New variables POSSIBLY_DONE and NOT_DONE.
207         For each I/O callback, check if it should be unregistered.  If all
208         callbacks have been unregistered, trigger GPGME_EVENT_DONE.
209         Remove member RUNNING.
210         (_gpgme_gpg_new): Initialize new members.
211         (_gpgme_gpg_release): Check PID not RUNNING.  Don't call
212         _gpgme_remove_proc_from_wait_queue.  Close GPG->CMD.FD if set.
213         (build_argv): Store away the index instead the file descriptor for
214         CMD.
215         (_gpgme_gpg_add_io_cb): New function.
216         (_gpgme_gpg_spawn): Use _gpgme_gpg_add_io_cb to register IO
217         callbacks.
218         (gpg_status_handler): Change return type to void, remove PID
219         argument, close filedescriptor if EOF or error occurs.
220         (read_status): Use _gpgme_gpg_add_io_cb instead _gpgme_thaw_fd.
221         Use IO_CBS->remove instead _gpgme_freeze_fd.
222         (gpg_colon_line_handler): Change return type to void, remove PID
223         argument, close filedescriptor if EOF or error occurs.
224         (command_cb): Use IO_CBS->remove instead _gpgme_freeze_fd.
225         (_gpgme_gpg_set_io_cbs): New function.
226         * rungpg.h (_gpgme_gpg_set_io_cbs): Prototype for
227         _gpgme_gpg_set_io_cbs.
228         * gpgme.h (GpgmeIOCb): New type.
229         (GpgmeRegisterIOCb): Likewise.
230         (GpgmeRemoveIOCb): Likewise.
231         (GpgmeEventIO): Likewise.
232         (GpgmeEventIOCb): Likewise.
233         (struct GpgmeIOCbs): New structure to hold I/O callbacks.
234         (gpgme_set_op_io_cbs): New prototype.
235         (gpgme_get_op_io_cbs): Likewise.
236         * ops.h: New prototype for _gpgme_op_event_cb.  Remove prototypes
237         for _gpgme_freeze_fd and _gpgme_thaw_fd.  Remove PID argument from
238         _gpgme_data_inbound_handler and _gpgme_data_outbound_handler
239         prototype.  Add prototype for _gpgme_op_reset.
240         Add synchronous argument to _gpgme_decrypt_start prototype.
241         * io.h: Beautification.
242         * gpgme.c: Include "wait.h".
243         (gpgme_new): Initialize FDT.
244         (gpgme_set_io_cbs): New function.
245         (gpgme_get_io_cbs): Likewise.
246         (_gpgme_op_event_cb): Likewise.
247         * data.c (_gpgme_data_inbound_handler): Change return type to
248         void.  Drop PID argument.  Close FD on error and EOF.
249         (write_mem_data): Don't close FD here ...
250         (write_cb_data): ... or here ...
251         (_gpgme_data_outbound_handler): ... but here.  Change return type
252         to void.  Drop PID argument.
253         * context.h: Include "wait.h".
254         (struct gpgme_context_s): New members FDT and IO_CBS.
255         * op-support.c: New file.
256         * Makefile.am (libgpgme_la_SOURCES): Add op-support.c.
257         * ops.h: Add prototype for _gpgme_op_reset().
258         * decrypt.c (_gpgme_decrypt_start): New argument SYNCHRONOUS.  Use
259         _gpgme_op_reset.
260         (gpgme_op_decrypt_start): Add synchronous argument.
261         (gpgme_op_decrypt): Likewise.  Use _gpgme_wait_one instead
262         gpgme_wait.
263         * delete.c (gpgme_op_delete_start): Rename to ...
264         (_gpgme_op_delete_start): ... this.  New argument SYNCHRONOUS.
265         Use _gpgme_op_reset.  Make function static.
266         (gpgme_op_delete_start): Just a wrapper around
267         _gpgme_op_delete_start now.
268         (gpgme_op_delete): Add synchronous argument.  Use _gpgme_wait_one
269         instead gpgme_wait.
270         * encrypt.c: Include "wait.h".
271         (ggpgme_op_encrypt_start): Rename to ...
272         (_gpgme_op_encrypt_start): ... this.  New argument SYNCHRONOUS.
273         Use _gpgme_op_reset.  Make function static.
274         (gpgme_op_encrypt_start): Just a wrapper around
275         _gpgme_op_encrypt_start now.
276         (gpgme_op_encrypt): Add synchronous argument.  Use _gpgme_wait_one
277         instead gpgme_wait.
278         * encrypt_sign.c (gpgme_op_encrypt_sign_start): Rename to ...
279         (_gpgme_op_encrypt_sign_start): ... this.  New argument
280         SYNCHRONOUS.  Use _gpgme_op_reset.  Make function static.
281         (gpgme_op_encrypt_sign_start): Just a wrapper around
282         _gpgme_op_encrypt_sign_start now.
283         (gpgme_op_encrypt_sign): Add synchronous argument.  Use
284         _gpgme_wait_one instead gpgme_wait.
285         * export.c (gpgme_op_export_start): Rename to ...
286         (_gpgme_op_export_start): ... this.  New argument SYNCHRONOUS.
287         Use _gpgme_op_reset.  Make function static.
288         (gpgme_op_export_start): Just a wrapper around
289         _gpgme_op_export_start now.
290         (gpgme_op_export): Add synchronous argument.  Use _gpgme_wait_one
291         instead gpgme_wait.
292         * genkey.c (gpgme_op_genkey_start): Rename to ...
293         (_gpgme_op_genkey_start): ... this.  New argument SYNCHRONOUS.
294         Use _gpgme_op_reset.  Make function static.
295         (gpgme_op_genkey_start): Just a wrapper around
296         _gpgme_op_genkey_start now.
297         (gpgme_op_genkey): Add synchronous argument.  Use _gpgme_wait_one
298         instead gpgme_wait.
299         * import.c (gpgme_op_import_start): Rename to ...
300         (_gpgme_op_import_start): ... this.  New argument SYNCHRONOUS.
301         Use _gpgme_op_reset.  Make function static.
302         (gpgme_op_import_start): Just a wrapper around
303         _gpgme_op_import_start now.
304         (gpgme_op_import): Add synchronous argument.  Use _gpgme_wait_one
305         instead gpgme_wait.
306         * keylist.c (gpgme_op_keylist_start): Use _gpgme_op_reset.
307         (gpgme_op_keylist_ext_start): Likewise.
308         * sign.c (gpgme_op_sign_start): Rename to ...
309         (_gpgme_op_sign_start): ... this.  New argument SYNCHRONOUS.  Use
310         _gpgme_op_reset.  Make function static.
311         (gpgme_op_sign_start): Just a wrapper around _gpgme_op_sign_start
312         now.
313         (gpgme_op_sign): Add synchronous argument.  Use _gpgme_wait_one
314         instead gpgme_wait.
315         * trustlist.c (gpgme_op_trustlist_start): Use _gpgme_op_reset.
316         * verify.c (gpgme_op_verify_start): Rename to ...
317         (_gpgme_op_verify_start): ... this.  New argument SYNCHRONOUS.
318         Use _gpgme_op_reset.  Make function static.
319         (gpgme_op_verify_start): Just a wrapper around
320         _gpgme_op_verify_start now.
321         (gpgme_op_verify): Add synchronous argument.  Use _gpgme_wait_one
322         instead gpgme_wait.
323         * engine-gpgsm.c (iocb_data_t): New type.
324         (struct gpgsm_object_s): New member status_cb.  Replace input_fd
325         and input_data with input_cb.  Replace output_fd and output_data
326         with output_cb.  Replace message_fd and message_data with
327         message_cb.  New member io_cbs.
328         (_gpgme_gpgsm_new): Initialize all new members (and drop the old
329         ones).
330         (close_notify_handler): New variable POSSIBLY_DONE.  For each I/O
331         callback, check if it should be unregistered.  If all callbacks
332         have been unregistered, trigger GPGME_EVENT_DONE.
333         (_gpgme_gpgsm_release): Remove variable PID.  Use new variable
334         names to close the file descriptors.
335         (_gpgme_gpgsm_op_decrypt): Use new variable names,
336         (_gpgme_gpgsm_op_encrypt): Likewise.
337         (_gpgme_gpgsm_op_genkey): Likewise.
338         (_gpgme_gpgsm_op_import): Likewise.
339         (_gpgme_gpgsm_op_keylist): Likewise.
340         (_gpgme_gpgsm_op_keylist_ext): Likewise.
341         (_gpgme_gpgsm_op_sign): Likewise.
342         (_gpgme_gpgsm_op_verify): Likewise.
343         (gpgsm_status_handler): Drop argument PID.  Change return type to
344         void.  Close status pipe before returning because of EOF or error.
345         (_gpgme_gpgsm_add_io_cb): New function.
346         (_gpgme_gpgsm_start): Use _gpgme_gpgsm_add_io_cb to register
347         callback function.
348         (_gpgme_gpgsm_set_io_cbs): New function.
349         * engine-gpgsm.h: New prototype for _gpgme_gpgsm_set_io_cbs.
350         * engine.c (_gpgme_engine_set_io_cbs): New function.
351         * engine.h: New prototype for _gpgme_engine_set_io_cbs.
352
353 2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
354
355         * Makefile.am (libgpgme_la_SOURCES): Remove mutex.h.
356
357 2002-06-03  Marcus Brinkmann  <marcus@g10code.de>
358
359         * key.c: Include <ctype.h>.
360         (_gpgme_key_append_name): Skip one more char when
361         processing escaped char.  Submitted by Marc Mutz <mutz@kde.org>.
362         Handle hexadecimal encodings.  Also reported by Marc.  Thanks!
363
364 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
365
366         * ath.h: Enable the _gpgme_ prefix.  Fix all those prefix macros.
367         * posix-sema.c: Use that prefix here.
368         * posix-io.c: Include "ath.h".
369         (_gpgme_io_read): Use _gpgme_ath_read instead read.
370         (_gpgme_io_write): Use _gpgme_ath_write instead write.
371         (_gpgme_io_waitpid): Use _gpgme_ath_waitpid instead waitpid.
372         (_gpgme_io_select): Use _gpgme_ath_select instead select.
373
374 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
375
376         * Makefile.am (ath_components): New variable.
377         (ath_components_pthread): Likewise.
378         (ath_components_pth): Likewise.
379         (system_components): Add ath_componentes.
380
381         * ath.h: New file.
382         * ath.c: Likewise.
383         * ath-pthread.c: Likewise.
384         * ath-pth.c: Likewise.
385         * posix-sema.c (_gpgme_sema_cs_enter): Rework to use the ATH
386         interface.
387         * mutex.h: Remove file.
388
389 2002-05-30  Werner Koch  <wk@gnupg.org>
390
391         * key.c (gpgme_key_get_string_attr): Return NULL when asking for
392         an issuer with IDX > 0.  We don't support altIssuerNames for now.
393
394 2002-05-22  Werner Koch  <wk@gnupg.org>
395
396         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Aehmm, added
397         missing variable definition.  Oohh - Marcus was faster.
398
399 2002-05-22  Marcus Brinkmann  <marcus@gnu.org>
400
401         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Fix last change.
402
403 2002-05-21  Werner Koch  <wk@gnupg.org>
404
405         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist)
406         (_gpgme_gpgsm_op_keylist_ext):  Pass the keylist mode to gpgsm.
407
408 2002-05-10  Werner Koch  <wk@gnupg.org>
409
410         * key.h (gpgme_key_s): Add OTRUST.
411         * keylist.c (set_ownertrust): New.
412         (keylist_colon_handler): Get the ownertrust value
413         * key.c (gpgme_key_get_string_attr,gpgme_key_get_ulong_attr):
414         Return that value.
415
416 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
417
418         * w32-util.c: New static variable GET_PATH_LOCK.
419         (_gpgme_get_gpg_path): Remove superfluous NULL initializer.
420         Take lock while determining path.
421         (_gpgme_get_gpgsm_path): Likewise.
422         * version.c (do_subsystem_inits): Set DONE to 1 after
423         initialization.
424         (gpgme_get_engine_info): New variable ENGINE_INFO_LOCK.  Take lock
425         while determining engine info.
426         * rungpg.c (_gpgme_gpg_get_version): New variable
427         GPG_VERSION_LOCK.  Take the lock while determining the program
428         version.
429         * posix-io.c: Include "sema.h".
430         (_gpgme_io_spawn): New variable FIXED_SIGNALS_LOCK.  Take the lock
431         while fixing the signals.
432         (_gpgme_io_select): Make READFDS and WRITEFDS non-static.
433         * key.c: Include "sema.h".  New globals KEY_CACHE_LOCK and
434         KEY_REF_LOCK.
435         (capabilities_to_string): Make STRINGS very const.
436         (_gpgme_key_cache_add): Lock the key cache.
437         (_gpgme_key_cache_get): Likewise.
438         (gpgme_key_ref, gpgme_key_release): Lock the key_ref_lock.
439         * import.c (append_xml_impinfo): Make IMPORTED_FIELDS and
440         IMPORT_RES_FIELDS very const.  Make FIELD and FIELD_NAME a litle
441         const.
442         * engine.c (_gpgme_engine_get_info): New variable
443         ENGINE_INFO_LOCK.  Take lock while determining engine info.
444         * engine-gpgsm.c: Include "sema.h".
445         (_gpgme_gpgsm_get_version): New variable GPGSM_VERSION_LOCK.  Take
446         lock while getting program version.
447
448 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
449
450         * debug.h: New file.
451         * Makefile.am (libgpgme_la_SOURCES): Add debug.h.
452         * util.h: Removed all prototypes and declarations related to
453         debugging.  Include "debug.h".
454
455         * debug.c (debug_level): Comment variable and remove superfluous
456         zero initializer.
457         (errfp): Likewise.
458         (_gpgme_debug_enabled): Function removed.
459         (struct debug_control_s): Definition removed.
460         (_gpgme_debug_level): Function removed.
461         (_gpgme_debug_begin): Rewritten to use vasprintf.  Accept a
462         pritnf-style format specification and a variable number of
463         arguments.
464         (_gpgme_debug_add): Rewritten using vasprintf.  Expect that format
465         starts out with "%s" for simplicity.
466         (_gpgme_debug_end): Rewritten using vasprintf.  Do not accept a
467         TEXT argument anymore.
468
469         * posix-io.c (_gpgme_io_select): Use new level argument for
470         DEBUG_BEGIN instead explicit if construct.
471
472         * debug.c (debug_init): Remove superfluous zero initializer,
473         remove volatile flag of INITIALIZED.  Do not use the
474         double-checked locking algorithm, it is fundamentally flawed and
475         will empty your fridge (on a more serious note, despite the
476         volatile flag it doesn't give you the guarantee you would expect,
477         for example on a DEC Alpha or an SMP machine.  The volatile only
478         serializes accesses to the volatile variable, but not to the other
479         variables).
480
481 2002-05-03  Werner Koch  <wk@gnupg.org>
482
483         * engine-gpgsm.c (_gpgme_gpgsm_new): Redirect any gpgsm error
484         output to /dev/null.
485
486         * verify.c (gpgme_get_sig_key): Set the protocol of the listctx.
487         * gpgme.c (gpgme_get_protocol): New.
488
489         * data.c (gpgme_data_write): Changed type of BUFFER to void*.
490         (gpgme_data_read): Ditto.
491
492         * verify.c (_gpgme_verify_status_handler): Handle TRUST_* status
493         lines so that a claim can be made without looking up the key.
494         (gpgme_get_sig_string_attr): New. 
495         (gpgme_get_sig_ulong_attr): New.
496
497         * gpgme.h (GpgmeAttr): Added GPGME_ATTR_SIG_STATUS.
498
499         * rungpg.h: Add new status codes from gpg 1.0.7 and formatted the
500         list to align with the status.h file from gnupg.
501
502         * gpgme.h (GpgmeSigStat): Add _GOOD_EXP and _GOOD_EXPKEY.
503         * verify.c (_gpgme_verify_status_handler, finish_sig): Handle
504         these new status codes.  Store the expiration time 
505
506 2002-04-27  Werner Koch  <wk@gnupg.org>
507
508         * gpgme.h (GpgmeData_Encoding): New.
509         * data.c (gpgme_data_get_encoding,gpgme_data_set_encoding): New.
510         * engine-gpgsm.c (map_input_enc): New. Use it in all local
511         functions where the INPUT command gets send.
512
513 2002-04-27  Marcus Brinkmann  <marcus@g10code.de>
514
515         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Close the output
516         descriptor only when we don't need it anymore.  Close the message
517         descriptor if we don't need it.
518
519 2002-04-26  Werner Koch  <wk@gnupg.org>
520
521         * Makefile.am (libgpgme_la_LIBADD): Use libtool libraries.
522
523 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
524
525         * rungpg.c (_gpgme_gpg_release): Call gpgme_data_release on
526         GPG->cmd.cb_data, not xfree.
527
528 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
529
530         * engine-gpgsm.c (_gpgme_gpgsm_new): Set the display, ttyname,
531         ttytype, lc_ctype and lc_messages options in the server.
532
533 2002-04-24  Marcus Brinkmann  <marcus@g10code.de>
534
535         * engine-gpgsm.c (map_assuan_error): Add new error codes.
536
537 2002-04-23  Werner Koch  <wk@gnupg.org>
538
539         * key.c (gpgme_key_get_ulong_attr): Swapped use of can_encrypt and
540         can_certify to return the requested values.
541
542 2002-04-23  Marcus Brinkmann  <marcus@g10code.de>
543
544         * gpgme.c (gpgme_get_progress_cb): Allow either return parameter
545         to be NULL.
546         (gpgme_get_passphrase_cb): Likewise.
547
548 2002-04-22  Marcus Brinkmann  <marcus@g10code.de>
549
550         * gpgme.c (gpgme_get_passphrase_cb): New function.
551         (gpgme_get_progress_cb): New function.
552         * gpgme.h: Add new prototypes for gpgme_get_passphrase_cb and
553         gpgme_get_progress_cb.
554
555 2002-03-28  Werner Koch  <wk@gnupg.org>
556
557         * gpgme.h (GpgmeAttr): Add values for issuer and chaining.
558         * key.h (gpgme_key_s): Add issuer and chaining elements for X509.
559         * keylist.c (keylist_colon_handler): Store them.
560         * key.c (gpgme_key_release): Free them.
561         (gpgme_key_get_as_xml,gpgme_key_get_string_attr): Print them.
562
563 2002-03-26  Werner Koch  <wk@gnupg.org>
564
565         * Makefile.am (libgpgme_la_SOURCES): Add mutex.h
566
567 2002-03-21  Werner Koch  <wk@gnupg.org>
568
569         * util.h [!HAVE_FOPENCOOKIE]: Make sure off_t and ssize_t are
570         defined.
571
572 2002-03-18  Marcus Brinkmann  <marcus@g10code.de>
573
574         * Makefile.am (system_components): New variable, set depending on
575         HAVE_DOSISH_SYSTEM.
576         (libgpgme_la_SOURCES): Use system_components.  Remove `syshdr.h'.
577         * syshdr.h: File removed.
578
579         * posix-io.c: Remove !HAVE_DOSISH_SYSTEM safeguard.  Clean up source.
580         * posix-sema.c: Likewise.
581         * posix-util.c: Likewise.
582
583         * w32-io.c: Remove HAVE_DOSISH_SYSTEM safeguard.
584         * w32-sema.c: Likewise.
585         * w32-util.c: Likewise.
586
587         * posix-io.c: Include `unistd.h', do not include `syshdr.h'.
588         * posix-sema.c: Likewise.
589         * w32-io.c: Include `io.h', do not include `syshdr.h'
590         * w32-sema.c: Likewise.
591         * w32-util.c: Likewise.
592         * data.c: Do not include `syshdr.h'.
593         * wait.c: Likewise.
594         * wait.h: Code cleanup.
595
596         * mutex.h: New file.
597         * posix-sema.c: Implement.
598
599 2002-03-08  Werner Koch  <wk@gnupg.org>
600
601         * util.h [!HAVE_FOPENCOOKIE]: Fixed type.  Thanks to Frank Heckenbach.
602
603 2002-03-07  Werner Koch  <wk@gnupg.org>
604
605         * gpgme.h (gpgme_op_keylist_ext_start): Add prototype.
606
607 2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
608
609         * encrypt.c (_gpgme_encrypt_sym_status_handler): New function.
610         (gpgme_op_encrypt_start): New variable SYMMETRIC, set it if RECP
611         is null, and if it is set, use _gpgme_encrypt_sym_status_handler
612         as status handler and run _gpgme_passphrase_start.
613         * rungpg.c (_gpgme_gpg_op_encrypt): If RECP is zero, do symmetric
614         encryption.
615         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): If RECP is zero,
616         return error value.
617
618         * rungpg.c (_gpgme_gpg_op_verify): Add "--" argument.
619
620 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
621
622         * passphrase.c (_gpgme_passphrase_status_handler): Also set the
623         error No_Passphrase if only a bad passphrase was provided.
624
625 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
626
627         * rungpg.c (_gpgme_gpg_op_verify): If TEXT is of mode
628         GPGME_DATA_MODE_IN, construct a command line that stores the
629         plaintext in TEXT.
630         * verify.c (gpgme_op_verify_start): Accept TEXT being
631         uninitialized, and in this case interpret SIG as a normal or
632         cleartext signature and TEXT as a return data object.
633         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.
634
635 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
636
637         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext) [!ENABLE_GPGSM]:
638         Add stub function.
639
640 2002-02-28  Werner Koch  <wk@gnupg.org>
641
642         * key.h (subkey_s): New member expires_at.
643         * keylist.c (keylist_colon_handler): Set it here
644         * key.c (gpgme_key_get_as_xml,gpgme_key_get_ulong_attr): Return it.
645
646 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
647
648         * rungpg.h (_gpgme_gpg_op_keylist_ext): New prototype.
649         * rungpg.c (_gpgme_gpg_op_keylist_ext): New function.
650         * engine-gpgsm.h (_gpgme_gpgsm_op_keylist_ext): New prototype.
651         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): New function.
652         * engine.h (_gpgme_engine_op_keylist_ext): New prototype.
653         * engine.c (_gpgme_engine_op_keylist_ext): New function.
654         * keylist.c (gpgme_op_keylist_ext_start): New function.
655
656 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
657
658         * gpgme.h: Add new error code GPGME_Invalid_Recipient.
659         * encrypt.c (struct encrypt_result_s): New member invalid_recipients,
660         rename no_recipients to no_valid_recipients.
661         (_gpgme_encrypt_status_handler): Include error for invalid
662         recipients.
663         * engine-gpgsm.c (gpgsm_set_recipients): Change type of first
664         argument to GpgsmObject.  Use that to report back the status about
665         the recipients.
666
667 2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
668
669         * verify.c (_gpgme_verify_status_handler): Fix the last change.
670
671 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
672
673         * engine.c (_gpgme_engine_op_encrypt_sign): New function.
674         * engine.h (_gpgme_engine_op_encrypt_sign): New prototype.
675         * rungpg.c (_gpgme_append_gpg_args_from_signers): New function.
676         (_gpgme_gpg_op_sign): Use that new function.
677         (_gpgme_gpg_op_encrypt_sign): New function.
678         * rungpg.h (_gpgme_gpg_op_encrypt_sign): New prototype. 
679         * gpgme.h (gpgme_op_encrypt_sign_start): New prototype.
680         (gpgme_op_encrypt_sign): Likewise.
681         * Makefile.am (libgpgme_la_SOURCES): Add encrypt-sign.c.
682         * ops.h (_gpgme_encrypt_status_handler): Add prototype.
683         (_gpgme_sign_status_handler): Add prototype.
684         * sign.c (sign_status_handler): Rename to ...
685         (_gpgme_sign_status_handler): ... this and make non-static.
686         * encrypt.c (encrypt_status_handler): Rename to ...
687         (_gpgme_encrypt_status_handler): ... this and make non-static.
688         * encrypt.c (gpgme_op_encrypt_start): Use new status handler name.
689         * sign.c (gpgme_op_sign_start): Likewise.
690         
691 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
692
693         * verify.c (_gpgme_verify_status_handler): Parse the args line to
694         see if the problem is due to a missing key, and report that back
695         to the user.
696
697 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
698
699         * context.h (struct gpgme_context_s): New member include_certs.
700         * gpgme.h (gpgme_set_include_certs): Add prototype.
701         (gpgme_get_include_certs): Likewise.
702         * gpgme.c (gpgme_set_include_certs): New function.
703         (gpgme_get_include_certs): Likewise.
704         (gpgme_new): Set include_certs to 1 (the default).
705         * engine.c (_gpgme_engine_op_sign): Accept new argument include_certs,
706         and pass it to _gpgme_gpgsm_op_sign.
707         * engine.h (_gpgme_engine_op_sign): Likewise for prototype.
708         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Accept new argument
709         include_certs and handle it.
710         * engine-gpgsm.h (_gpgme_gpgsm_start): Add new argument include_certs.
711         * sign.c (gpgme_op_sign_start): Add new argument to
712         _gpgme_engine_op_sign call.
713
714 2002-02-14  Werner Koch  <wk@gnupg.org>
715
716         * keylist.c (gpgme_op_keylist_start): Do not use a verbose listing.
717
718 2002-02-13  Werner Koch  <wk@gnupg.org>
719
720         * vasprintf.c, fopencookie.c: Add replacement functions.
721         * util.h: Add prototypes for them.
722
723 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
724
725         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return 0 if we
726         reach the end of the function.
727
728 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
729
730         * genkey.c (gpgme_op_genkey_start): Fix logic in validity check.
731         (gpgme_op_genkey_start): Skip newlines after opening tag.
732
733         * engine-gpgsm.c (_gpgme_gpgsm_start): Remove cruft.
734
735 2002-02-08  Marcus Brinkmann  <marcus@g10code.de>
736
737         * genkey.c (gpgme_op_genkey_start): Allow PUBKEY and SECKEY to be
738         set, and pass them down to the crypto engine.
739         * engine-gpgsm.h (_gpgme_gpgsm_start): New arguments PUBKEY and SECKEY.
740         * engine.h: Likewise.
741         * rungpg.h (_gpgme_gpg_spawn): Likewise.
742         * engine.c (_gpgme_engine_op_genkey): Likewise.  Use those
743         arguments.
744         * rungpg.c (_gpgme_gpg_op_genkey): Likewise.  Complain if those
745         arguments are set.
746         * engine-gpgsm.c (_gpgme_gpgsm_op_genkey): Likewise.  Implement
747         function.
748
749         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Beautify comment.
750
751 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
752
753         * rungpg.c (_gpgme_gpg_op_keylist): Remove handling of keylist
754         mode (for now).
755
756 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
757
758         * wait.c (gpgme_wait): Add new argument STATUS, in which the
759         status of the returned context is returned.
760         (_gpgme_wait_on_condition): Rework the function a bit, to make it
761         aware of cancelled processes, and to allow to use gpgme_wait with
762         CTX being NULL (as documented in the source).
763         (struct proc_s): New member REPORTED.
764         * gpgme.h: Fix prototype.
765         * verify.c (gpgme_op_verify): Fix use of gpgme_wait.
766         * sign.c (gpgme_op_sign): Likewise.
767         * import.c (gpgme_op_import): Likewise.
768         * genkey.c (gpgme_op_genkey): Likewise.
769         * export.c (gpgme_op_export): Likewise.
770         * encrypt.c (gpgme_op_encrypt): Likewise.
771         * delete.c (gpgme_op_delete): Likewise.
772         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
773
774 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
775
776         * gpgme.c (gpgme_set_keylist_mode): Possibly return an error
777         value.
778         (gpgme_get_keylist_mode): New function.
779         (gpgme_new): Set the default for keylist_mode member of CTX.
780
781         * gpgme.h (gpgme_set_keylist_mode): Fix prototype.
782         (gpgme_get_keylist_mode): New prototype.
783         (GPGME_KEYLIST_MODE_LOCAL): New macro.
784         (GPGME_KEYLIST_MODE_EXTERN): Likewise..
785
786 2002-02-02  Marcus Brinkmann  <marcus@g10code.de>
787
788         This patch has gotten a bit large... mmh.  The main thing that
789         happens here is that error values are now not determined in the
790         operation function after gpgme_wait completed, but in the status
791         handler when EOF is received.  It should always be the case that
792         either an error is flagged or EOF is received, so that after a
793         gpgme_wait you should never have the situation that no error is
794         flagged and EOF is not received.  One problem is that the engine
795         status handlers don't have access to the context, a horrible
796         kludge works around this for now.  All errors that happen during a
797         pending operation should be catched and reported in ctx->error,
798         including out-of-core and cancellation.  This rounds up neatly a
799         couple of loose ends, and makes it possible to pass up any errors
800         in the communication with the backend as well.  As a bonus, there
801         will be a function to access gpgme->wait, so that the operations
802         can truly be implemented with their _start function.
803
804         * engine-gpgsm.c (gpgsm_status_handler): Horrible kludge to report
805         error back to the context.
806         * rungpg.c (gpg_status_handler): Same horrible kludge applied here.
807
808         * engine-gpgsm.c (gpgsm_assuan_simple_command): Add error checking.
809
810         * wait.c (_gpgme_wait_on_condition): If canceled, set CTX->error
811         to a value indication that.
812
813         * verify.c (add_notation): Set error, not out_of_core.
814         (finish_sig): Likewise.
815         (gpgme_op_verify_start): Don't clear out_of_core.
816         (_gpgme_verify_status_handler): At EOF, clean up the notation data.
817         (gpgme_op_verify): And don't do it here.
818
819         * trustlist.c (trustlist_status_handler): Check error, not out_of_core.
820         (gpgme_op_trustlist_start): Don't clear out_of_core.
821         (gpgme_op_trustlist_next): Check error, not out_of_core.
822         (gpgme_op_trustlist_end): Likewise.
823
824         * ops.h (test_and_allocate_result): New macro.
825         (_gpgme_passphrase_result): Remove prototype.
826         * delete.c (gpgme_op_delete): Return error from context.
827         (delete_status_handler): Use macro test_and_allocate_result.
828         Perform error checking at EOF.
829         (gpgme_op_delete_start): Release result.
830         * passphrase.c (_gpgme_passphrase_status_handler): Use macro
831         test_and_allocate_result, and perform error checking here.
832         (_gpgme_passphrase_result): Function removed.
833         * sign.c (gpgme_op_sign_start): Do not set out_of_core to zero.
834         (gpgme_op_sign): Just return the error value from the context.
835         (sign_status_handler): Only progress if no error is set yet.  If
836         we process an EOF, set the resulting error value (if any).
837         * decrypt.c (_gpgme_decrypt_result): Function removed.
838         (create_result_struct): Function removed.
839         (_gpgme_decrypt_status_handler): Use macro test_and_allocate_result,
840         caclulate error on EOF, do not progress with errors.
841         (_gpgme_decrypt_start): Do not set out_of_core to zero.
842         (gpgme_op_decrypt): Just return the error value from the context.
843         * encrypt.c (encrypt_status_handler): Perform the error checking
844         here.
845         (gpgme_op_encrypt_start): Do not clear out_of_core.
846         * export.c (export_status_handler): Return if error is set in context.
847         (gpgme_op_export_start): Release result.
848         (gpgme_op_export): Return error from context.
849         * decrypt-verify.c (gpgme_op_decrypt_verify): Return the error in
850         the context.
851         * genkey.c (genkey_status_handler): Use macro
852         test_and_allocate_result.  Perform error checking at EOF.
853         (gpgme_op_genkey): Just return the error from context.
854         * import.c (gpgme_op_import): Return the error from context.
855         (import_status_handler): Use macro test_and_allocate_result.
856         * keylist.c (gpgme_op_keylist_start): Do not clear out_of_core.
857         (gpgme_op_keylist_next): Return error of context.
858         (keylist_colon_handler): Set error instead out_of_code.
859         (finish_key): Likewise.
860
861         * context.h: Remove member out_of_core, add member error.
862         * gpgme.c (_gpgme_release_result): Clear error flag.
863
864         * engine.h (_gpgme_engine_get_error): New prototype.
865         * engine.c (_gpgme_engine_get_error): New function.
866         * engine-gpgsm.c (_gpgme_gpgsm_get_error): New function.
867
868         * engine-gpgsm.c (map_assuan_error): New function.
869         (gpgsm_assuan_simple_command): Change return type to GpgmeError,
870         use the new function to map error values.
871         (gpgsm_set_fd): Change return type tp GpgmeError.
872         (_gpgme_gpgsm_op_decrypt): Change type of ERR to GpgmeError.
873         (gpgsm_set_recipients): Likewise.  Change type of return value
874         equivalently.  Adjust error values.
875         (_gpgme_gpgsm_op_import): Likewise.
876         (_gpgme_gpgsm_op_sign): Likewise.
877         (struct gpgsm_object_s): New member error.
878         (gpgsm_status_handler): Set error if error occurs.  Determine
879         error number from ERR line received.  If assuan_read_line fails,
880         terminate the connection.
881
882 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
883
884         * Makefile.am (MOSTLYCLEANFILES): New variable.
885
886 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
887
888         * engine-gpgsm.c (gpgsm_status_handler): At error, terminate the
889         connection to the server.
890
891 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
892
893         * rungpg.h: Add STATUS_KEY_CREATED.
894
895         * progress.c: New file.
896         * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
897
898         * genkey.c (genkey_status_handler): Use
899         _gpgme_progress_status_handler.  Add check for status.
900         (struct genkey_result_s): New structure.
901         (_gpgme_release_genkey_result): New function.
902         (gpgme_op_genkey): Check for error.
903         * gpgme.c (_gpgme_release_result): Call
904         _gpgme_release_genkey_result.
905         * ops.h (_gpgme_release_genkey_result): Add prototype.
906         * types.h (GenKeyResult): New type.
907         * context.h (gpgme_context_s): Add GenKeyResult to member result.
908
909 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
910
911         * gpgme.c (_gpgme_release_result): Call
912         _gpgme_release_delete_result.
913         * ops.h (_gpgme_release_delete_result): Add prototype.
914         * types.h (DeleteResult): New type.
915         * context.h (gpgme_context_s): Add DeleteResult to member result.
916
917         * delete.c (enum delete_problem): New type.
918         (struct delete_result_s): New structure.
919         (_gpgme_release_delete_result): New function.
920         (delete_status_handler): Implement more status codes.
921         (gpgme_op_delete): Return error on failure.
922
923         * import.c (MAX_IMPORTED_FIELDS): Bump up to 14.
924
925 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
926
927         * import.c (struct import_result_s): New structure.
928         (_gpgme_release_import_result): New function.
929         (append_xml_impinfo): Likewise.
930         (import_status_handler): Implement.
931         * gpgme.c (_gpgme_release_result): Add call to
932         _gpgme_release_import_result.
933         * ops.h (_gpgme_release_import_result): Add prototype.
934         * types.h (ImportResult): New type.
935         * context.h (gpgme_context_s): Add ImportResult to member result.
936
937         * encrypt.c (gpgme_op_encrypt): Code clean up.
938
939 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
940
941         * gpgme.h: Add lots of comment and fix the formatting.  Add
942         gpgme_trustlist_end prototype.
943
944 2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
945
946         * gpgme.h: Add new type GpgmeIdleFunc.  Change type of
947         gpgme_register_idle to return and accept this type.
948         * wait.c (gpgme_register_idle): Fix type.
949         Save and return old value of idle_function.
950
951 2002-01-29  Werner Koch  <wk@gnupg.org>
952
953         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode.
954
955         * keylist.c (keylist_colon_handler): Add support for the new "crs"
956         record type.
957
958 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
959
960         * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect,
961         not assuan_pipe_disconnect.
962
963         * Makefile.am (libgpgme_la_LIBADD): Change to link assuan and
964         jnlib (needed by assuan) statically into libgpgme.  Linking a
965         static library into a shared library this way is not portable.
966
967 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
968
969         * gpgme.h (GpgmePassphraseCb): Change type of R_HD from void* to
970         void**.
971
972 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
973
974         * data.c (gpgme_data_new_from_filepart): Change type of LENGTH
975         from off_t to size_t.
976         * gpgme.h: Likewise.
977
978 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
979
980         * wait.c (_gpgme_wait_on_condition): If the process finished,
981         reset the pending flag.  Also if the operation was cancelled.
982
983         (struct proc_s): Rename READY to DONE.
984         (wait_item_s): Likewise.
985         (set_process_ready): Rename to ...
986         (set_process_done): ... this.
987         (_gpgme_remove_proc_from_wait_queue): Call set_process_done
988         instead set_process_ready.
989         (_gpgme_wait_on_condition): Likewise.
990         (do_select): Rename READY to DONE.
991
992         * verify.c (gpgme_op_verify): Do not set pending to zero here.
993         * sign.c (gpgme_op_sign): Likewise.
994         * import.c (gpgme_op_import): Likewise.
995         * genkey.c (gpgme_op_genkey): Likewise.
996         * export.c (gpgme_op_export): Likewise.
997         * encrypt.c (gpgme_op_encrypt): Likewise.
998         * delete.c (gpgme_op_delete): Likewise.
999         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
1000         * decrypt.c (gpgme_op_decrypt): Likewise.
1001
1002 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
1003
1004         * export.c: Cleanup.
1005
1006 2002-01-15  Marcus Brinkmann  <marcus@g10code.de>
1007
1008         * trustlist.c: Various source clean ups.
1009         (my_isdigit): Removed.
1010         (gpgme_op_trustlist_end): New function.
1011
1012 2002-01-13  Marcus Brinkmann  <marcus@g10code.de>
1013
1014         * gpgme.c: Various source clean ups, like renaming C to CTX where
1015         appropriate.
1016         (gpgme_new): Clear R_CTX before starting the work.
1017         (my_isdigit): Removed.
1018         (my_isxdigit): Likewise.
1019
1020         * data.c: Various source clean ups.
1021         (gpgme_data_new_from_mem): Check BUFFER after clearing R_DH.
1022         (gpgme_data_new_with_read_cb): Similar for READ_CB.
1023         (gpgme_data_new_from_file): Loop over fread while EINTR.
1024         (gpgme_data_new_from_filepart): Rediddled a bit.  Allow LENGTH to
1025         be zero.  Loop over fread while EINTR.
1026
1027         (my_isdigit): Removed.
1028         (my_isxdigit): Likewise.
1029
1030 2001-12-21  Marcus Brinkmann  <marcus@g10code.de>
1031
1032         * engine-gpgsm.c (_gpgme_gpgsm_new): Replace General_Error with
1033         Pipe_Error where appropriate.
1034
1035 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
1036
1037         * engine.c: Include `string.h'.  Reported by Stéphane Corthésy.
1038
1039         * version.c (get_engine_info): Remove prototype.
1040
1041 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
1042
1043         * engine-gpgsm.c (_gpgme_gpgsm_new): New variable CHILD_FDS.
1044         Fill it with the servers fds, and pass it to assuan_pipe_connect.
1045
1046 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
1047
1048         * keylist.c (gpgme_op_keylist_end): New function.
1049         * gpgme.h (gpgme_op_keylist_end): New prototype.
1050
1051         * engine.h (gpgme_engine_check_version): Move prototype to ...
1052         * gpgme.h (gpgme_engine_check_version): ... here.
1053
1054         * genkey.c (gpgme_op_genkey_start): Remove unused variable.
1055
1056 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
1057
1058         * version.c (gpgme_get_engine_info): Reimplemented.
1059         (gpgme_check_engine): Reimplemented.
1060         (_gpgme_compare_versions): Return NULL if MY_VERSION is NULL.
1061
1062         * engine.c: Include `io.h'.
1063         (gpgme_engine_get_info): New function.
1064         * engine.h (gpgme_engine_check_version, _gpgme_engine_get_info):
1065         Add prototype.
1066
1067 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
1068
1069         * rungpg.c (struct reap_s, reap_list, reap_list_lock): Moved to ...
1070         * engine.c (struct reap_s, reap_list, reap_list_lock): ... here.
1071         Include `time.h', `sys/types.h', `assert.h', and `sema.h'.
1072
1073         * rungpg.c (_gpgme_engine_add_child_to_reap_list): New function.
1074         (do_reaping, _gpgme_gpg_housecleaning): Moved to ...
1075         * engine.c (do_reaping, _gpgme_engine_housecleaning): ... here.
1076         * rungpg.c (_gpgme_gpg_release): Replace code that is now in its
1077         own function by call to _gpgme_engine_add_child_to_reap_list().
1078
1079         * wait.c: Include `engine.h'.
1080         (run_idle): Call _gpgme_engine_housecleaning(), not
1081         _gpgme_gpg_housecleaning().
1082         
1083 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
1084
1085         * key.c (_gpgme_key_append_name): Append, not prepend, the uid.
1086         Initialize the next field of the uid structure.
1087         (gpgme_key_get_as_xml): Do not list last uid first.
1088
1089 2001-12-17  Marcus Brinkmann  <marcus@g10code.de>
1090
1091         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New
1092         function [!ENABLE_GPGSM].
1093
1094 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1095
1096         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Put TEXT into
1097         message_data, not SIG.
1098         (_gpgme_gpgsm_op_sign): Use `--detached', not `--detach'.
1099
1100         * sign.c (sign_status_handler): Call
1101         _gpgme_passphrase_status_handler early.
1102
1103 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1104
1105         * engine-gpgsm.c: Revert last change.
1106
1107 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1108
1109         * engine-gpgsm.c (gpgsm_status_handler): Freeze the output file
1110         handler when ending this operation, otherwise the wait function
1111         will sit on it.
1112
1113 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1114
1115         * engine-gpgsm.c (struct gpgsm_object_s): New member colon.attic.
1116         (_gpgme_gpgsm_new): Initialize some more members.
1117         (_gpgme_gpgsm_release): Free the colon line handler's attic line.
1118         (gpgsm_status_handler): Rework the inline-data processing.
1119
1120 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
1121
1122         * rungpg.c (_gpgme_gpg_spawn): Do not add the fds to the child
1123         list that are not dup'ed, for those the close-on-exec flag is set
1124         now.
1125         * version.c (_gpgme_get_program_version): Remove first entry in
1126         CFD, as the close-on-exec flag is now set for this fd.
1127
1128 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
1129
1130         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): Do not add `armor'
1131         option to `ENCRYPT'.
1132         * engine-gpgsm.c (gpgsm_set_recipients): Free LINE when returning
1133         successfully.
1134
1135 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
1136
1137         * engine-gpgsm.c (close_notify_handler): New function.
1138         (_gpgme_gpgsm_new): Manage the file descriptors a
1139         bit differently.  Do not set close-on-exec flags.
1140         (_gpgme_gpgsm_op_decrypt): Do not set message_fd
1141         to -1, this is done by the close handler.
1142         (_gpgme_gpgsm_op_encrypt): Likewise.
1143         (_gpgme_gpgsm_op_import): Likewise (also for output_fd).
1144         (_gpgme_gpgsm_op_keylist): Likewise (also for input_fd and output_fd).
1145         (_gpgme_gpgsm_op_sign): Likewise.
1146         (_gpgme_gpgsm_op_verify): Likewise, but for output_fd.
1147
1148         * posix-io.c (_gpgme_io_pipe): Set the close-on-exec flag for the
1149         non-inherited file descriptor index of the pipe.
1150
1151 2001-12-13  Werner Koch  <wk@gnupg.org>
1152
1153         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New.
1154         (gpgsm_status_handler): Pass datalines to a colon handler
1155         * engine.c (_gpgme_engine_set_colon_line_handler): Set the colon
1156         handler for gpgsm.
1157
1158         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Allow NULL for
1159         pattern.
1160         (gpgsm_assuan_simple_command): Removed underscore from
1161         assuan_write_line.
1162         (_gpgme_gpgsm_start): Ditto.
1163         (gpgsm_assuan_simple_command): Replaced interal Assuan read
1164         function by the new assuan_read_line.  Removed the use of the
1165         internal header.
1166         (gpgsm_status_handler): Ditto. Use the new assuan_pending_line.
1167         (_gpgme_gpgsm_start): Use the documented way to get an fd from
1168         assuan.
1169
1170         * keylist.c (keylist_colon_handler): Handle "crt" records
1171         * key.h (gpgme_key_s): Add an x509 flag.
1172         * key.c (parse_x509_user_id): New.
1173         (_gpgme_key_append_name): Handle x.509 names.
1174
1175 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
1176
1177         * engine-gpgsm.c (gpgsm_status_handler): Make it work with current
1178         version of assuan.
1179
1180 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
1181
1182         * engine-gpgsm.c (gpgsm_set_fd): Accept one more argument OPT.
1183         (_gpgme_gpgsm_op_encrypt): Pass armor argument to gpgsm_set_fd for
1184         output descriptor.
1185         (_gpgme_gpgsm_op_sign): Likewise.
1186
1187 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
1188
1189         * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
1190         occurs.
1191
1192 2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
1193
1194         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
1195
1196 2001-11-24  Marcus Brinkmann  <marcus@g10code.de>
1197
1198         * engine-gpgsm.c (gpgsm_status_handler): Don't break if bsearch fails.
1199         Deal with assuan read line returning more than one line (for now).
1200
1201 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
1202
1203         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement it according to
1204         the current protocol definition.
1205
1206 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
1207
1208         * engine-gpgsm.c (_gpgme_gpgsm_new): Set CLOEXEC flag for parent
1209         ends of the pipe.
1210
1211 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1212
1213         * engine-gpgsm.c: Include stdlib.h and string.h.  Also include,
1214         for now, rungpg.h and status-table.h.
1215         (gpgsm_status_handler): Implement more of the status handler.
1216
1217 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1218
1219         * engine.c (_gpgme_engine_op_decrypt): Implement CMS case.
1220         (_gpgme_engine_op_delete): Likewise.
1221         (_gpgme_engine_op_encrypt): Likewise.
1222         (_gpgme_engine_op_export): Likewise.
1223         (_gpgme_engine_op_genkey): Likewise.
1224         (_gpgme_engine_op_keylist): Likewise.
1225         (_gpgme_engine_op_sign): Likewise.
1226         (_gpgme_engine_op_trustlist): Likewise.
1227
1228         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): New function.
1229         (gpgsm_assuan_simple_command): Likewise.
1230         (gpgsm_set_recipients): Likewise.
1231         (gpgsm_set_fd): Reimplement using gpgsm_assuan_simple_command.
1232         (_gpgme_gpgsm_op_delete): New function.
1233         (_gpgme_gpgsm_op_export): Likewise.
1234         (_gpgme_gpgsm_op_genkey): Likewise.
1235         (_gpgme_gpgsm_op_sign): Likewise.
1236         (_gpgme_gpgsm_op_keylist): Likewise.
1237         (_gpgme_gpgsm_op_trustlist): Likewise.
1238         (_gpgme_gpgsm_release): Release command.
1239         (_gpgme_gpgsm_op_decrypt): Allocate command.
1240         (_gpgme_gpgsm_op_import): Likewise.
1241         (gpgsm_status_handler): Also treat `ERR' strings as EOF.
1242
1243 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1244
1245         * gpgme.h (gpgme_set_protocol): New prototype.
1246
1247 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1248
1249         * engine-gpgsm.c (_gpgme_gpgsm_op_decrypt): New function.
1250         (_gpgme_gpgsm_op_import): Likewise.
1251
1252 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1253
1254         * engine-gpgsm.c: Shuffle around header inclusion a bit, to still
1255         keep them seperate.
1256         (_gpgme_set_status_handler) [!ENABLE_GPGSM]: New function.
1257
1258 2001-11-22  Werner Koch  <wk@gnupg.org>
1259
1260         * engine-gpgsm.c: Include more headers so that NULL and mk_error
1261         is defined even with an undefined GPGSM_PATH.
1262
1263 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1264
1265         * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
1266         gpg_outbound_handler): Moved to ...
1267         * data.c (_gpgme_data_inbound_handler, write_mem_data,
1268         write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
1269         _gpgme_* ones non-static.
1270         * data.c: Include io.h.
1271
1272         * ops.h (_gpgme_data_inbound_handler): New prototype.
1273         (_gpgme_data_outbound_handler): Likewise.
1274         (_gpgme_gpg_spawn): Use these new functions.
1275
1276         * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
1277         _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
1278         _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
1279         _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
1280         _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
1281         _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
1282         Include <rungpg.h> for status handler function.
1283
1284         * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
1285         input_data, output_fd, output_data, message_fd, message_data, command
1286         and status.
1287         (_gpgme_gpgsm_new): Open input, output and message pipes before
1288         connecting to the client.  Close server's ends afterwards.
1289         (_gpgme_gpgsm_release): Close open file descriptors.  Remove
1290         server process from wait queue.
1291         (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
1292         _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
1293         
1294         * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
1295         (_gpgme_engine_set_status_handler): Likewise.
1296         (_gpgme_engine_op_verify): Likewise.
1297
1298 2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
1299
1300         * context.h: Do not include rungpg.h, but engine.h.
1301         (struct gpgme_context_s): Replace member gpg with engine.
1302         * gpgme.c (gpgme_release): Release engine, not gpg.
1303
1304         * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
1305         moved ...
1306         * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
1307         Make static, change order of arguments, and return an error value.
1308         * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
1309
1310         * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
1311         (_gpgme_gpg_op_encrypt): Likewise.
1312         (_gpgme_gpg_op_decrypt): Likewise.
1313         (_gpgme_gpg_op_delete): Likewise.
1314         (_gpgme_gpg_op_export): Likewise.
1315         (_gpgme_gpg_op_genkey): Likewise.
1316         (_gpgme_gpg_op_import): Likewise.
1317         (_gpgme_gpg_op_keylist): Likewise.
1318         (_gpgme_gpg_op_sign): Likewise.
1319         (_gpgme_gpg_op_trustlist): Likewise.
1320         * rungpg.c (_gpgme_gpg_op_verify): New function.
1321         (_gpgme_gpg_op_encrypt): Likewise.
1322         (_gpgme_gpg_op_decrypt): Likewise.
1323         (_gpgme_gpg_op_delete): Likewise.
1324         (_gpgme_gpg_op_export): Likewise.
1325         (_gpgme_gpg_op_genkey): Likewise.
1326         (_gpgme_gpg_op_import): Likewise.
1327         (_gpgme_gpg_op_keylist): Likewise.
1328         (_gpgme_gpg_op_sign): Likewise.
1329         (_gpgme_gpg_op_trustlist): Likewise.
1330
1331         * engine.h (_gpgme_engine_set_status_handler): Add prototype.
1332         (_gpgme_engine_set_command_handler): Likewise.
1333         (_gpgme_engine_set_colon_line_handler): Likewise.
1334         (_gpgme_engine_op_decrypt): Likewise.
1335         (_gpgme_engine_op_delete): Likewise.
1336         (_gpgme_engine_op_encrypt): Likewise.
1337         (_gpgme_engine_op_export): Likewise.
1338         (_gpgme_engine_op_genkey): Likewise.
1339         (_gpgme_engine_op_import): Likewise.
1340         (_gpgme_engine_op_keylist): Likewise.
1341         (_gpgme_engine_op_sign): Likewise.
1342         (_gpgme_engine_op_trustlist): Likewise.
1343         (_gpgme_engine_op_verify): Likewise.
1344         (_gpgme_engine_start): Likewise.
1345         * engine.c (_gpgme_engine_set_status_handler): New function.
1346         (_gpgme_engine_set_command_handler): Likewise.
1347         (_gpgme_engine_set_colon_line_handler): Likewise.
1348         (_gpgme_engine_op_decrypt): Likewise.
1349         (_gpgme_engine_op_delete): Likewise.
1350         (_gpgme_engine_op_encrypt): Likewise.
1351         (_gpgme_engine_op_export): Likewise.
1352         (_gpgme_engine_op_genkey): Likewise.
1353         (_gpgme_engine_op_import): Likewise.
1354         (_gpgme_engine_op_keylist): Likewise.
1355         (_gpgme_engine_op_sign): Likewise.
1356         (_gpgme_engine_op_trustlist): Likewise.
1357         (_gpgme_engine_op_verify): Likewise.
1358         (_gpgme_engine_start): Likewise.
1359
1360         * verify.c (gpgme_op_verify_start): Reimplement in terms of above
1361         functions.
1362         * encrypt.c (gpgme_op_encrypt_start): Likewise.
1363         * decrypt.c (_gpgme_decrypt_start): Likewise.
1364         * passphrase.c (_gpgme_passphrase_start): Likewise.
1365         * keylist.c (gpgme_op_keylist_start): Likewise.
1366
1367 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
1368
1369         * types.h: Add types EngineObject and GpgsmObject.
1370
1371         * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
1372         engine-gpgsm.c, engine.h and engine.c.
1373         * engine.h: New file.
1374         * engine.c: Likewise.
1375         * engine-gpgsm.h: Likewise.
1376         * engine-gpgsm.c: Likewise.
1377         
1378         * rungpg.c (_gpgme_gpg_get_version): New function.
1379         (_gpgme_gpg_check_version): Likewise.
1380         * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
1381         _gpgme_gpg_check_version.
1382
1383         * version.c (compare_versions): Rename to ...
1384         (_gpgme_compare_versions): ... this.  Make non-static.
1385         (gpgme_check_version): Use _gpgme_compare_versions rather than
1386         compare_versions.
1387         (gpgme_check_engine): Likewise.
1388         * ops.h (_gpgme_get_program_version): Add prototype.
1389
1390 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
1391
1392         * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
1393         (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
1394         (libgpgme_la_LIBADD): Likewise.
1395
1396 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
1397
1398         * version.c: Remove global variables lineno and
1399         tmp_engine_version.
1400         (version_handler): Removed.
1401         (_gpgme_get_program_version): New function.
1402         (get_engine_info): Don't use context and version_handler,
1403         but _gpgme_get_program_version.
1404         * ops.h (_gpgme_get_program_version): Add prototype for
1405         _gpgme_get_program_version (we expect to use it elsewhere soon).
1406
1407 2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
1408
1409         * version.c (get_engine_info): If GnuPG is not available, return
1410         an error message.
1411         * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
1412         undefined.
1413         (_gpgme_get_gpgsm_path): New function.
1414         * w32-util.c (find_program_in_registry): New static function.
1415         (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
1416         to use find_program_in_registry.
1417         (_gpgme_get_gpgsm_path): New function.
1418         (util.h): Prototype _gpgme_get_gpgsm_path).
1419         * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
1420         returns non-null.
1421
1422 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
1423
1424         * decrypt-verify.c: New file.
1425         * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
1426         * types.h: Add decrypt-verify types.
1427         * ops.h: Likewise.
1428         * context.h: Add result type for decrypt-verify.
1429         * gpgme.h: Add decrypt-verify prototypes.
1430
1431         * decrypt.c (decrypt_status_handler): Renamed to ...
1432         (_gpgme_decrypt_status_handler): ... this.  Make non-static.
1433         (_gpgme_decrypt_start): New function, derived from
1434         gpgme_op_decrypt_start.
1435         (gpgme_op_decrypt_start): Reimplement in terms of
1436         _gpgme_decrypt_start.
1437         (_gpgme_decrypt_result): New function to retrieve error value.
1438         (gpgme_op_decrypt): Use _gpgme_decrypt_result.
1439         * ops.h: Add prototypes for new functions.
1440
1441         * verify.c (verify_status_handler): Renamed to ...
1442         (_gpgme_verify_status_handler): ... this.  Make non-static.
1443         (gpgme_op_verify_start): Use new function name.
1444         (intersect_stati): Renamed to ...
1445         (_gpgme_intersect_stati): ... this.  Make non-static.
1446         (gpgme_op_verify): Use new name.
1447         * ops.h: Add prototypes for new functions.
1448
1449 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
1450
1451         * passphrase.c: New file.
1452         * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
1453         * ops.h (_gpgme_passphrase_result): Add prototypes from
1454         passphrase.c.
1455         * types.h: Likewise.
1456         * context.h: Add member passphrase to result.
1457         * gpgme.c (_gpgme_release_result): Release passphrase member.
1458
1459         * decrypt.c: Some formatting and variable name changes (like
1460         CTX instead C).
1461         (struct decrypt_result_s): Remove members now found in
1462         passphrase result.
1463         (_gpgme_release_decrypt_result): Don't release removed members.
1464         (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
1465         and don't handle the cases catched there.
1466         (command_handler): Removed.
1467         (gpgme_op_decrypt_start): Don't set command handler, but invoke
1468         _gpgme_passphrase_start which does it.
1469         (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
1470         cases covered by it.
1471
1472         * sign.c Some formatting and variable name changes (like
1473         CTX instead C).
1474         (struct sign_result_s): Remove members now found in
1475         passphrase result.
1476         (_gpgme_release_sign_result): Don't release removed members.
1477         (sign_status_handler): Call _gpgme_passphrase_status_handler,
1478         and don't handle the cases catched there.
1479         (command_handler): Removed.
1480         (gpgme_op_sign_start): Don't set command handler, but invoke
1481         _gpgme_passphrase_start which does it.
1482         (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
1483         cases covered by it.
1484
1485 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
1486
1487         * decrypt.c (command_handler): Fix last change.
1488
1489 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
1490
1491         * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
1492         Rename R2 to NEXT_RESULT.
1493         (intersect_stati): Rename RES to RESULT.
1494         (gpgme_get_sig_status): Likewise.  Do not check return_type, but
1495         the member verify of result.
1496         (gpgme_get_sig_key): Likewise.
1497
1498         * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
1499         RESULT is zero, return.
1500         (sign_status_handler, command_handler): Do not check return_type,
1501         but the member sign of result.
1502         (gpgme_op_sign): Likewise.  Drop assertion.
1503
1504         * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
1505         If RESULT is zero, return.
1506         (encrypt_status_handler): Do not check return_type, but the member
1507         encrypt of result.
1508         (gpgme_op_encrypt): Likewise.  Drop assertion.
1509
1510         * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
1511         (create_result_struct): Do not set result_type.
1512         (command_handler, decrypt_status_handler): Do not check
1513         return_type, but the member decrypt of result.
1514         (gpgme_op_decrypt): Likewise.  Drop assertion.
1515
1516         * context.h (enum ResultType): Removed.
1517         (struct gpgme_context_s): Remove member result_type.
1518         (struct result): Replaces union result.
1519         * gpgme.c: Include string.h.
1520         (_gpgme_release_result): Release all members of c->result, which
1521         is now a struct.  Zero out all members of the struct afterwards.
1522
1523 2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
1524
1525         * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
1526         Release all members of the list GPG->arglist.
1527         Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
1528
1529 2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
1530
1531         * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
1532
1533         * key.c: Include string.h.
1534         * data.c: Likewise.
1535         * recipient.c: Likewise.
1536
1537 2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
1538
1539         * context.h: New member signers_len.
1540         * signers.c (gpgme_signers_clear): Require that signers are
1541         non-NULL with assertion.  Use signers_len to determine how much
1542         keys to release.  Add documentation.
1543         (gpgme_signers_add): Use signers_len to determine if the buffer is
1544         large enough.  Use xtryrealloc rather than xtrymalloc and copying.
1545         Add documentation.
1546         (gpgme_signers_enum): Use signers_len to determine if key is
1547         available.  Add documentation.
1548
1549 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
1550
1551         * data.c (_gpgme_data_append): Check if LENGTH is smaller than
1552         ALLOC_CHUNK, not DH->length.
1553
1554 2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
1555
1556         * gpgme.c (gpgme_set_protocol): Fix last change.
1557
1558 2001-10-15  Werner Koch  <wk@gnupg.org>
1559
1560         * gpgme.h (GpgmeProtocol): New.
1561         * gpgme.c (gpgme_set_protocol): New.
1562
1563 2001-09-26  Werner Koch  <wk@gnupg.org>
1564
1565         * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
1566         (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
1567
1568 2001-09-17  Werner Koch  <wk@gnupg.org>
1569
1570         * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
1571         callers to use this function without a check for tmp_key.
1572         
1573         * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
1574         emptying the queue.  Bug reported by Stéphane Corthésy.
1575
1576 2001-09-12  Werner Koch  <wk@gnupg.org>
1577
1578         * data.c (gpgme_data_rewind): Allow rewind for callbacks.
1579
1580 2001-09-07  Werner Koch  <wk@gnupg.org>
1581
1582         * rungpg.h: Add NO_RECP.
1583         * encrypt.c (encrypt_status_handler): Take on No_RECP.
1584         (gpgme_op_encrypt): Better error return.
1585
1586         * verify.c (verify_status_handler): Take on NODATA.
1587
1588 2001-09-03  Werner Koch  <wk@gnupg.org>
1589
1590         * rungpg.h: Added STATUS_INV_RECP.
1591         * gpgme.c (_gpgme_release_result): Add support for new
1592         EncryptResult object.
1593         * encrypt.c (append_xml_encinfo): New.
1594         (encrypt_status_handler): Add some status parsing.
1595         (_gpgme_release_encrypt_result): New.
1596
1597 2001-08-29  Werner Koch  <wk@gnupg.org>
1598
1599         * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
1600
1601         * keylist.c (keylist_colon_handler): Do a finish key if we receive
1602         an EOF here.  This is probably the reason for a lot of bugs
1603         related to keylisting.  It is so obvious.  Kudos to Enno Cramer
1604         for pointing that out. 
1605
1606 2001-08-28  Werner Koch  <wk@gnupg.org>
1607
1608         * gpgme.c, gpgme.h (gpgme_get_op_info): New.
1609         (_gpgme_set_op_info): New. 
1610         (_gpgme_release_result): Reset the op_info here.
1611         * sign.c (append_xml_siginfo): New.
1612         (sign_status_handler): Store the sig create information.
1613
1614 2001-07-31  Werner Koch  <wk@gnupg.org>
1615
1616         * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
1617
1618 2001-07-30  Werner Koch  <wk@gnupg.org>
1619
1620         * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
1621
1622         * rungpg.c (build_argv): Disable armor comments
1623         * w32-io.c (build_commandline): Need to add quotes here
1624
1625 2001-07-24  Werner Koch  <wk@gnupg.org>
1626
1627         * data.c (gpgme_data_read): Add a a way to return the available bytes.
1628
1629 2001-07-23  Werner Koch  <wk@gnupg.org>
1630
1631         * util.c: Removed stpcpy() because we use the version from jnlib.
1632
1633 2001-07-19  Werner Koch  <wk@gnupg.org>
1634
1635         * mkstatus: Define the collating sequence for sort.
1636
1637 2001-06-26  Werner Koch  <wk@gnupg.org>
1638
1639         * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
1640
1641 2001-06-15  Werner Koch  <wk@gnupg.org>
1642
1643         * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
1644         to Timo for pointing this out.
1645
1646 2001-06-01  Werner Koch  <wk@gnupg.org>
1647
1648         * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
1649         Johannes Poehlmann.
1650
1651 2001-05-28  Werner Koch  <wk@gnupg.org>
1652
1653         * version.c (gpgme_check_engine): Stop version number parsing at
1654         the opening angle and not the closing one.  By Tommy Reynolds.
1655
1656 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
1657
1658         * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
1659         line, because it gave an error if another operation had been made 
1660         before using the same context.
1661         
1662         * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
1663         one line to release the gpg object in the context (if any).
1664         
1665 2001-04-26  Werner Koch  <wk@gnupg.org>
1666
1667         * key.c, key.h (_gpgme_key_cache_init): New.
1668         (_gpgme_key_cache_add): New.
1669         (_gpgme_key_cache_get): New.
1670         * version.c (do_subsystem_inits): Init the cache.
1671         * keylist.c (finish_key): Put key into the cache
1672         * verify.c (gpgme_get_sig_key): First look into the cache.
1673
1674 2001-04-19  Werner Koch  <wk@gnupg.org>
1675
1676         * keylist.c (parse_timestamp): Adjusted for the changed
1677         --fixed-list-mode of gpg 1.0.4h.
1678
1679 2001-04-05  Werner Koch  <wk@gnupg.org>
1680
1681         * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
1682
1683 2001-04-04  Werner Koch  <wk@gnupg.org>
1684
1685         * w32-io.c (_gpgme_io_select): Don't select on the writer if there
1686         are still bytes pending.  Timo found this not easy to track down
1687         race condition. 
1688
1689 2001-04-02  Werner Koch  <wk@gnupg.org>
1690
1691         * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
1692         * key.c (gpgme_key_get_ulong_attr): And return those attribs.
1693
1694         * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
1695         the mode set in the current context.  Suggested by Timo.
1696
1697         * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
1698         can_encrypt. By Timo.
1699
1700 2001-03-30  Werner Koch  <wk@gnupg.org>
1701
1702         * debug.c (debug_init): Allow to specify a debug file.
1703         (_gpgme_debug_level): New.
1704
1705         * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
1706         (_gpgme_io_select): Debug only with level > 2.
1707
1708 2001-03-15  Werner Koch  <wk@gnupg.org>
1709
1710         * rungpg.c: Included time.h.
1711
1712         * key.h: New keyflags for capabilities.
1713         * keylist.c (set_mainkey_capability, set_subkey_capability): New.
1714         (keylist_colon_handler): Parse them.
1715         * gpgme.h: New attribute values for capabilties.
1716         * key.c (gpgme_key_get_string_attr): Return them.
1717         (capabilities_to_string): New.
1718         (gpgme_key_get_ulong_attr): Return the global caps.
1719
1720 2001-03-14  Werner Koch  <wk@gnupg.org>
1721
1722         * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
1723         Thanks to Jan Oliver Wagner.
1724
1725 2001-03-13  Werner Koch  <wk@gnupg.org>
1726
1727         * context.h: Add invalid and revoke flags to user_id structure.
1728         * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
1729         (keylist_colon_handler): Adjust for that.
1730         (set_userid_flags): New. 
1731         (set_mainkey_trust_info): Handle new key invalid flag
1732         (set_subkey_trust_info): Ditto.
1733         * gpgme.h: Add new attributes for key and user ID flags.
1734         * key.c (_gpgme_key_append_name): Init these flags
1735         (gpgme_key_get_as_xml): Print them.
1736         (one_uid_as_xml): New helper for above.
1737         (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
1738         Return the new attributes.  Enhanced, so that subkey information
1739         can be returned now.
1740
1741 2001-02-28  Werner Koch  <wk@gnupg.org>
1742
1743         * w32-io.c (destroy_reader): Set stop_me flag.
1744         (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
1745         (_gpgme_io_write): Use a writer thread to avaoid blocking.
1746         (_gpgme_io_close): Cleanup a writer thread
1747         (_gpgme_io_select): Repalce tthe faked wait on writing by a real
1748         waiting which is now possible due to the use of a writer thread.
1749
1750 2001-02-20  Werner Koch  <wk@gnupg.org>
1751
1752         * w32-io.c (destroy_reader,kill_reader): New. 
1753         (create_reader, reader): Add a new event to stop the thread.
1754         (_gpgme_io_close): Kill the reader thread.
1755
1756         * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
1757         * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
1758
1759         * wait.c: Reworked the whole thing.
1760         * rungpg.c (_gpgme_gpg_new): Init pid to -1.
1761         (_gpgme_gpg_release): Remove the process from the wait queue.
1762
1763 2001-02-19  Werner Koch  <wk@gnupg.org>
1764
1765         * w32-io.c (_gpgme_io_set_close_notify): New.
1766         (_gpgme_io_close): Do the notification.
1767
1768         * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
1769         microseconds.
1770
1771         * wait.c (remove_process): Don't close the fd here.
1772         (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
1773         (_gpgme_wait_on_condition): Remove the assert on the queue and
1774         break out if we could not find the queue.  The whole thing should
1775         be reworked.
1776
1777         * posix-io.c (_gpgme_io_set_close_notify): New.
1778         (_gpgme_io_close): Do the notification.
1779
1780         * rungpg.c (close_notify_handler): New. 
1781         (_gpgme_gpg_new): Register a callback for the fd.
1782         (_gpgme_gpg_set_colon_line_handler): Ditto.
1783         (build_argv): Ditto
1784
1785 2001-02-13  Werner Koch  <wk@gnupg.org>
1786
1787         * rungpg.c (struct reap_s): Replaced pid_t by int.
1788
1789         * types.h: Add ulong typedef.
1790
1791         * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
1792         (_gpgme_gpg_release): Reap children.
1793         * io.h, posix-io.c (_gpgme_io_kill): New.
1794         * w32-io.c (_gpgme_io_kill): New (dummy).
1795
1796         * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
1797
1798         * posix-io.c (_gpgme_io_read): Add some debug output. 
1799         (_gpgme_io_write): Ditto.
1800         (_gpgme_io_select): Increased the timeout.
1801
1802 2001-02-12  Werner Koch  <wk@gnupg.org>
1803
1804         Enhanced the signature verification, so that it can how handle
1805         more than one signature and is able to return more information on 
1806         the signatures.
1807         * verify.c (gpgme_get_sig_key): New.
1808         (gpgme_get_sig_status): New.
1809
1810         * gpgme.h: Add stdio.h. 
1811         (GpgmeSigStat): New status DIFF.
1812
1813 2001-02-01  Werner Koch  <wk@gnupg.org>
1814
1815         * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
1816         code to all Set/ResetEvent().
1817
1818         * rungpg.c (read_status): Check for end of stream only if we have
1819         an r.  By Timo.
1820
1821 2001-01-31  Werner Koch  <wk@gnupg.org>
1822
1823         * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
1824         (propagate_term_results,clear_active_fds): Removed.
1825         (count_active_fds): Renamed to .. 
1826         (count_active_and_thawed_fds): .. this and count only thawed fds. 
1827
1828         * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
1829         status.eof ;-)
1830
1831 2001-01-30  Werner Koch  <wk@gnupg.org>
1832
1833         * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.
1834
1835         * version.c (get_engine_info): Return better error information.
1836
1837         * posix-util.c, w32-util.c: New.
1838         (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
1839         * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.
1840
1841         * signers.c (gpgme_signers_add): Ooops, one should test code and
1842         not just write it; the newarr was not assigned.  Thanks to José
1843         for pointing this out.  Hmmm, still not tested, why shoudl a coder
1844         test his fix :-)
1845
1846         * w32-io.c: Does now use reader threads, so that we can use
1847         WaitForMultipleObjects. 
1848         * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
1849         Does currently only work for W32.
1850
1851         * debug.c, util.h : New. Changed all fprintfs to use this new
1852         set of debugging functions.
1853
1854 2001-01-23  Werner Koch  <wk@gnupg.org>
1855
1856         * data.c (_gpgme_data_release_and_return_string): Fixed string
1857         termination.
1858
1859 2001-01-22  Werner Koch  <wk@gnupg.org>
1860
1861         * delete.c: New.
1862
1863         * signers.c: New.
1864         * key.c (gpgme_key_ref, gpgme_key_unref): New.
1865         * sign.c (gpgme_op_sign_start): Allow the use of other keys.
1866
1867         * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
1868         * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.
1869
1870 2001-01-05  Werner Koch  <wk@gnupg.org>
1871
1872         * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
1873
1874
1875  Copyright 2001, 2002 g10 Code GmbH
1876
1877  This file is free software; as a special exception the author gives
1878  unlimited permission to copy and/or distribute it, with or without
1879  modifications, as long as this notice is preserved.
1880
1881  This file is distributed in the hope that it will be useful, but
1882  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1883  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1884