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