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