2001-11-22 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / ChangeLog
1 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
2
3         * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
4         gpg_outbound_handler): Moved to ...
5         * data.c (_gpgme_data_inbound_handler, write_mem_data,
6         write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
7         _gpgme_* ones non-static.
8         * data.c: Include io.h.
9
10         * ops.h (_gpgme_data_inbound_handler): New prototype.
11         (_gpgme_data_outbound_handler): Likewise.
12         (_gpgme_gpg_spawn): Use these new functions.
13
14         * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
15         _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
16         _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
17         _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
18         _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
19         _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
20         Include <rungpg.h> for status handler function.
21
22         * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
23         input_data, output_fd, output_data, message_fd, message_data, command
24         and status.
25         (_gpgme_gpgsm_new): Open input, output and message pipes before
26         connecting to the client.  Close server's ends afterwards.
27         (_gpgme_gpgsm_release): Close open file descriptors.  Remove
28         server process from wait queue.
29         (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
30         _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
31         
32         * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
33         (_gpgme_engine_set_status_handler): Likewise.
34         (_gpgme_engine_op_verify): Likewise.
35
36 2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
37
38         * context.h: Do not include rungpg.h, but engine.h.
39         (struct gpgme_context_s): Replace member gpg with engine.
40         * gpgme.c (gpgme_release): Release engine, not gpg.
41
42         * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
43         moved ...
44         * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
45         Make static, change order of arguments, and return an error value.
46         * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
47
48         * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
49         (_gpgme_gpg_op_encrypt): Likewise.
50         (_gpgme_gpg_op_decrypt): Likewise.
51         (_gpgme_gpg_op_delete): Likewise.
52         (_gpgme_gpg_op_export): Likewise.
53         (_gpgme_gpg_op_genkey): Likewise.
54         (_gpgme_gpg_op_import): Likewise.
55         (_gpgme_gpg_op_keylist): Likewise.
56         (_gpgme_gpg_op_sign): Likewise.
57         (_gpgme_gpg_op_trustlist): Likewise.
58         * rungpg.c (_gpgme_gpg_op_verify): New function.
59         (_gpgme_gpg_op_encrypt): Likewise.
60         (_gpgme_gpg_op_decrypt): Likewise.
61         (_gpgme_gpg_op_delete): Likewise.
62         (_gpgme_gpg_op_export): Likewise.
63         (_gpgme_gpg_op_genkey): Likewise.
64         (_gpgme_gpg_op_import): Likewise.
65         (_gpgme_gpg_op_keylist): Likewise.
66         (_gpgme_gpg_op_sign): Likewise.
67         (_gpgme_gpg_op_trustlist): Likewise.
68
69         * engine.h (_gpgme_engine_set_status_handler): Add prototype.
70         (_gpgme_engine_set_command_handler): Likewise.
71         (_gpgme_engine_set_colon_line_handler): Likewise.
72         (_gpgme_engine_op_decrypt): Likewise.
73         (_gpgme_engine_op_delete): Likewise.
74         (_gpgme_engine_op_encrypt): Likewise.
75         (_gpgme_engine_op_export): Likewise.
76         (_gpgme_engine_op_genkey): Likewise.
77         (_gpgme_engine_op_import): Likewise.
78         (_gpgme_engine_op_keylist): Likewise.
79         (_gpgme_engine_op_sign): Likewise.
80         (_gpgme_engine_op_trustlist): Likewise.
81         (_gpgme_engine_op_verify): Likewise.
82         (_gpgme_engine_start): Likewise.
83         * engine.c (_gpgme_engine_set_status_handler): New function.
84         (_gpgme_engine_set_command_handler): Likewise.
85         (_gpgme_engine_set_colon_line_handler): Likewise.
86         (_gpgme_engine_op_decrypt): Likewise.
87         (_gpgme_engine_op_delete): Likewise.
88         (_gpgme_engine_op_encrypt): Likewise.
89         (_gpgme_engine_op_export): Likewise.
90         (_gpgme_engine_op_genkey): Likewise.
91         (_gpgme_engine_op_import): Likewise.
92         (_gpgme_engine_op_keylist): Likewise.
93         (_gpgme_engine_op_sign): Likewise.
94         (_gpgme_engine_op_trustlist): Likewise.
95         (_gpgme_engine_op_verify): Likewise.
96         (_gpgme_engine_start): Likewise.
97
98         * verify.c (gpgme_op_verify_start): Reimplement in terms of above
99         functions.
100         * encrypt.c (gpgme_op_encrypt_start): Likewise.
101         * decrypt.c (_gpgme_decrypt_start): Likewise.
102         * passphrase.c (_gpgme_passphrase_start): Likewise.
103         * keylist.c (gpgme_op_keylist_start): Likewise.
104
105 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
106
107         * types.h: Add types EngineObject and GpgsmObject.
108
109         * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
110         engine-gpgsm.c, engine.h and engine.c.
111         * engine.h: New file.
112         * engine.c: Likewise.
113         * engine-gpgsm.h: Likewise.
114         * engine-gpgsm.c: Likewise.
115         
116         * rungpg.c (_gpgme_gpg_get_version): New function.
117         (_gpgme_gpg_check_version): Likewise.
118         * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
119         _gpgme_gpg_check_version.
120
121         * version.c (compare_versions): Rename to ...
122         (_gpgme_compare_versions): ... this.  Make non-static.
123         (gpgme_check_version): Use _gpgme_compare_versions rather than
124         compare_versions.
125         (gpgme_check_engine): Likewise.
126         * ops.h (_gpgme_get_program_version): Add prototype.
127
128 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
129
130         * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
131         (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
132         (libgpgme_la_LIBADD): Likewise.
133
134 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
135
136         * version.c: Remove global variables lineno and
137         tmp_engine_version.
138         (version_handler): Removed.
139         (_gpgme_get_program_version): New function.
140         (get_engine_info): Don't use context and version_handler,
141         but _gpgme_get_program_version.
142         * ops.h (_gpgme_get_program_version): Add prototype for
143         _gpgme_get_program_version (we expect to use it elsewhere soon).
144
145 2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
146
147         * version.c (get_engine_info): If GnuPG is not available, return
148         an error message.
149         * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
150         undefined.
151         (_gpgme_get_gpgsm_path): New function.
152         * w32-util.c (find_program_in_registry): New static function.
153         (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
154         to use find_program_in_registry.
155         (_gpgme_get_gpgsm_path): New function.
156         (util.h): Prototype _gpgme_get_gpgsm_path).
157         * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
158         returns non-null.
159
160 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
161
162         * decrypt-verify.c: New file.
163         * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
164         * types.h: Add decrypt-verify types.
165         * ops.h: Likewise.
166         * context.h: Add result type for decrypt-verify.
167         * gpgme.h: Add decrypt-verify prototypes.
168
169         * decrypt.c (decrypt_status_handler): Renamed to ...
170         (_gpgme_decrypt_status_handler): ... this.  Make non-static.
171         (_gpgme_decrypt_start): New function, derived from
172         gpgme_op_decrypt_start.
173         (gpgme_op_decrypt_start): Reimplement in terms of
174         _gpgme_decrypt_start.
175         (_gpgme_decrypt_result): New function to retrieve error value.
176         (gpgme_op_decrypt): Use _gpgme_decrypt_result.
177         * ops.h: Add prototypes for new functions.
178
179         * verify.c (verify_status_handler): Renamed to ...
180         (_gpgme_verify_status_handler): ... this.  Make non-static.
181         (gpgme_op_verify_start): Use new function name.
182         (intersect_stati): Renamed to ...
183         (_gpgme_intersect_stati): ... this.  Make non-static.
184         (gpgme_op_verify): Use new name.
185         * ops.h: Add prototypes for new functions.
186
187 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
188
189         * passphrase.c: New file.
190         * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
191         * ops.h (_gpgme_passphrase_result): Add prototypes from
192         passphrase.c.
193         * types.h: Likewise.
194         * context.h: Add member passphrase to result.
195         * gpgme.c (_gpgme_release_result): Release passphrase member.
196
197         * decrypt.c: Some formatting and variable name changes (like
198         CTX instead C).
199         (struct decrypt_result_s): Remove members now found in
200         passphrase result.
201         (_gpgme_release_decrypt_result): Don't release removed members.
202         (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
203         and don't handle the cases catched there.
204         (command_handler): Removed.
205         (gpgme_op_decrypt_start): Don't set command handler, but invoke
206         _gpgme_passphrase_start which does it.
207         (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
208         cases covered by it.
209
210         * sign.c Some formatting and variable name changes (like
211         CTX instead C).
212         (struct sign_result_s): Remove members now found in
213         passphrase result.
214         (_gpgme_release_sign_result): Don't release removed members.
215         (sign_status_handler): Call _gpgme_passphrase_status_handler,
216         and don't handle the cases catched there.
217         (command_handler): Removed.
218         (gpgme_op_sign_start): Don't set command handler, but invoke
219         _gpgme_passphrase_start which does it.
220         (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
221         cases covered by it.
222
223 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
224
225         * decrypt.c (command_handler): Fix last change.
226
227 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
228
229         * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
230         Rename R2 to NEXT_RESULT.
231         (intersect_stati): Rename RES to RESULT.
232         (gpgme_get_sig_status): Likewise.  Do not check return_type, but
233         the member verify of result.
234         (gpgme_get_sig_key): Likewise.
235
236         * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
237         RESULT is zero, return.
238         (sign_status_handler, command_handler): Do not check return_type,
239         but the member sign of result.
240         (gpgme_op_sign): Likewise.  Drop assertion.
241
242         * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
243         If RESULT is zero, return.
244         (encrypt_status_handler): Do not check return_type, but the member
245         encrypt of result.
246         (gpgme_op_encrypt): Likewise.  Drop assertion.
247
248         * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
249         (create_result_struct): Do not set result_type.
250         (command_handler, decrypt_status_handler): Do not check
251         return_type, but the member decrypt of result.
252         (gpgme_op_decrypt): Likewise.  Drop assertion.
253
254         * context.h (enum ResultType): Removed.
255         (struct gpgme_context_s): Remove member result_type.
256         (struct result): Replaces union result.
257         * gpgme.c: Include string.h.
258         (_gpgme_release_result): Release all members of c->result, which
259         is now a struct.  Zero out all members of the struct afterwards.
260
261 2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
262
263         * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
264         Release all members of the list GPG->arglist.
265         Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
266
267 2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
268
269         * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
270
271         * key.c: Include string.h.
272         * data.c: Likewise.
273         * recipient.c: Likewise.
274
275 2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
276
277         * context.h: New member signers_len.
278         * signers.c (gpgme_signers_clear): Require that signers are
279         non-NULL with assertion.  Use signers_len to determine how much
280         keys to release.  Add documentation.
281         (gpgme_signers_add): Use signers_len to determine if the buffer is
282         large enough.  Use xtryrealloc rather than xtrymalloc and copying.
283         Add documentation.
284         (gpgme_signers_enum): Use signers_len to determine if key is
285         available.  Add documentation.
286
287 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
288
289         * data.c (_gpgme_data_append): Check if LENGTH is smaller than
290         ALLOC_CHUNK, not DH->length.
291
292 2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
293
294         * gpgme.c (gpgme_set_protocol): Fix last change.
295
296 2001-10-15  Werner Koch  <wk@gnupg.org>
297
298         * gpgme.h (GpgmeProtocol): New.
299         * gpgme.c (gpgme_set_protocol): New.
300
301 2001-09-26  Werner Koch  <wk@gnupg.org>
302
303         * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
304         (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
305
306 2001-09-17  Werner Koch  <wk@gnupg.org>
307
308         * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
309         callers to use this function without a check for tmp_key.
310         
311         * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
312         emptying the queue.  Bug reported by Stéphane Corthésy.
313
314 2001-09-12  Werner Koch  <wk@gnupg.org>
315
316         * data.c (gpgme_data_rewind): Allow rewind for callbacks.
317
318 2001-09-07  Werner Koch  <wk@gnupg.org>
319
320         * rungpg.h: Add NO_RECP.
321         * encrypt.c (encrypt_status_handler): Take on No_RECP.
322         (gpgme_op_encrypt): Better error return.
323
324         * verify.c (verify_status_handler): Take on NODATA.
325
326 2001-09-03  Werner Koch  <wk@gnupg.org>
327
328         * rungpg.h: Added STATUS_INV_RECP.
329         * gpgme.c (_gpgme_release_result): Add support for new
330         EncryptResult object.
331         * encrypt.c (append_xml_encinfo): New.
332         (encrypt_status_handler): Add some status parsing.
333         (_gpgme_release_encrypt_result): New.
334
335 2001-08-29  Werner Koch  <wk@gnupg.org>
336
337         * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
338
339         * keylist.c (keylist_colon_handler): Do a finish key if we receive
340         an EOF here.  This is probably the reason for a lot of bugs
341         related to keylisting.  It is so obvious.  Kudos to Enno Cramer
342         for pointing that out. 
343
344 2001-08-28  Werner Koch  <wk@gnupg.org>
345
346         * gpgme.c, gpgme.h (gpgme_get_op_info): New.
347         (_gpgme_set_op_info): New. 
348         (_gpgme_release_result): Reset the op_info here.
349         * sign.c (append_xml_siginfo): New.
350         (sign_status_handler): Store the sig create information.
351
352 2001-07-31  Werner Koch  <wk@gnupg.org>
353
354         * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
355
356 2001-07-30  Werner Koch  <wk@gnupg.org>
357
358         * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
359
360         * rungpg.c (build_argv): Disable armor comments
361         * w32-io.c (build_commandline): Need to add quotes here
362
363 2001-07-24  Werner Koch  <wk@gnupg.org>
364
365         * data.c (gpgme_data_read): Add a a way to return the available bytes.
366
367 2001-07-23  Werner Koch  <wk@gnupg.org>
368
369         * util.c: Removed stpcpy() because we use the version from jnlib.
370
371 2001-07-19  Werner Koch  <wk@gnupg.org>
372
373         * mkstatus: Define the collating sequence for sort.
374
375 2001-06-26  Werner Koch  <wk@gnupg.org>
376
377         * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
378
379 2001-06-15  Werner Koch  <wk@gnupg.org>
380
381         * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
382         to Timo for pointing this out.
383
384 2001-06-01  Werner Koch  <wk@gnupg.org>
385
386         * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
387         Johannes Poehlmann.
388
389 2001-05-28  Werner Koch  <wk@gnupg.org>
390
391         * version.c (gpgme_check_engine): Stop version number parsing at
392         the opening angle and not the closing one.  By Tommy Reynolds.
393
394 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
395
396         * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
397         line, because it gave an error if another operation had been made 
398         before using the same context.
399         
400         * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
401         one line to release the gpg object in the context (if any).
402         
403 2001-04-26  Werner Koch  <wk@gnupg.org>
404
405         * key.c, key.h (_gpgme_key_cache_init): New.
406         (_gpgme_key_cache_add): New.
407         (_gpgme_key_cache_get): New.
408         * version.c (do_subsystem_inits): Init the cache.
409         * keylist.c (finish_key): Put key into the cache
410         * verify.c (gpgme_get_sig_key): First look into the cache.
411
412 2001-04-19  Werner Koch  <wk@gnupg.org>
413
414         * keylist.c (parse_timestamp): Adjusted for the changed
415         --fixed-list-mode of gpg 1.0.4h.
416
417 2001-04-05  Werner Koch  <wk@gnupg.org>
418
419         * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
420
421 2001-04-04  Werner Koch  <wk@gnupg.org>
422
423         * w32-io.c (_gpgme_io_select): Don't select on the writer if there
424         are still bytes pending.  Timo found this not easy to track down
425         race condition. 
426
427 2001-04-02  Werner Koch  <wk@gnupg.org>
428
429         * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
430         * key.c (gpgme_key_get_ulong_attr): And return those attribs.
431
432         * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
433         the mode set in the current context.  Suggested by Timo.
434
435         * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
436         can_encrypt. By Timo.
437
438 2001-03-30  Werner Koch  <wk@gnupg.org>
439
440         * debug.c (debug_init): Allow to specify a debug file.
441         (_gpgme_debug_level): New.
442
443         * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
444         (_gpgme_io_select): Debug only with level > 2.
445
446 2001-03-15  Werner Koch  <wk@gnupg.org>
447
448         * rungpg.c: Included time.h.
449
450         * key.h: New keyflags for capabilities.
451         * keylist.c (set_mainkey_capability, set_subkey_capability): New.
452         (keylist_colon_handler): Parse them.
453         * gpgme.h: New attribute values for capabilties.
454         * key.c (gpgme_key_get_string_attr): Return them.
455         (capabilities_to_string): New.
456         (gpgme_key_get_ulong_attr): Return the global caps.
457
458 2001-03-14  Werner Koch  <wk@gnupg.org>
459
460         * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
461         Thanks to Jan Oliver Wagner.
462
463 2001-03-13  Werner Koch  <wk@gnupg.org>
464
465         * context.h: Add invalid and revoke flags to user_id structure.
466         * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
467         (keylist_colon_handler): Adjust for that.
468         (set_userid_flags): New. 
469         (set_mainkey_trust_info): Handle new key invalid flag
470         (set_subkey_trust_info): Ditto.
471         * gpgme.h: Add new attributes for key and user ID flags.
472         * key.c (_gpgme_key_append_name): Init these flags
473         (gpgme_key_get_as_xml): Print them.
474         (one_uid_as_xml): New helper for above.
475         (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
476         Return the new attributes.  Enhanced, so that subkey information
477         can be returned now.
478
479 2001-02-28  Werner Koch  <wk@gnupg.org>
480
481         * w32-io.c (destroy_reader): Set stop_me flag.
482         (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
483         (_gpgme_io_write): Use a writer thread to avaoid blocking.
484         (_gpgme_io_close): Cleanup a writer thread
485         (_gpgme_io_select): Repalce tthe faked wait on writing by a real
486         waiting which is now possible due to the use of a writer thread.
487
488 2001-02-20  Werner Koch  <wk@gnupg.org>
489
490         * w32-io.c (destroy_reader,kill_reader): New. 
491         (create_reader, reader): Add a new event to stop the thread.
492         (_gpgme_io_close): Kill the reader thread.
493
494         * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
495         * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
496
497         * wait.c: Reworked the whole thing.
498         * rungpg.c (_gpgme_gpg_new): Init pid to -1.
499         (_gpgme_gpg_release): Remove the process from the wait queue.
500
501 2001-02-19  Werner Koch  <wk@gnupg.org>
502
503         * w32-io.c (_gpgme_io_set_close_notify): New.
504         (_gpgme_io_close): Do the notification.
505
506         * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
507         microseconds.
508
509         * wait.c (remove_process): Don't close the fd here.
510         (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
511         (_gpgme_wait_on_condition): Remove the assert on the queue and
512         break out if we could not find the queue.  The whole thing should
513         be reworked.
514
515         * posix-io.c (_gpgme_io_set_close_notify): New.
516         (_gpgme_io_close): Do the notification.
517
518         * rungpg.c (close_notify_handler): New. 
519         (_gpgme_gpg_new): Register a callback for the fd.
520         (_gpgme_gpg_set_colon_line_handler): Ditto.
521         (build_argv): Ditto
522
523 2001-02-13  Werner Koch  <wk@gnupg.org>
524
525         * rungpg.c (struct reap_s): Replaced pid_t by int.
526
527         * types.h: Add ulong typedef.
528
529         * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
530         (_gpgme_gpg_release): Reap children.
531         * io.h, posix-io.c (_gpgme_io_kill): New.
532         * w32-io.c (_gpgme_io_kill): New (dummy).
533
534         * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
535
536         * posix-io.c (_gpgme_io_read): Add some debug output. 
537         (_gpgme_io_write): Ditto.
538         (_gpgme_io_select): Increased the timeout.
539
540 2001-02-12  Werner Koch  <wk@gnupg.org>
541
542         Enhanced the signature verification, so that it can how handle
543         more than one signature and is able to return more information on 
544         the signatures.
545         * verify.c (gpgme_get_sig_key): New.
546         (gpgme_get_sig_status): New.
547
548         * gpgme.h: Add stdio.h. 
549         (GpgmeSigStat): New status DIFF.
550
551 2001-02-01  Werner Koch  <wk@gnupg.org>
552
553         * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
554         code to all Set/ResetEvent().
555
556         * rungpg.c (read_status): Check for end of stream only if we have
557         an r.  By Timo.
558
559 2001-01-31  Werner Koch  <wk@gnupg.org>
560
561         * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
562         (propagate_term_results,clear_active_fds): Removed.
563         (count_active_fds): Renamed to .. 
564         (count_active_and_thawed_fds): .. this and count only thawed fds. 
565
566         * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
567         status.eof ;-)
568
569 2001-01-30  Werner Koch  <wk@gnupg.org>
570
571         * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.
572
573         * version.c (get_engine_info): Return better error information.
574
575         * posix-util.c, w32-util.c: New.
576         (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
577         * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.
578
579         * signers.c (gpgme_signers_add): Ooops, one should test code and
580         not just write it; the newarr was not assigned.  Thanks to José
581         for pointing this out.  Hmmm, still not tested, why shoudl a coder
582         test his fix :-)
583
584         * w32-io.c: Does now use reader threads, so that we can use
585         WaitForMultipleObjects. 
586         * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
587         Does currently only work for W32.
588
589         * debug.c, util.h : New. Changed all fprintfs to use this new
590         set of debugging functions.
591
592 2001-01-23  Werner Koch  <wk@gnupg.org>
593
594         * data.c (_gpgme_data_release_and_return_string): Fixed string
595         termination.
596
597 2001-01-22  Werner Koch  <wk@gnupg.org>
598
599         * delete.c: New.
600
601         * signers.c: New.
602         * key.c (gpgme_key_ref, gpgme_key_unref): New.
603         * sign.c (gpgme_op_sign_start): Allow the use of other keys.
604
605         * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
606         * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.
607
608 2001-01-05  Werner Koch  <wk@gnupg.org>
609
610         * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
611
612
613  Copyright 2001 g10 Code GmbH
614
615  This file is free software; as a special exception the author gives
616  unlimited permission to copy and/or distribute it, with or without
617  modifications, as long as this notice is preserved.
618
619  This file is distributed in the hope that it will be useful, but
620  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
621  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
622