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