df4f84039803be1e5d8da37c4330a05707d0433c
[gpgme.git] / gpgme / ChangeLog
1 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
2
3         * rungpg.c (_gpgme_gpg_op_keylist): Remove handling of keylist
4         mode (for now).
5
6 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
7
8         * wait.c (gpgme_wait): Add new argument STATUS, in which the
9         status of the returned context is returned.
10         (_gpgme_wait_on_condition): Rework the function a bit, to make it
11         aware of cancelled processes, and to allow to use gpgme_wait with
12         CTX being NULL (as documented in the source).
13         (struct proc_s): New member REPORTED.
14         * gpgme.h: Fix prototype.
15         * verify.c (gpgme_op_verify): Fix use of gpgme_wait.
16         * sign.c (gpgme_op_sign): Likewise.
17         * import.c (gpgme_op_import): Likewise.
18         * genkey.c (gpgme_op_genkey): Likewise.
19         * export.c (gpgme_op_export): Likewise.
20         * encrypt.c (gpgme_op_encrypt): Likewise.
21         * delete.c (gpgme_op_delete): Likewise.
22         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
23
24 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
25
26         * gpgme.c (gpgme_set_keylist_mode): Possibly return an error
27         value.
28         (gpgme_get_keylist_mode): New function.
29         (gpgme_new): Set the default for keylist_mode member of CTX.
30
31         * gpgme.h (gpgme_set_keylist_mode): Fix prototype.
32         (gpgme_get_keylist_mode): New prototype.
33         (GPGME_KEYLIST_MODE_LOCAL): New macro.
34         (GPGME_KEYLIST_MODE_EXTERN): Likewise..
35
36 2002-02-02  Marcus Brinkmann  <marcus@g10code.de>
37
38         This patch has gotten a bit large... mmh.  The main thing that
39         happens here is that error values are now not determined in the
40         operation function after gpgme_wait completed, but in the status
41         handler when EOF is received.  It should always be the case that
42         either an error is flagged or EOF is received, so that after a
43         gpgme_wait you should never have the situation that no error is
44         flagged and EOF is not received.  One problem is that the engine
45         status handlers don't have access to the context, a horrible
46         kludge works around this for now.  All errors that happen during a
47         pending operation should be catched and reported in ctx->error,
48         including out-of-core and cancellation.  This rounds up neatly a
49         couple of loose ends, and makes it possible to pass up any errors
50         in the communication with the backend as well.  As a bonus, there
51         will be a function to access gpgme->wait, so that the operations
52         can truly be implemented with their _start function.
53
54         * engine-gpgsm.c (gpgsm_status_handler): Horrible kludge to report
55         error back to the context.
56         * rungpg.c (gpg_status_handler): Same horrible kludge applied here.
57
58         * engine-gpgsm.c (gpgsm_assuan_simple_command): Add error checking.
59
60         * wait.c (_gpgme_wait_on_condition): If canceled, set CTX->error
61         to a value indication that.
62
63         * verify.c (add_notation): Set error, not out_of_core.
64         (finish_sig): Likewise.
65         (gpgme_op_verify_start): Don't clear out_of_core.
66         (_gpgme_verify_status_handler): At EOF, clean up the notation data.
67         (gpgme_op_verify): And don't do it here.
68
69         * trustlist.c (trustlist_status_handler): Check error, not out_of_core.
70         (gpgme_op_trustlist_start): Don't clear out_of_core.
71         (gpgme_op_trustlist_next): Check error, not out_of_core.
72         (gpgme_op_trustlist_end): Likewise.
73
74         * ops.h (test_and_allocate_result): New macro.
75         (_gpgme_passphrase_result): Remove prototype.
76         * delete.c (gpgme_op_delete): Return error from context.
77         (delete_status_handler): Use macro test_and_allocate_result.
78         Perform error checking at EOF.
79         (gpgme_op_delete_start): Release result.
80         * passphrase.c (_gpgme_passphrase_status_handler): Use macro
81         test_and_allocate_result, and perform error checking here.
82         (_gpgme_passphrase_result): Function removed.
83         * sign.c (gpgme_op_sign_start): Do not set out_of_core to zero.
84         (gpgme_op_sign): Just return the error value from the context.
85         (sign_status_handler): Only progress if no error is set yet.  If
86         we process an EOF, set the resulting error value (if any).
87         * decrypt.c (_gpgme_decrypt_result): Function removed.
88         (create_result_struct): Function removed.
89         (_gpgme_decrypt_status_handler): Use macro test_and_allocate_result,
90         caclulate error on EOF, do not progress with errors.
91         (_gpgme_decrypt_start): Do not set out_of_core to zero.
92         (gpgme_op_decrypt): Just return the error value from the context.
93         * encrypt.c (encrypt_status_handler): Perform the error checking
94         here.
95         (gpgme_op_encrypt_start): Do not clear out_of_core.
96         * export.c (export_status_handler): Return if error is set in context.
97         (gpgme_op_export_start): Release result.
98         (gpgme_op_export): Return error from context.
99         * decrypt-verify.c (gpgme_op_decrypt_verify): Return the error in
100         the context.
101         * genkey.c (genkey_status_handler): Use macro
102         test_and_allocate_result.  Perform error checking at EOF.
103         (gpgme_op_genkey): Just return the error from context.
104         * import.c (gpgme_op_import): Return the error from context.
105         (import_status_handler): Use macro test_and_allocate_result.
106         * keylist.c (gpgme_op_keylist_start): Do not clear out_of_core.
107         (gpgme_op_keylist_next): Return error of context.
108         (keylist_colon_handler): Set error instead out_of_code.
109         (finish_key): Likewise.
110
111         * context.h: Remove member out_of_core, add member error.
112         * gpgme.c (_gpgme_release_result): Clear error flag.
113
114         * engine.h (_gpgme_engine_get_error): New prototype.
115         * engine.c (_gpgme_engine_get_error): New function.
116         * engine-gpgsm.c (_gpgme_gpgsm_get_error): New function.
117
118         * engine-gpgsm.c (map_assuan_error): New function.
119         (gpgsm_assuan_simple_command): Change return type to GpgmeError,
120         use the new function to map error values.
121         (gpgsm_set_fd): Change return type tp GpgmeError.
122         (_gpgme_gpgsm_op_decrypt): Change type of ERR to GpgmeError.
123         (gpgsm_set_recipients): Likewise.  Change type of return value
124         equivalently.  Adjust error values.
125         (_gpgme_gpgsm_op_import): Likewise.
126         (_gpgme_gpgsm_op_sign): Likewise.
127         (struct gpgsm_object_s): New member error.
128         (gpgsm_status_handler): Set error if error occurs.  Determine
129         error number from ERR line received.  If assuan_read_line fails,
130         terminate the connection.
131
132 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
133
134         * Makefile.am (MOSTLYCLEANFILES): New variable.
135
136 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
137
138         * engine-gpgsm.c (gpgsm_status_handler): At error, terminate the
139         connection to the server.
140
141 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
142
143         * rungpg.h: Add STATUS_KEY_CREATED.
144
145         * progress.c: New file.
146         * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
147
148         * genkey.c (genkey_status_handler): Use
149         _gpgme_progress_status_handler.  Add check for status.
150         (struct genkey_result_s): New structure.
151         (_gpgme_release_genkey_result): New function.
152         (gpgme_op_genkey): Check for error.
153         * gpgme.c (_gpgme_release_result): Call
154         _gpgme_release_genkey_result.
155         * ops.h (_gpgme_release_genkey_result): Add prototype.
156         * types.h (GenKeyResult): New type.
157         * context.h (gpgme_context_s): Add GenKeyResult to member result.
158
159 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
160
161         * gpgme.c (_gpgme_release_result): Call
162         _gpgme_release_delete_result.
163         * ops.h (_gpgme_release_delete_result): Add prototype.
164         * types.h (DeleteResult): New type.
165         * context.h (gpgme_context_s): Add DeleteResult to member result.
166
167         * delete.c (enum delete_problem): New type.
168         (struct delete_result_s): New structure.
169         (_gpgme_release_delete_result): New function.
170         (delete_status_handler): Implement more status codes.
171         (gpgme_op_delete): Return error on failure.
172
173         * import.c (MAX_IMPORTED_FIELDS): Bump up to 14.
174
175 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
176
177         * import.c (struct import_result_s): New structure.
178         (_gpgme_release_import_result): New function.
179         (append_xml_impinfo): Likewise.
180         (import_status_handler): Implement.
181         * gpgme.c (_gpgme_release_result): Add call to
182         _gpgme_release_import_result.
183         * ops.h (_gpgme_release_import_result): Add prototype.
184         * types.h (ImportResult): New type.
185         * context.h (gpgme_context_s): Add ImportResult to member result.
186
187         * encrypt.c (gpgme_op_encrypt): Code clean up.
188
189 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
190
191         * gpgme.h: Add lots of comment and fix the formatting.  Add
192         gpgme_trustlist_end prototype.
193
194 2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
195
196         * gpgme.h: Add new type GpgmeIdleFunc.  Change type of
197         gpgme_register_idle to return and accept this type.
198         * wait.c (gpgme_register_idle): Fix type.
199         Save and return old value of idle_function.
200
201 2002-01-29  Werner Koch  <wk@gnupg.org>
202
203         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode.
204
205         * keylist.c (keylist_colon_handler): Add support for the new "crs"
206         record type.
207
208 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
209
210         * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect,
211         not assuan_pipe_disconnect.
212
213         * Makefile.am (libgpgme_la_LIBADD): Change to link assuan and
214         jnlib (needed by assuan) statically into libgpgme.  Linking a
215         static library into a shared library this way is not portable.
216
217 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
218
219         * gpgme.h (GpgmePassphraseCb): Change type of R_HD from void* to
220         void**.
221
222 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
223
224         * data.c (gpgme_data_new_from_filepart): Change type of LENGTH
225         from off_t to size_t.
226         * gpgme.h: Likewise.
227
228 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
229
230         * wait.c (_gpgme_wait_on_condition): If the process finished,
231         reset the pending flag.  Also if the operation was cancelled.
232
233         (struct proc_s): Rename READY to DONE.
234         (wait_item_s): Likewise.
235         (set_process_ready): Rename to ...
236         (set_process_done): ... this.
237         (_gpgme_remove_proc_from_wait_queue): Call set_process_done
238         instead set_process_ready.
239         (_gpgme_wait_on_condition): Likewise.
240         (do_select): Rename READY to DONE.
241
242         * verify.c (gpgme_op_verify): Do not set pending to zero here.
243         * sign.c (gpgme_op_sign): Likewise.
244         * import.c (gpgme_op_import): Likewise.
245         * genkey.c (gpgme_op_genkey): Likewise.
246         * export.c (gpgme_op_export): Likewise.
247         * encrypt.c (gpgme_op_encrypt): Likewise.
248         * delete.c (gpgme_op_delete): Likewise.
249         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
250         * decrypt.c (gpgme_op_decrypt): Likewise.
251
252 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
253
254         * export.c: Cleanup.
255
256 2002-01-15  Marcus Brinkmann  <marcus@g10code.de>
257
258         * trustlist.c: Various source clean ups.
259         (my_isdigit): Removed.
260         (gpgme_op_trustlist_end): New function.
261
262 2002-01-13  Marcus Brinkmann  <marcus@g10code.de>
263
264         * gpgme.c: Various source clean ups, like renaming C to CTX where
265         appropriate.
266         (gpgme_new): Clear R_CTX before starting the work.
267         (my_isdigit): Removed.
268         (my_isxdigit): Likewise.
269
270         * data.c: Various source clean ups.
271         (gpgme_data_new_from_mem): Check BUFFER after clearing R_DH.
272         (gpgme_data_new_with_read_cb): Similar for READ_CB.
273         (gpgme_data_new_from_file): Loop over fread while EINTR.
274         (gpgme_data_new_from_filepart): Rediddled a bit.  Allow LENGTH to
275         be zero.  Loop over fread while EINTR.
276
277         (my_isdigit): Removed.
278         (my_isxdigit): Likewise.
279
280 2001-12-21  Marcus Brinkmann  <marcus@g10code.de>
281
282         * engine-gpgsm.c (_gpgme_gpgsm_new): Replace General_Error with
283         Pipe_Error where appropriate.
284
285 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
286
287         * engine.c: Include `string.h'.  Reported by Stéphane Corthésy.
288
289         * version.c (get_engine_info): Remove prototype.
290
291 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
292
293         * engine-gpgsm.c (_gpgme_gpgsm_new): New variable CHILD_FDS.
294         Fill it with the servers fds, and pass it to assuan_pipe_connect.
295
296 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
297
298         * keylist.c (gpgme_op_keylist_end): New function.
299         * gpgme.h (gpgme_op_keylist_end): New prototype.
300
301         * engine.h (gpgme_engine_check_version): Move prototype to ...
302         * gpgme.h (gpgme_engine_check_version): ... here.
303
304         * genkey.c (gpgme_op_genkey_start): Remove unused variable.
305
306 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
307
308         * version.c (gpgme_get_engine_info): Reimplemented.
309         (gpgme_check_engine): Reimplemented.
310         (_gpgme_compare_versions): Return NULL if MY_VERSION is NULL.
311
312         * engine.c: Include `io.h'.
313         (gpgme_engine_get_info): New function.
314         * engine.h (gpgme_engine_check_version, _gpgme_engine_get_info):
315         Add prototype.
316
317 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
318
319         * rungpg.c (struct reap_s, reap_list, reap_list_lock): Moved to ...
320         * engine.c (struct reap_s, reap_list, reap_list_lock): ... here.
321         Include `time.h', `sys/types.h', `assert.h', and `sema.h'.
322
323         * rungpg.c (_gpgme_engine_add_child_to_reap_list): New function.
324         (do_reaping, _gpgme_gpg_housecleaning): Moved to ...
325         * engine.c (do_reaping, _gpgme_engine_housecleaning): ... here.
326         * rungpg.c (_gpgme_gpg_release): Replace code that is now in its
327         own function by call to _gpgme_engine_add_child_to_reap_list().
328
329         * wait.c: Include `engine.h'.
330         (run_idle): Call _gpgme_engine_housecleaning(), not
331         _gpgme_gpg_housecleaning().
332         
333 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
334
335         * key.c (_gpgme_key_append_name): Append, not prepend, the uid.
336         Initialize the next field of the uid structure.
337         (gpgme_key_get_as_xml): Do not list last uid first.
338
339 2001-12-17  Marcus Brinkmann  <marcus@g10code.de>
340
341         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New
342         function [!ENABLE_GPGSM].
343
344 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
345
346         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Put TEXT into
347         message_data, not SIG.
348         (_gpgme_gpgsm_op_sign): Use `--detached', not `--detach'.
349
350         * sign.c (sign_status_handler): Call
351         _gpgme_passphrase_status_handler early.
352
353 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
354
355         * engine-gpgsm.c: Revert last change.
356
357 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
358
359         * engine-gpgsm.c (gpgsm_status_handler): Freeze the output file
360         handler when ending this operation, otherwise the wait function
361         will sit on it.
362
363 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
364
365         * engine-gpgsm.c (struct gpgsm_object_s): New member colon.attic.
366         (_gpgme_gpgsm_new): Initialize some more members.
367         (_gpgme_gpgsm_release): Free the colon line handler's attic line.
368         (gpgsm_status_handler): Rework the inline-data processing.
369
370 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
371
372         * rungpg.c (_gpgme_gpg_spawn): Do not add the fds to the child
373         list that are not dup'ed, for those the close-on-exec flag is set
374         now.
375         * version.c (_gpgme_get_program_version): Remove first entry in
376         CFD, as the close-on-exec flag is now set for this fd.
377
378 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
379
380         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): Do not add `armor'
381         option to `ENCRYPT'.
382         * engine-gpgsm.c (gpgsm_set_recipients): Free LINE when returning
383         successfully.
384
385 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
386
387         * engine-gpgsm.c (close_notify_handler): New function.
388         (_gpgme_gpgsm_new): Manage the file descriptors a
389         bit differently.  Do not set close-on-exec flags.
390         (_gpgme_gpgsm_op_decrypt): Do not set message_fd
391         to -1, this is done by the close handler.
392         (_gpgme_gpgsm_op_encrypt): Likewise.
393         (_gpgme_gpgsm_op_import): Likewise (also for output_fd).
394         (_gpgme_gpgsm_op_keylist): Likewise (also for input_fd and output_fd).
395         (_gpgme_gpgsm_op_sign): Likewise.
396         (_gpgme_gpgsm_op_verify): Likewise, but for output_fd.
397
398         * posix-io.c (_gpgme_io_pipe): Set the close-on-exec flag for the
399         non-inherited file descriptor index of the pipe.
400
401 2001-12-13  Werner Koch  <wk@gnupg.org>
402
403         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New.
404         (gpgsm_status_handler): Pass datalines to a colon handler
405         * engine.c (_gpgme_engine_set_colon_line_handler): Set the colon
406         handler for gpgsm.
407
408         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Allow NULL for
409         pattern.
410         (gpgsm_assuan_simple_command): Removed underscore from
411         assuan_write_line.
412         (_gpgme_gpgsm_start): Ditto.
413         (gpgsm_assuan_simple_command): Replaced interal Assuan read
414         function by the new assuan_read_line.  Removed the use of the
415         internal header.
416         (gpgsm_status_handler): Ditto. Use the new assuan_pending_line.
417         (_gpgme_gpgsm_start): Use the documented way to get an fd from
418         assuan.
419
420         * keylist.c (keylist_colon_handler): Handle "crt" records
421         * key.h (gpgme_key_s): Add an x509 flag.
422         * key.c (parse_x509_user_id): New.
423         (_gpgme_key_append_name): Handle x.509 names.
424
425 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
426
427         * engine-gpgsm.c (gpgsm_status_handler): Make it work with current
428         version of assuan.
429
430 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
431
432         * engine-gpgsm.c (gpgsm_set_fd): Accept one more argument OPT.
433         (_gpgme_gpgsm_op_encrypt): Pass armor argument to gpgsm_set_fd for
434         output descriptor.
435         (_gpgme_gpgsm_op_sign): Likewise.
436
437 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
438
439         * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
440         occurs.
441
442 2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
443
444         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
445
446 2001-11-24  Marcus Brinkmann  <marcus@g10code.de>
447
448         * engine-gpgsm.c (gpgsm_status_handler): Don't break if bsearch fails.
449         Deal with assuan read line returning more than one line (for now).
450
451 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
452
453         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement it according to
454         the current protocol definition.
455
456 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
457
458         * engine-gpgsm.c (_gpgme_gpgsm_new): Set CLOEXEC flag for parent
459         ends of the pipe.
460
461 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
462
463         * engine-gpgsm.c: Include stdlib.h and string.h.  Also include,
464         for now, rungpg.h and status-table.h.
465         (gpgsm_status_handler): Implement more of the status handler.
466
467 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
468
469         * engine.c (_gpgme_engine_op_decrypt): Implement CMS case.
470         (_gpgme_engine_op_delete): Likewise.
471         (_gpgme_engine_op_encrypt): Likewise.
472         (_gpgme_engine_op_export): Likewise.
473         (_gpgme_engine_op_genkey): Likewise.
474         (_gpgme_engine_op_keylist): Likewise.
475         (_gpgme_engine_op_sign): Likewise.
476         (_gpgme_engine_op_trustlist): Likewise.
477
478         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): New function.
479         (gpgsm_assuan_simple_command): Likewise.
480         (gpgsm_set_recipients): Likewise.
481         (gpgsm_set_fd): Reimplement using gpgsm_assuan_simple_command.
482         (_gpgme_gpgsm_op_delete): New function.
483         (_gpgme_gpgsm_op_export): Likewise.
484         (_gpgme_gpgsm_op_genkey): Likewise.
485         (_gpgme_gpgsm_op_sign): Likewise.
486         (_gpgme_gpgsm_op_keylist): Likewise.
487         (_gpgme_gpgsm_op_trustlist): Likewise.
488         (_gpgme_gpgsm_release): Release command.
489         (_gpgme_gpgsm_op_decrypt): Allocate command.
490         (_gpgme_gpgsm_op_import): Likewise.
491         (gpgsm_status_handler): Also treat `ERR' strings as EOF.
492
493 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
494
495         * gpgme.h (gpgme_set_protocol): New prototype.
496
497 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
498
499         * engine-gpgsm.c (_gpgme_gpgsm_op_decrypt): New function.
500         (_gpgme_gpgsm_op_import): Likewise.
501
502 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
503
504         * engine-gpgsm.c: Shuffle around header inclusion a bit, to still
505         keep them seperate.
506         (_gpgme_set_status_handler) [!ENABLE_GPGSM]: New function.
507
508 2001-11-22  Werner Koch  <wk@gnupg.org>
509
510         * engine-gpgsm.c: Include more headers so that NULL and mk_error
511         is defined even with an undefined GPGSM_PATH.
512
513 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
514
515         * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
516         gpg_outbound_handler): Moved to ...
517         * data.c (_gpgme_data_inbound_handler, write_mem_data,
518         write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
519         _gpgme_* ones non-static.
520         * data.c: Include io.h.
521
522         * ops.h (_gpgme_data_inbound_handler): New prototype.
523         (_gpgme_data_outbound_handler): Likewise.
524         (_gpgme_gpg_spawn): Use these new functions.
525
526         * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
527         _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
528         _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
529         _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
530         _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
531         _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
532         Include <rungpg.h> for status handler function.
533
534         * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
535         input_data, output_fd, output_data, message_fd, message_data, command
536         and status.
537         (_gpgme_gpgsm_new): Open input, output and message pipes before
538         connecting to the client.  Close server's ends afterwards.
539         (_gpgme_gpgsm_release): Close open file descriptors.  Remove
540         server process from wait queue.
541         (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
542         _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
543         
544         * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
545         (_gpgme_engine_set_status_handler): Likewise.
546         (_gpgme_engine_op_verify): Likewise.
547
548 2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
549
550         * context.h: Do not include rungpg.h, but engine.h.
551         (struct gpgme_context_s): Replace member gpg with engine.
552         * gpgme.c (gpgme_release): Release engine, not gpg.
553
554         * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
555         moved ...
556         * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
557         Make static, change order of arguments, and return an error value.
558         * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
559
560         * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
561         (_gpgme_gpg_op_encrypt): Likewise.
562         (_gpgme_gpg_op_decrypt): Likewise.
563         (_gpgme_gpg_op_delete): Likewise.
564         (_gpgme_gpg_op_export): Likewise.
565         (_gpgme_gpg_op_genkey): Likewise.
566         (_gpgme_gpg_op_import): Likewise.
567         (_gpgme_gpg_op_keylist): Likewise.
568         (_gpgme_gpg_op_sign): Likewise.
569         (_gpgme_gpg_op_trustlist): Likewise.
570         * rungpg.c (_gpgme_gpg_op_verify): New function.
571         (_gpgme_gpg_op_encrypt): Likewise.
572         (_gpgme_gpg_op_decrypt): Likewise.
573         (_gpgme_gpg_op_delete): Likewise.
574         (_gpgme_gpg_op_export): Likewise.
575         (_gpgme_gpg_op_genkey): Likewise.
576         (_gpgme_gpg_op_import): Likewise.
577         (_gpgme_gpg_op_keylist): Likewise.
578         (_gpgme_gpg_op_sign): Likewise.
579         (_gpgme_gpg_op_trustlist): Likewise.
580
581         * engine.h (_gpgme_engine_set_status_handler): Add prototype.
582         (_gpgme_engine_set_command_handler): Likewise.
583         (_gpgme_engine_set_colon_line_handler): Likewise.
584         (_gpgme_engine_op_decrypt): Likewise.
585         (_gpgme_engine_op_delete): Likewise.
586         (_gpgme_engine_op_encrypt): Likewise.
587         (_gpgme_engine_op_export): Likewise.
588         (_gpgme_engine_op_genkey): Likewise.
589         (_gpgme_engine_op_import): Likewise.
590         (_gpgme_engine_op_keylist): Likewise.
591         (_gpgme_engine_op_sign): Likewise.
592         (_gpgme_engine_op_trustlist): Likewise.
593         (_gpgme_engine_op_verify): Likewise.
594         (_gpgme_engine_start): Likewise.
595         * engine.c (_gpgme_engine_set_status_handler): New function.
596         (_gpgme_engine_set_command_handler): Likewise.
597         (_gpgme_engine_set_colon_line_handler): Likewise.
598         (_gpgme_engine_op_decrypt): Likewise.
599         (_gpgme_engine_op_delete): Likewise.
600         (_gpgme_engine_op_encrypt): Likewise.
601         (_gpgme_engine_op_export): Likewise.
602         (_gpgme_engine_op_genkey): Likewise.
603         (_gpgme_engine_op_import): Likewise.
604         (_gpgme_engine_op_keylist): Likewise.
605         (_gpgme_engine_op_sign): Likewise.
606         (_gpgme_engine_op_trustlist): Likewise.
607         (_gpgme_engine_op_verify): Likewise.
608         (_gpgme_engine_start): Likewise.
609
610         * verify.c (gpgme_op_verify_start): Reimplement in terms of above
611         functions.
612         * encrypt.c (gpgme_op_encrypt_start): Likewise.
613         * decrypt.c (_gpgme_decrypt_start): Likewise.
614         * passphrase.c (_gpgme_passphrase_start): Likewise.
615         * keylist.c (gpgme_op_keylist_start): Likewise.
616
617 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
618
619         * types.h: Add types EngineObject and GpgsmObject.
620
621         * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
622         engine-gpgsm.c, engine.h and engine.c.
623         * engine.h: New file.
624         * engine.c: Likewise.
625         * engine-gpgsm.h: Likewise.
626         * engine-gpgsm.c: Likewise.
627         
628         * rungpg.c (_gpgme_gpg_get_version): New function.
629         (_gpgme_gpg_check_version): Likewise.
630         * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
631         _gpgme_gpg_check_version.
632
633         * version.c (compare_versions): Rename to ...
634         (_gpgme_compare_versions): ... this.  Make non-static.
635         (gpgme_check_version): Use _gpgme_compare_versions rather than
636         compare_versions.
637         (gpgme_check_engine): Likewise.
638         * ops.h (_gpgme_get_program_version): Add prototype.
639
640 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
641
642         * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
643         (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
644         (libgpgme_la_LIBADD): Likewise.
645
646 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
647
648         * version.c: Remove global variables lineno and
649         tmp_engine_version.
650         (version_handler): Removed.
651         (_gpgme_get_program_version): New function.
652         (get_engine_info): Don't use context and version_handler,
653         but _gpgme_get_program_version.
654         * ops.h (_gpgme_get_program_version): Add prototype for
655         _gpgme_get_program_version (we expect to use it elsewhere soon).
656
657 2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
658
659         * version.c (get_engine_info): If GnuPG is not available, return
660         an error message.
661         * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
662         undefined.
663         (_gpgme_get_gpgsm_path): New function.
664         * w32-util.c (find_program_in_registry): New static function.
665         (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
666         to use find_program_in_registry.
667         (_gpgme_get_gpgsm_path): New function.
668         (util.h): Prototype _gpgme_get_gpgsm_path).
669         * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
670         returns non-null.
671
672 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
673
674         * decrypt-verify.c: New file.
675         * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
676         * types.h: Add decrypt-verify types.
677         * ops.h: Likewise.
678         * context.h: Add result type for decrypt-verify.
679         * gpgme.h: Add decrypt-verify prototypes.
680
681         * decrypt.c (decrypt_status_handler): Renamed to ...
682         (_gpgme_decrypt_status_handler): ... this.  Make non-static.
683         (_gpgme_decrypt_start): New function, derived from
684         gpgme_op_decrypt_start.
685         (gpgme_op_decrypt_start): Reimplement in terms of
686         _gpgme_decrypt_start.
687         (_gpgme_decrypt_result): New function to retrieve error value.
688         (gpgme_op_decrypt): Use _gpgme_decrypt_result.
689         * ops.h: Add prototypes for new functions.
690
691         * verify.c (verify_status_handler): Renamed to ...
692         (_gpgme_verify_status_handler): ... this.  Make non-static.
693         (gpgme_op_verify_start): Use new function name.
694         (intersect_stati): Renamed to ...
695         (_gpgme_intersect_stati): ... this.  Make non-static.
696         (gpgme_op_verify): Use new name.
697         * ops.h: Add prototypes for new functions.
698
699 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
700
701         * passphrase.c: New file.
702         * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
703         * ops.h (_gpgme_passphrase_result): Add prototypes from
704         passphrase.c.
705         * types.h: Likewise.
706         * context.h: Add member passphrase to result.
707         * gpgme.c (_gpgme_release_result): Release passphrase member.
708
709         * decrypt.c: Some formatting and variable name changes (like
710         CTX instead C).
711         (struct decrypt_result_s): Remove members now found in
712         passphrase result.
713         (_gpgme_release_decrypt_result): Don't release removed members.
714         (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
715         and don't handle the cases catched there.
716         (command_handler): Removed.
717         (gpgme_op_decrypt_start): Don't set command handler, but invoke
718         _gpgme_passphrase_start which does it.
719         (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
720         cases covered by it.
721
722         * sign.c Some formatting and variable name changes (like
723         CTX instead C).
724         (struct sign_result_s): Remove members now found in
725         passphrase result.
726         (_gpgme_release_sign_result): Don't release removed members.
727         (sign_status_handler): Call _gpgme_passphrase_status_handler,
728         and don't handle the cases catched there.
729         (command_handler): Removed.
730         (gpgme_op_sign_start): Don't set command handler, but invoke
731         _gpgme_passphrase_start which does it.
732         (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
733         cases covered by it.
734
735 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
736
737         * decrypt.c (command_handler): Fix last change.
738
739 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
740
741         * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
742         Rename R2 to NEXT_RESULT.
743         (intersect_stati): Rename RES to RESULT.
744         (gpgme_get_sig_status): Likewise.  Do not check return_type, but
745         the member verify of result.
746         (gpgme_get_sig_key): Likewise.
747
748         * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
749         RESULT is zero, return.
750         (sign_status_handler, command_handler): Do not check return_type,
751         but the member sign of result.
752         (gpgme_op_sign): Likewise.  Drop assertion.
753
754         * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
755         If RESULT is zero, return.
756         (encrypt_status_handler): Do not check return_type, but the member
757         encrypt of result.
758         (gpgme_op_encrypt): Likewise.  Drop assertion.
759
760         * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
761         (create_result_struct): Do not set result_type.
762         (command_handler, decrypt_status_handler): Do not check
763         return_type, but the member decrypt of result.
764         (gpgme_op_decrypt): Likewise.  Drop assertion.
765
766         * context.h (enum ResultType): Removed.
767         (struct gpgme_context_s): Remove member result_type.
768         (struct result): Replaces union result.
769         * gpgme.c: Include string.h.
770         (_gpgme_release_result): Release all members of c->result, which
771         is now a struct.  Zero out all members of the struct afterwards.
772
773 2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
774
775         * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
776         Release all members of the list GPG->arglist.
777         Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
778
779 2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
780
781         * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
782
783         * key.c: Include string.h.
784         * data.c: Likewise.
785         * recipient.c: Likewise.
786
787 2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
788
789         * context.h: New member signers_len.
790         * signers.c (gpgme_signers_clear): Require that signers are
791         non-NULL with assertion.  Use signers_len to determine how much
792         keys to release.  Add documentation.
793         (gpgme_signers_add): Use signers_len to determine if the buffer is
794         large enough.  Use xtryrealloc rather than xtrymalloc and copying.
795         Add documentation.
796         (gpgme_signers_enum): Use signers_len to determine if key is
797         available.  Add documentation.
798
799 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
800
801         * data.c (_gpgme_data_append): Check if LENGTH is smaller than
802         ALLOC_CHUNK, not DH->length.
803
804 2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
805
806         * gpgme.c (gpgme_set_protocol): Fix last change.
807
808 2001-10-15  Werner Koch  <wk@gnupg.org>
809
810         * gpgme.h (GpgmeProtocol): New.
811         * gpgme.c (gpgme_set_protocol): New.
812
813 2001-09-26  Werner Koch  <wk@gnupg.org>
814
815         * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
816         (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
817
818 2001-09-17  Werner Koch  <wk@gnupg.org>
819
820         * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
821         callers to use this function without a check for tmp_key.
822         
823         * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
824         emptying the queue.  Bug reported by Stéphane Corthésy.
825
826 2001-09-12  Werner Koch  <wk@gnupg.org>
827
828         * data.c (gpgme_data_rewind): Allow rewind for callbacks.
829
830 2001-09-07  Werner Koch  <wk@gnupg.org>
831
832         * rungpg.h: Add NO_RECP.
833         * encrypt.c (encrypt_status_handler): Take on No_RECP.
834         (gpgme_op_encrypt): Better error return.
835
836         * verify.c (verify_status_handler): Take on NODATA.
837
838 2001-09-03  Werner Koch  <wk@gnupg.org>
839
840         * rungpg.h: Added STATUS_INV_RECP.
841         * gpgme.c (_gpgme_release_result): Add support for new
842         EncryptResult object.
843         * encrypt.c (append_xml_encinfo): New.
844         (encrypt_status_handler): Add some status parsing.
845         (_gpgme_release_encrypt_result): New.
846
847 2001-08-29  Werner Koch  <wk@gnupg.org>
848
849         * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
850
851         * keylist.c (keylist_colon_handler): Do a finish key if we receive
852         an EOF here.  This is probably the reason for a lot of bugs
853         related to keylisting.  It is so obvious.  Kudos to Enno Cramer
854         for pointing that out. 
855
856 2001-08-28  Werner Koch  <wk@gnupg.org>
857
858         * gpgme.c, gpgme.h (gpgme_get_op_info): New.
859         (_gpgme_set_op_info): New. 
860         (_gpgme_release_result): Reset the op_info here.
861         * sign.c (append_xml_siginfo): New.
862         (sign_status_handler): Store the sig create information.
863
864 2001-07-31  Werner Koch  <wk@gnupg.org>
865
866         * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
867
868 2001-07-30  Werner Koch  <wk@gnupg.org>
869
870         * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
871
872         * rungpg.c (build_argv): Disable armor comments
873         * w32-io.c (build_commandline): Need to add quotes here
874
875 2001-07-24  Werner Koch  <wk@gnupg.org>
876
877         * data.c (gpgme_data_read): Add a a way to return the available bytes.
878
879 2001-07-23  Werner Koch  <wk@gnupg.org>
880
881         * util.c: Removed stpcpy() because we use the version from jnlib.
882
883 2001-07-19  Werner Koch  <wk@gnupg.org>
884
885         * mkstatus: Define the collating sequence for sort.
886
887 2001-06-26  Werner Koch  <wk@gnupg.org>
888
889         * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
890
891 2001-06-15  Werner Koch  <wk@gnupg.org>
892
893         * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
894         to Timo for pointing this out.
895
896 2001-06-01  Werner Koch  <wk@gnupg.org>
897
898         * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
899         Johannes Poehlmann.
900
901 2001-05-28  Werner Koch  <wk@gnupg.org>
902
903         * version.c (gpgme_check_engine): Stop version number parsing at
904         the opening angle and not the closing one.  By Tommy Reynolds.
905
906 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
907
908         * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
909         line, because it gave an error if another operation had been made 
910         before using the same context.
911         
912         * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
913         one line to release the gpg object in the context (if any).
914         
915 2001-04-26  Werner Koch  <wk@gnupg.org>
916
917         * key.c, key.h (_gpgme_key_cache_init): New.
918         (_gpgme_key_cache_add): New.
919         (_gpgme_key_cache_get): New.
920         * version.c (do_subsystem_inits): Init the cache.
921         * keylist.c (finish_key): Put key into the cache
922         * verify.c (gpgme_get_sig_key): First look into the cache.
923
924 2001-04-19  Werner Koch  <wk@gnupg.org>
925
926         * keylist.c (parse_timestamp): Adjusted for the changed
927         --fixed-list-mode of gpg 1.0.4h.
928
929 2001-04-05  Werner Koch  <wk@gnupg.org>
930
931         * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
932
933 2001-04-04  Werner Koch  <wk@gnupg.org>
934
935         * w32-io.c (_gpgme_io_select): Don't select on the writer if there
936         are still bytes pending.  Timo found this not easy to track down
937         race condition. 
938
939 2001-04-02  Werner Koch  <wk@gnupg.org>
940
941         * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
942         * key.c (gpgme_key_get_ulong_attr): And return those attribs.
943
944         * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
945         the mode set in the current context.  Suggested by Timo.
946
947         * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
948         can_encrypt. By Timo.
949
950 2001-03-30  Werner Koch  <wk@gnupg.org>
951
952         * debug.c (debug_init): Allow to specify a debug file.
953         (_gpgme_debug_level): New.
954
955         * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
956         (_gpgme_io_select): Debug only with level > 2.
957
958 2001-03-15  Werner Koch  <wk@gnupg.org>
959
960         * rungpg.c: Included time.h.
961
962         * key.h: New keyflags for capabilities.
963         * keylist.c (set_mainkey_capability, set_subkey_capability): New.
964         (keylist_colon_handler): Parse them.
965         * gpgme.h: New attribute values for capabilties.
966         * key.c (gpgme_key_get_string_attr): Return them.
967         (capabilities_to_string): New.
968         (gpgme_key_get_ulong_attr): Return the global caps.
969
970 2001-03-14  Werner Koch  <wk@gnupg.org>
971
972         * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
973         Thanks to Jan Oliver Wagner.
974
975 2001-03-13  Werner Koch  <wk@gnupg.org>
976
977         * context.h: Add invalid and revoke flags to user_id structure.
978         * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
979         (keylist_colon_handler): Adjust for that.
980         (set_userid_flags): New. 
981         (set_mainkey_trust_info): Handle new key invalid flag
982         (set_subkey_trust_info): Ditto.
983         * gpgme.h: Add new attributes for key and user ID flags.
984         * key.c (_gpgme_key_append_name): Init these flags
985         (gpgme_key_get_as_xml): Print them.
986         (one_uid_as_xml): New helper for above.
987         (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
988         Return the new attributes.  Enhanced, so that subkey information
989         can be returned now.
990
991 2001-02-28  Werner Koch  <wk@gnupg.org>
992
993         * w32-io.c (destroy_reader): Set stop_me flag.
994         (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
995         (_gpgme_io_write): Use a writer thread to avaoid blocking.
996         (_gpgme_io_close): Cleanup a writer thread
997         (_gpgme_io_select): Repalce tthe faked wait on writing by a real
998         waiting which is now possible due to the use of a writer thread.
999
1000 2001-02-20  Werner Koch  <wk@gnupg.org>
1001
1002         * w32-io.c (destroy_reader,kill_reader): New. 
1003         (create_reader, reader): Add a new event to stop the thread.
1004         (_gpgme_io_close): Kill the reader thread.
1005
1006         * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
1007         * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
1008
1009         * wait.c: Reworked the whole thing.
1010         * rungpg.c (_gpgme_gpg_new): Init pid to -1.
1011         (_gpgme_gpg_release): Remove the process from the wait queue.
1012
1013 2001-02-19  Werner Koch  <wk@gnupg.org>
1014
1015         * w32-io.c (_gpgme_io_set_close_notify): New.
1016         (_gpgme_io_close): Do the notification.
1017
1018         * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
1019         microseconds.
1020
1021         * wait.c (remove_process): Don't close the fd here.
1022         (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
1023         (_gpgme_wait_on_condition): Remove the assert on the queue and
1024         break out if we could not find the queue.  The whole thing should
1025         be reworked.
1026
1027         * posix-io.c (_gpgme_io_set_close_notify): New.
1028         (_gpgme_io_close): Do the notification.
1029
1030         * rungpg.c (close_notify_handler): New. 
1031         (_gpgme_gpg_new): Register a callback for the fd.
1032         (_gpgme_gpg_set_colon_line_handler): Ditto.
1033         (build_argv): Ditto
1034
1035 2001-02-13  Werner Koch  <wk@gnupg.org>
1036
1037         * rungpg.c (struct reap_s): Replaced pid_t by int.
1038
1039         * types.h: Add ulong typedef.
1040
1041         * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
1042         (_gpgme_gpg_release): Reap children.
1043         * io.h, posix-io.c (_gpgme_io_kill): New.
1044         * w32-io.c (_gpgme_io_kill): New (dummy).
1045
1046         * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
1047
1048         * posix-io.c (_gpgme_io_read): Add some debug output. 
1049         (_gpgme_io_write): Ditto.
1050         (_gpgme_io_select): Increased the timeout.
1051
1052 2001-02-12  Werner Koch  <wk@gnupg.org>
1053
1054         Enhanced the signature verification, so that it can how handle
1055         more than one signature and is able to return more information on 
1056         the signatures.
1057         * verify.c (gpgme_get_sig_key): New.
1058         (gpgme_get_sig_status): New.
1059
1060         * gpgme.h: Add stdio.h. 
1061         (GpgmeSigStat): New status DIFF.
1062
1063 2001-02-01  Werner Koch  <wk@gnupg.org>
1064
1065         * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
1066         code to all Set/ResetEvent().
1067
1068         * rungpg.c (read_status): Check for end of stream only if we have
1069         an r.  By Timo.
1070
1071 2001-01-31  Werner Koch  <wk@gnupg.org>
1072
1073         * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
1074         (propagate_term_results,clear_active_fds): Removed.
1075         (count_active_fds): Renamed to .. 
1076         (count_active_and_thawed_fds): .. this and count only thawed fds. 
1077
1078         * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
1079         status.eof ;-)
1080
1081 2001-01-30  Werner Koch  <wk@gnupg.org>
1082
1083         * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.
1084
1085         * version.c (get_engine_info): Return better error information.
1086
1087         * posix-util.c, w32-util.c: New.
1088         (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
1089         * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.
1090
1091         * signers.c (gpgme_signers_add): Ooops, one should test code and
1092         not just write it; the newarr was not assigned.  Thanks to José
1093         for pointing this out.  Hmmm, still not tested, why shoudl a coder
1094         test his fix :-)
1095
1096         * w32-io.c: Does now use reader threads, so that we can use
1097         WaitForMultipleObjects. 
1098         * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
1099         Does currently only work for W32.
1100
1101         * debug.c, util.h : New. Changed all fprintfs to use this new
1102         set of debugging functions.
1103
1104 2001-01-23  Werner Koch  <wk@gnupg.org>
1105
1106         * data.c (_gpgme_data_release_and_return_string): Fixed string
1107         termination.
1108
1109 2001-01-22  Werner Koch  <wk@gnupg.org>
1110
1111         * delete.c: New.
1112
1113         * signers.c: New.
1114         * key.c (gpgme_key_ref, gpgme_key_unref): New.
1115         * sign.c (gpgme_op_sign_start): Allow the use of other keys.
1116
1117         * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
1118         * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.
1119
1120 2001-01-05  Werner Koch  <wk@gnupg.org>
1121
1122         * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
1123
1124
1125  Copyright 2001, 2002 g10 Code GmbH
1126
1127  This file is free software; as a special exception the author gives
1128  unlimited permission to copy and/or distribute it, with or without
1129  modifications, as long as this notice is preserved.
1130
1131  This file is distributed in the hope that it will be useful, but
1132  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1133  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1134