gpgme/
[gpgme.git] / gpgme / ChangeLog
1 2002-10-08  Marcus Brinkmann  <marcus@g10code.de>
2
3         New data object component:
4
5         * gpgme.h (GpgmeDataReadCb, GpgmeDataWriteCb, GpgmeDataSeekCb,
6         GpgmeDataReleaseCb): New types.
7         (struct GpgmeDataCbs): New structure.
8         (gpgme_data_read): Changed prototype to match that of read() closely.
9         (gpgme_data_write): Similar for write().
10         (gpgme_data_seek, gpgme_data_new_from_cbs, gpgme_data_new_from_fd,
11         gpgme_data_new_from_stream): New prototypes.
12         (gpgme_data_get_type, gpgme_check_engine): Prototype removed.
13
14         * Makefile.am (libgpgme_la_SOURCES): Add data.h, data-fd.c,
15         data-stream.c, data-mem.c, data-user.c and data-compat.c.
16         * data.c: Reimplemented from scratch.
17         * (data-compat.c, data-fd.c, data.h, data-mem.c, data-stream.c,
18         data-user.c): New file.
19         * context.h (struct gpgme_data_s): Removed.
20         * conversion.c: Include <errno.h> and <sys/types.h>.
21         (_gpgme_data_append): New function.
22         * data.c (_gpgme_data_append_string): Move to ...
23         * conversion.c (_gpgme_data_append_string): ... here.
24         * data.c (_gpgme_data_append_for_xml): Move to ...
25         * conversion.c (_gpgme_data_append_for_xml): ... here.
26         * data.c (_gpgme_data_append_string_for_xml): Move to ...
27         * conversion.c (_gpgme_data_append_string_for_xml): ... here.
28         * data.c (_gpgme_data_append_percentstring_for_xml): Move to ...
29         * conversion.c (_gpgme_data_append_percentstring_for_xml): ... here.
30
31         * ops.h (_gpgme_data_get_mode, _gpgme_data_set_mode): Prototype
32         removed.
33         * types.h (GpgmeDataMode): Type removed.
34
35         * decrypt.c (_gpgme_decrypt_start): Don't check data type or mode.
36         * edit.c (_gpgme_op_edit_start): Likewise.
37         * encrypt.c (_gpgme_op_encrypt_start): Likewise.
38         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
39         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
40         * export.c (_gpgme_op_export_start): Likewise.
41         * genkey.c (_gpgme_op_genkey_start): Likewise.
42         * import.c (_gpgme_op_import_start): Likewise.
43         * sign.c (_gpgme_op_sign_start): Likewise.
44         * verify.c (_gpgme_op_verify_start): Likewise.
45         
46         * encrypt.c (gpgme_op_encrypt): Remove hack that returns invalid
47         no recipient if no data was returned.
48         * encrypt-sign.c (gpgme_op_encrypt_sign): Remove hack that returns
49         no recipient if no data was returned.
50         * encrypt-sign.c (gpgme_op_encrypt_sign): Remove hack that returns
51         no recipient if no data was returned.
52
53         * engine.c (_gpgme_engine_op_verify): Add new argument to
54         differentiate detached from normal signatures.
55         * engine.h (_gpgme_engine_op_verify): Likewise for prototype.
56         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.  Don't check
57         mode of data argument.
58         * engine-gpgsm.h (_gpgme_gpgsm_op_verify): Likewise for prototype.
59         * gpgme.h (gpgme_op_verify_start): Likewise for prototype.
60         (gpgme_op_verify): Likewise for prototype.
61         * rungpg.c (_gpgme_gpg_op_verify): Likewise.
62         * rungpg.h (_gpgme_gpg_op_verify): Likewise for prototype.
63         * verify.c (_gpgme_op_verify_start): Likewise.
64         (gpgme_op_verify_start): Likewise.
65         (gpgme_op_verify): Likewise.
66
67         * rungpg.c (struct arg_and_data_s): New member INBOUND to hold
68         direction of data object.
69         (_gpgme_gpg_add_data): Add new argument INBOUND.  Use it to
70         determine direction of data object.
71         (_gpgme_gpg_add_pm_data, _gpgme_gpg_set_command_handler,
72         _gpgme_gpg_op_decrypt, _gpgme_gpg_op_edit, _gpgme_gpg_op_encrypt,
73         _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
74         _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_sign,
75         _gpgme_gpg_op_verify): Add new argument to _gpgme_gpg_add_data
76         invocation.
77         (build_argv): Use new member INBOUND to determine direction of
78         file descriptor.  Don't check the data type.
79         * rungpg.h (_gpgme_gpg_add_data): Add new argument to prototype.
80         
81         * gpgme.c (gpgme_get_op_info): Don't call
82         _gpgme_data_get_as_string if CTX->op_info is NULL.
83
84         * version.c (gpgme_check_engine): Function removed.
85
86 2002-09-30  Werner Koch  <wk@gnupg.org>
87
88         * keylist.c (keylist_colon_handler): Take care when printing a
89         NULL with the DEBUG.
90
91         * engine-gpgsm.c (struct gpgsm_object_s): New member ANY.
92         (gpgsm_status_handler): Run the colon function to indicate EOF.
93         (_gpgme_gpgsm_set_colon_line_handler): Better reset ANY here.
94
95 2002-09-28  Marcus Brinkmann  <marcus@g10code.de>
96
97         * conversion.c (_gpgme_hextobyte): Prevent superfluous
98         multiplication with base.  Reported by Stéphane Corthésy.
99
100         * keylist.c (gpgme_op_keylist_ext_start): Use private asynchronous
101         operation type in invocation of _gpgme_op_reset.
102
103 2002-09-20  Werner Koch  <wk@gnupg.org>
104
105         * ath.c: Include sys/time.h if sys/select.h is not available.
106
107 2002-09-13  Marcus Brinkmann  <marcus@g10code.de>
108
109         * keylist.c (keylist_status_handler): Do not call finish_key() here.
110         (gpgme_op_keylist_ext_start): Set CTX->tmp_key to NULL.
111
112 2002-09-03  Marcus Brinkmann  <marcus@g10code.de>
113
114         * Makefile.am (assuan_libobjs): Remove @LTLIBOBJS@ as we link them
115         into gpgme unconditionally.
116         (libgpgme_la_LIBADD): Change @LIBOBJS@ into @LTLIBOBJS@.
117
118 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
119
120         * Makefile.am (assuan_libobjs): Use @LTLIBOBJS@ instead @LIBOBJS@.
121
122 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
123
124         * debug.c (_gpgme_debug_add): Test *LINE, not LINE.
125         (_gpgme_debug_end): Likewise.
126         Reported by Dr. Stefan Dalibor <Dr.Stefan.Dalibor@bfa.de>.
127
128 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
129
130         * posix-io.c (_gpgme_io_select): Don't use a non-constant struct
131         initializer.
132         * version.c (_gpgme_get_program_version): Likewise.
133         Reported by Dr. Stefan Dalibor <Dr.Stefan.Dalibor@bfa.de>.
134
135 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
136
137         * conversion.c (_gpgme_decode_c_string): Set DESTP before
138         modifying DEST.
139
140         * conversion.c (_gpgme_decode_c_string): Fix off by one error in
141         last change.
142         * rungpg.c (_gpgme_append_gpg_args_from_signers): Move before
143         _gpgme_op_edit so its prototype is known early on.
144
145         * conversion.c: New file.
146         * util.h: Add prototypes for _gpgme_decode_c_string and
147         _gpgme_hextobyte.
148         * keylist.c (keylist_colon_handler): Call _gpgme_decode_c_string
149         on issuer name.
150         * Makefile.am (libgpgme_la_SOURCES): Add conversion.c
151         * key.c (_gpgme_key_append_name): Replace calls to hextobyte by
152         calls to _gpgme_hextobyte.
153         (hash_key): Likewise.
154
155 2002-09-01  Marcus Brinkmann  <marcus@g10code.de>
156
157         * op-support.c (_gpgme_op_reset): Set CTX->pending after calling
158         _gpgme_engine_release, as this will reset pending to zero in the
159         event done callback on cancelled operations.
160
161 2002-08-30  Marcus Brinkmann  <marcus@g10code.de>
162
163         * rungpg.c (_gpgme_gpg_op_edit): Add args from signers.
164         Suggested by Miguel Coca <e970095@zipi.fi.upm.es>.
165
166         * rungpg.c (_gpgme_gpg_op_edit): Add bogus ctx argument.
167         * rungpg.h: Also to prototype.
168         * engine.c (_gpgme_engine_op_edit): Likewise.
169         * engine.h: Likewise.
170         * edit.c (_gpgme_op_edit_start): Likewise.
171
172 2002-08-29  Werner Koch  <wk@gnupg.org>
173
174         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement signer
175         selection.
176         * vasprintf.c (va_copy): Define macro if not yet defined.
177
178 2002-08-29  Marcus Brinkmann  <marcus@g10code.de>
179
180         * passphrase.c (_gpgme_passphrase_status_handler): Reset
181         CTX->result.passphrase->no_passphrase if passphrase is given (good
182         or bad).  Submitted by Jean DIRAISON <jean.diraison@free.fr>.
183
184 2002-08-28  Marcus Brinkmann  <marcus@g10code.de>
185
186         * posix-io.c (_gpgme_io_spawn): Use a double-fork approach.
187         Return 0 on success, -1 on error.
188         * version.c (_gpgme_get_program_version): Don't wait for the child.
189         * engine.c (_gpgme_engine_housecleaning): Function removed.
190         (do_reaping): Likewise.
191         (_gpgme_engine_add_child_to_reap_list): Likewise.
192         (struct reap_s): Removed.
193         (reap_list): Likewise.
194         (reap_list_lock): Likewise.
195         * engine.h (_gpgme_engine_io_event): Remove prototypes for
196         _gpgme_engine_housecleaning and
197         _gpgme_engine_add_child_to_reap_list.
198         * rungpg.c (_gpgme_gpg_release): Don't add child to reap list.
199         (struct gpg_object_s): Remove PID member.
200         (_gpgme_gpg_new): Don't initialize GPG->pid.
201         (_gpgme_gpg_spawn): Don't set GPG->pid.
202         * wait.c (run_idle): Removed.
203         (gpgme_wait): Run idle_function directly.
204
205 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
206
207         * encrypt-sign.c (encrypt_sign_status_handler): Remove dead
208         variables encrypt_info and encrypt_info_len.
209         * trustlist.c (gpgme_op_trustlist_start): Set colon line handler.
210         * posix-sema.c (sema_fatal): Remove function.
211         All these reported by Stéphane Corthésy.
212
213 2002-08-23  Werner Koch  <wk@gnupg.org>
214
215         * gpgme-config.in: Made --prefix work for --libs. 
216
217 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
218
219         * ath.h: Update list of symbols that get a prefix: Rename the
220         ath_mutex_*_available symbols to ath_*_available.
221
222 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
223
224         * stpcpy.c: New file from gnulib.
225         * Makefile.am (assuan_libobjs): Remove jnlib.
226
227 2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
228
229         * gpgme.h: Add prototype for gpgme_op_import_ext.
230         * import.c (struct import_result_s): New member `nr_considered'.
231         Rename `any_imported' to `nr_imported'.
232         (import_status_handler): Increment nr_imported.  Set nr_considered
233         if appropriate.
234         (gpgme_op_import_ext): New function.
235         (gpgme_op_import): Implement in terms of gpgme_op_import_ext.
236
237 2002-08-20  Werner Koch  <wk@gnupg.org>
238
239         * gpgme.m4: Replaced with a new and faster version.  This does not
240         anymore try to build test programs.  If we really need test
241         programs, we should add an option to gpgme-config to do so. 
242
243         * vasprintf.c (int_vasprintf): Hack to handle NULL passed for %s.
244
245 2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
246
247         * gpgme.c (_gpgme_set_op_info): Append data on subsequent calls.
248         * encrypt-sign.c (encrypt_sign_status_handler): Remove op_info
249         handling.
250
251 2002-08-19  Werner Koch  <wk@gnupg.org>
252
253         * decrypt.c (is_token,skip_token): Duplicated from verify.c
254         (gpgme_op_decrypt): Hack to properly return Decryption_Failed..
255         (_gpgme_decrypt_status_handler): Create an operation info.
256
257 2002-08-14  Werner Koch  <wk@gnupg.org>
258
259         * key.h (struct certsig_s): New.  Use it in gpgme_key_s.
260         * key.c (gpgme_key_release): Release it. We need to add more code
261         of course.
262         (_gpgme_key_append_name): Use memset to intialize the struct.
263         * gpgme.h (GPGME_KEYLIST_MODE_SIGS): New.
264         * rungpg.c (_gpgme_gpg_op_keylist): Include sigs in listing depending
265         non the list mode.
266         
267         * key.c (gpgme_key_get_string_attr): Use GPGME_ATTR_TYPE to return
268         information about the key type (PGP or X.509).
269         (gpgme_key_get_ulong_attr): Likewise.
270
271         * keylist.c (keylist_colon_handler): Include 1 in the check for
272         valid algorithms so that RSA is usable.  Store the issuer name and
273         serial number also for "crs" records.  Parse the expire date for
274         subkeys.
275         (set_userid_flags): Put them onto the last appended key.
276
277 2002-07-29  Marcus Brinkmann  <marcus@g10code.de>
278
279         * rungpg.c (_gpgme_gpg_op_edit): Use --with-colons.
280
281 2002-07-28  Marcus Brinkmann  <marcus@g10code.de>
282
283         * data.c (gpgme_data_read): For GPGME_DATA_TYPE_NONE, return EOF
284         instead an error.
285
286         The following changes make it possible to flush an inbound data
287         pipe before invoking a command handler:
288
289         * posix-io.c (_gpgme_io_select): Accept new argument NONBLOCK to
290         _gpgme_io_select.  Set timeout of 0 if this is set.
291         * w32-io.c (_gpgme_io_select): Likewise.
292         * io.h: Add new argument NONBLOCK to _gpgme_io_select prototype.
293         * wait.c (do_select): Add new argument to _gpgme_io_select
294         invocation.
295         * rungpg.h (_gpgme_gpg_set_command_handler): Add new argument
296         linked_data to prototype.
297         * engine.h (_gpgme_engine_set_command_handler): Likewise.
298         * engine.c (_gpgme_engine_set_command_handler): Likewise.
299         * passphrase.c (_gpgme_passphrase_start): Pass NULL as linked_data
300         argument to _gpgme_engine_set_command_handler.
301         * rungpg.c (struct gpg_object_s): New members linked_data and
302         linked_idx in CMD.
303         (_gpgme_gpg_new): Initialize those new members.
304         (_gpgme_gpg_set_command_handler): Accept new argument linked_data.
305         (build_argv): Handle linked_data in the same hack as cb_data.
306         (read_status): If linked_data is in use, flush the pipe before
307         activating the command handler.
308         * gpgme.h: Add prototypes for gpgme_op_edit_start and
309         gpgme_op_edit.
310
311         The next changes export the status codes to the user:
312
313         * decrypt.c (_gpgme_decrypt_status_handler): Likewise, also prefix
314         all STATUS_ with GPGME_.
315         * delete.c (delete_status_handler): Likewise.
316         * decrypt-verify.c (decrypt_verify_status_handler): Likewise.
317         * encrypt.c (_gpgme_encrypt_status_handler): Likewise.
318         (_gpgme_encrypt_sym_status_handler): Likewise.
319         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
320         * engine-gpgsm.c (parse_status): Likewise.
321         (gpgsm_status_handler): Likewise.
322         (gpgsm_set_recipients): Likewise.
323         * export.c (export_status_handler): Likewise.
324         * genkey.c (genkey_status_handler): Likewise.
325         * import.c (append_xml_impinfo): Likewise.
326         (import_status_handler): Likewise.
327         * keylist.c (keylist_status_handler): Likewise.
328         * passphrase.c (_gpgme_passphrase_status_handler): Likewise.
329         (command_handler): Likewise.
330         * progress.c (_gpgme_progress_status_handler): Likewise.
331         * sign.c (_gpgme_sign_status_handler): Likewise.
332         * trustlist.c (trustlist_status_handler): Likewise.
333         * verify.c (_gpgme_verify_status_handler): Likewise.
334         * gpgme.h (GpgmeEditCb): New type.
335         * rungpg.h (GpgStatusCode): Rename and move to ...
336         * gpgme.h (GpgmeStatusCode): ... this and here.
337         * Makefile.am (status-table.h): Run mkstatus on gpgme.h, not rungpg.h.
338         * mkstatus: Prefix STATUS with GPGME_.
339         * rungpg.h (GpgStatusHandler, GpgCommandHandler): Change type
340         accordingly.
341         * ops.h (_gpgme_verify_status_handler,
342         _gpgme_decrypt_status_handler, _gpgme_sign_status_handler,
343         _gpgme_encrypt_status_handler, _gpgme_passphrase_status_handler,
344         _gpgme_progress_status_handler): Likewise.
345         * rungpg.c (struct gpg_object_s): Likewise for CMD.code.
346
347         These changes add an edit operation to GPGME:
348         
349         * context.h (struct gpgme_context_s): New member RESULT.edit.  *
350         ops.h: Add prototype for _gpgme_release_edit_result and
351         _gpgme_passphrase_command_handler.
352         * passphrase.c (command_handler): Make non-static and rename to ...
353         (_gpgme_passphrase_command_handler): ... this.
354         (_gpgme_passphrase_start): Use new name for command handler.
355         * types.h: Add EditResult type.
356         * gpgme.c (_gpgme_release_result): Release EDIT result.
357         * edit.c: New file.
358         * Makefile.am (libgpgme_la_SOURCES): Add edit.c.
359         (libgpgme_la_LDADD): Rename to libgpgme_la_LIBADD, and include
360         assuan_libobjs.
361         (assuan_libobjs): New variable, set this instead
362         libgpgme_la_LIBADD.
363         * engine.h (_gpgme_engine_op_edit): New prototype.
364         * engine.c (_gpgme_engine_op_edit): New function.
365         * rungpg.h (_gpgme_gpg_op_edit): New prototype.
366         * rungpg.c (_gpgme_gpg_op_edit): New function.
367
368 2002-07-27  Marcus Brinkmann  <marcus@g10code.de>
369
370         * delete.c (delete_problem): New case ambigious specification.
371         (delete_status_handler): Handle new case (poorly).
372
373 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
374
375         * engine-gpgsm.c (_gpgme_gpgsm_op_delete): Implement this.
376
377 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
378
379         * Makefile.am (libgpgme_la_LDADD): Add @LIBOBJS@ for vasprintf and
380         fopencookie.
381         * vasprintf.c: Update to more recent libiberty version.
382         * debug.h: Replace #elsif with #elif.
383
384         Submitted by Stéphane Corthésy:
385         * util.h (vasprintf): Correct prototype.
386         * encrypt-sign.c: Include <stddef.h>.
387         (encrypt_sign_status_handler): Change type of ENCRYPT_INFO_LEN to
388         size_t.
389         * ath-pthread.c: Include <stdlib.h>, not <malloc.h>.
390         * ath-pth.c: Likewise.
391
392 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
393
394         * wait.c (fdt_global): Make static.  Reported by Stéphane
395         Corthésy.
396
397         * rungpg.c (_gpgme_gpg_op_keylist_ext): Skip empty string
398         patterns.  Reported by Stéphane Corthésy.
399
400         * key.c (gpgme_key_get_as_xml): Add OTRUST attribute.  Requested
401         by Stéphane Corthésy.
402         (gpgme_key_get_string_attr): Add GPGME_ATTR_SIG_SUMMARY case to
403         silence gcc warning.
404
405         * rungpg.c (_gpgme_gpg_new): Always set utf8 as charset.
406
407 2002-07-03  Marcus Brinkmann  <marcus@g10code.de>
408
409         * gpgme.c (gpgme_set_io_cbs): Deal with CTX being NULL.
410
411         * gpgme.c (_gpgme_op_event_cb_user): New function.
412         * op-support.c (_gpgme_op_reset): Support a new mode of operation
413         for private or user event loop.  Use new user event callback
414         wrapper.
415         * trustlist.c (gpgme_op_trustlist_start): Use this new mode.
416         * keylist.c (gpgme_op_keylist_start): Likewise.
417
418         * rungpg.c (_gpgme_gpg_io_event): New function.
419         * rungpg.h (_gpgme_gpg_io_event): New prototype.
420         * engine-gpgsm.c (_gpgme_gpg_io_event): New function.
421         * engine-gpgsm.h (_gpgme_gpgsm_io_event): New prototype.
422         * engine.c (_gpgme_engine_io_event): New function.
423         * engine.h (_gpgme_engine_io_event): New prototype.
424         * keylist.c (finish_key): Call _gpgme_engine_io_event, and move
425         the real work for the default IO callback routines to ...
426         (_gpgme_op_keylist_event_cb): ... here.  New function.
427         * trustlist.c (trustlist_colon_handler): Signal
428         GPGME_EVENT_NEXT_TRUSTITEM.  Move queue manipulation to ...
429         (_gpgme_op_trustlist_event_cb): ... here.  New function.
430         * gpgme.c (_gpgme_op_event_cb): Call _gpgme_op_keylist_event_cb
431         and _gpgme_op_trustlist_event_cb when appropriate.
432         * ops.h (_gpgme_op_keylist_event_cb): New prototype.
433         (_gpgme_op_trustlist_event_cb): Likewise.
434         * op-support.c (_gpgme_op_reset): Add comment why we don't use the
435         user provided event handler directly.
436         * gpgme.h (GpgmeRegisterIOCb): Return GpgmeError value, and TAG in
437         a pointer argument.
438         * wait.c (_gpgme_add_io_cb): Likewise.
439         * wait.h (_gpgme_add_io_cb): Likewise for prototype.
440         * rungpg.c (_gpgme_gpg_add_io_cb): Call IO_CBS->add with new
441         argument.  Fix up error handling.
442         * engine-gpgsm.c (_gpgme_gpgsm_add_io_cb): Call IO_CBS->add with
443         new argument, fix up error handling.
444
445 2002-07-03  Werner Koch  <wk@gnupg.org>
446
447         * encrypt.c (status_handler_finish): New.
448         (_gpgme_encrypt_status_handler): Moved some code out to the new
449         function and call this function also in case we get into the
450         status handler with an error which might happen due to a kludge in
451         engine-gpgsm.c
452
453 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
454
455         * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
456         table (eg use synchronous mode).
457
458 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
459
460         * ops.h (_gpgme_wait_on_condition): Remove HANG argument from
461         prototype and change return type to GpgmeError.
462         (_gpgme_wait_one): New prototype.
463         * wait.c (gpgme_wait): Replace with the meat from
464         _gpgme_wait_on_condition here, and remove the support for
465         conditions.
466         (_gpgme_wait_on_condition): Remove HANG argument from prototype
467         and change return type to GpgmeError.  Replace with meat from
468         _gpgme_wait_one and add support for conditions.
469         (_gpgme_wait_one): Just call _gpgme_wait_on_condition without
470         condition.
471         * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
472         table (eg use synchronous mode).
473         (gpgme_op_keylist_next): Remove HANG argument from
474         _gpgme_wait_on_condition.  Check its return value.
475         * trustlist.c (gpgme_op_trustlist_start): Always use our own FD
476         table (eg use synchronous mode).
477         (gpgme_op_trustlist_next): Remove HANG argument from
478         _gpgme_wait_on_condition.  Check its return value.
479         
480 2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
481
482         * gpgme.h: Fix documentation of key attribute retrieval functions.
483
484 2002-06-26  Werner Koch  <wk@gnupg.org>
485
486         * engine-gpgsm.c (map_assuan_error): Map No_Data_Available to EOF.
487
488         * import.c (append_xml_impinfo): Kludge to print fingerprint
489         instead of keyid for use with gpgsm.
490         (import_status_handler): Set a flag to know whether any import
491         occured.
492         (gpgme_op_import): Reurn -1 if no certificate ewas imported.
493
494 2002-06-25  Werner Koch  <wk@gnupg.org>
495
496         * engine-gpgsm.c (_gpgme_gpgsm_set_io_cbs) [ENABLE_GPGSM]: Fixed
497         function arguments.
498
499 2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
500
501         * engine-gpgsm.c (_gpgme_gpgsm_op_export): Only export the keys
502         listed in RECP.
503         * export.c (gpgme_op_export): If no data was returned, return
504         GPGME_No_Recipients.
505
506 2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
507
508         * engine-gpgsm.c (_gpgme_gpgsm_op_export): Implement.
509
510 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
511
512         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return ERR.
513         (parse_status): New function.
514         (gpgsm_status_handler): Use parse_status.
515         (gpgsm_assuan_simple_command): Accept new arguments STATUS_FNC and
516         STATUS_FNC_VALUE and process status messages.
517         (gpgsm_set_recipients): Pass new arugments to gpgsm_assuan_simple_command.
518         (gpgsm_set_fd): Likewise.
519         (_gpgme_gpgsm_op_keylist): Likewise.
520         (_gpgme_gpgsm_op_keylist_ext): Likewise.
521         (_gpgme_gpgsm_op_sign): Likewise.
522
523 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
524
525         * wait.c (_gpgme_remove_io_cb): Unlock FDT->lock.
526
527 2002-06-20  Werner Koch  <wk@gnupg.org>
528
529         * rungpg.c (build_argv): Ignore GPG_AGENT_INFO if set but empty.
530
531         * verify.c (calc_sig_summary): Set bad policy for wrong key usage.
532         (skip_token): New.
533         (_gpgme_verify_status_handler): Watch out for wrong key usage.
534         (gpgme_get_sig_string_attr): Hack to return info on the key
535         usage.  Does now make use of the former RESERVED argument which
536         has been renamed to WHATIDX.
537         (gpgme_get_sig_ulong_attr): Renamed RESERVED to WHATIDX.
538
539 2002-06-14  Marcus Brinkmann  <marcus@g10code.de>
540
541         * wait.c (do_select): Return -1 on error, and 0 if nothing to run.
542         (_gpgme_wait_one): Only set HANG to zero if do_select returned an
543         error, or there are no more file descriptors to wait on.
544         (_gpgme_wait_on_condition): Ignore return value from do_select for
545         now.
546
547 2002-06-13  Werner Koch  <wk@gnupg.org>
548
549         * verify.c (gpgme_op_verify): Make sure that we never access an
550         unitialized result structure.
551
552 2002-06-12  Werner Koch  <wk@gnupg.org>
553
554         * keylist.c (struct keylist_result_s): New.
555         (_gpgme_release_keylist_result): Release it here 
556         (keylist_status_handler): Handle truncated.
557         (append_xml_keylistinfo): New.
558         * gpgme.c (_gpgme_release_result): and use it here.
559         * types.h: Declare the new type here.
560         * context.h (struct gpgme_context_s): Use it here.
561
562 2002-06-11  Marcus Brinkmann  <marcus@g10code.de>
563
564         * engine-gpgsm.c (_gpgme_gpgsm_release): Close status_cb.fd.
565         (_gpgme_gpgsm_new): Duplicate status file descriptor, so we can
566         use our own close notification mechanism without interfering with
567         assuan.
568
569 2002-06-11  Werner Koch  <wk@gnupg.org>
570
571         * gpgme.h: Add GPGME_ATTR_SIG_SUMMARY and the GPGME_SIGSUM_
572         constants.
573         * verify.c (calc_sig_summary): New.
574         (gpgme_get_sig_ulong_attr): And use it here.
575
576 2002-06-10  Werner Koch  <wk@gnupg.org>
577
578         * rungpg.h: Add new status codes TRUNCATED and ERROR.
579         * verify.c (is_token, copy_token): New.
580         (_gpgme_verify_status_handler): Use copy_token, handle the new
581         ERROR status and store the errorcode used withgpgsm and trust
582         status codes.
583         * gpgme.h: New attribute ERRTOK.
584         * key.c (gpgme_key_get_string_attr): Add dummy case for it.
585         (gpgme_get_sig_string_attr): Use it here to return the last error.
586
587 2002-06-10  Marcus Brinkmann  <marcus@g10code.de>
588
589         * engine-gpgsm.c (_gpgme_gpgsm_start): Move the code that sets the
590         close notification for the status fd to ...
591         (_gpgme_gpgsm_new): ... here.
592         * wait.h: Include "sema.h".  Remove prototypes of
593         _gpgme_remove_proc_from_wait_queue and
594         _gpgme_register_pipe_handler.  Add prototypes of
595         _gpgme_fd_table_init, _gpgme_fd_table_deinit, _gpgme_fd_table_put,
596         _gpgme_add_io_cb, _gpgme_remove_io_cb, _gpgme_wait_event_cb and
597         _gpgme_wait_one..
598         * wait.c: Remove global variables PROC_QUEUE, PROC_QUEUE_LOCK,
599         FD_TABLE_SIZE, FD_TABLE, FD_TABLE_LOCK.  New global variables
600         FDT_GLOBAL, CTX_DONE_LIST, CTX_DONE_LIST_SIZE,
601         CTX_DONE_LIST_LENGTH and CTX_DONE_LIST_LOCK.  Remove struct
602         proc_s.  Replace struct wait_item_s.
603         (_gpgme_fd_table_init): New function.
604         (_gpgme_fd_table_deinit): Likewise.
605         (_gpgme_fd_table_put): Likewise.
606         (set_process_done): Remove function.
607         (do_select): Take argument FDT.  Use that to decide which fds to
608         select on.
609         (_gpgme_remove_proc_from_wait_queue): Remove function.
610         (_gpgme_wait_event_cb): New function.
611         (_gpgme_wait_one): Likewise.
612         (_gpgme_register_pipe_hanldler): Remove function.
613         (_gpgme_add_io_cb): New function.
614         (_gpgme_remove_io_cb): Likewise.
615         (_gpgme_freeze_fd): Remove function.
616         (_gpgme_thaw_fd): Remove function.
617         * rungpg.c (struct fd_data_map_s): Add new member TAG.
618         (struct gpg_object_s): Likewise for STATUS and COLON.  Add member
619         IDX to CMD.  Add new member IO_CBS.
620         (close_notify_handler): New variables POSSIBLY_DONE and NOT_DONE.
621         For each I/O callback, check if it should be unregistered.  If all
622         callbacks have been unregistered, trigger GPGME_EVENT_DONE.
623         Remove member RUNNING.
624         (_gpgme_gpg_new): Initialize new members.
625         (_gpgme_gpg_release): Check PID not RUNNING.  Don't call
626         _gpgme_remove_proc_from_wait_queue.  Close GPG->CMD.FD if set.
627         (build_argv): Store away the index instead the file descriptor for
628         CMD.
629         (_gpgme_gpg_add_io_cb): New function.
630         (_gpgme_gpg_spawn): Use _gpgme_gpg_add_io_cb to register IO
631         callbacks.
632         (gpg_status_handler): Change return type to void, remove PID
633         argument, close filedescriptor if EOF or error occurs.
634         (read_status): Use _gpgme_gpg_add_io_cb instead _gpgme_thaw_fd.
635         Use IO_CBS->remove instead _gpgme_freeze_fd.
636         (gpg_colon_line_handler): Change return type to void, remove PID
637         argument, close filedescriptor if EOF or error occurs.
638         (command_cb): Use IO_CBS->remove instead _gpgme_freeze_fd.
639         (_gpgme_gpg_set_io_cbs): New function.
640         * rungpg.h (_gpgme_gpg_set_io_cbs): Prototype for
641         _gpgme_gpg_set_io_cbs.
642         * gpgme.h (GpgmeIOCb): New type.
643         (GpgmeRegisterIOCb): Likewise.
644         (GpgmeRemoveIOCb): Likewise.
645         (GpgmeEventIO): Likewise.
646         (GpgmeEventIOCb): Likewise.
647         (struct GpgmeIOCbs): New structure to hold I/O callbacks.
648         (gpgme_set_op_io_cbs): New prototype.
649         (gpgme_get_op_io_cbs): Likewise.
650         * ops.h: New prototype for _gpgme_op_event_cb.  Remove prototypes
651         for _gpgme_freeze_fd and _gpgme_thaw_fd.  Remove PID argument from
652         _gpgme_data_inbound_handler and _gpgme_data_outbound_handler
653         prototype.  Add prototype for _gpgme_op_reset.
654         Add synchronous argument to _gpgme_decrypt_start prototype.
655         * io.h: Beautification.
656         * gpgme.c: Include "wait.h".
657         (gpgme_new): Initialize FDT.
658         (gpgme_set_io_cbs): New function.
659         (gpgme_get_io_cbs): Likewise.
660         (_gpgme_op_event_cb): Likewise.
661         * data.c (_gpgme_data_inbound_handler): Change return type to
662         void.  Drop PID argument.  Close FD on error and EOF.
663         (write_mem_data): Don't close FD here ...
664         (write_cb_data): ... or here ...
665         (_gpgme_data_outbound_handler): ... but here.  Change return type
666         to void.  Drop PID argument.
667         * context.h: Include "wait.h".
668         (struct gpgme_context_s): New members FDT and IO_CBS.
669         * op-support.c: New file.
670         * Makefile.am (libgpgme_la_SOURCES): Add op-support.c.
671         * ops.h: Add prototype for _gpgme_op_reset().
672         * decrypt.c (_gpgme_decrypt_start): New argument SYNCHRONOUS.  Use
673         _gpgme_op_reset.
674         (gpgme_op_decrypt_start): Add synchronous argument.
675         (gpgme_op_decrypt): Likewise.  Use _gpgme_wait_one instead
676         gpgme_wait.
677         * delete.c (gpgme_op_delete_start): Rename to ...
678         (_gpgme_op_delete_start): ... this.  New argument SYNCHRONOUS.
679         Use _gpgme_op_reset.  Make function static.
680         (gpgme_op_delete_start): Just a wrapper around
681         _gpgme_op_delete_start now.
682         (gpgme_op_delete): Add synchronous argument.  Use _gpgme_wait_one
683         instead gpgme_wait.
684         * encrypt.c: Include "wait.h".
685         (ggpgme_op_encrypt_start): Rename to ...
686         (_gpgme_op_encrypt_start): ... this.  New argument SYNCHRONOUS.
687         Use _gpgme_op_reset.  Make function static.
688         (gpgme_op_encrypt_start): Just a wrapper around
689         _gpgme_op_encrypt_start now.
690         (gpgme_op_encrypt): Add synchronous argument.  Use _gpgme_wait_one
691         instead gpgme_wait.
692         * encrypt_sign.c (gpgme_op_encrypt_sign_start): Rename to ...
693         (_gpgme_op_encrypt_sign_start): ... this.  New argument
694         SYNCHRONOUS.  Use _gpgme_op_reset.  Make function static.
695         (gpgme_op_encrypt_sign_start): Just a wrapper around
696         _gpgme_op_encrypt_sign_start now.
697         (gpgme_op_encrypt_sign): Add synchronous argument.  Use
698         _gpgme_wait_one instead gpgme_wait.
699         * export.c (gpgme_op_export_start): Rename to ...
700         (_gpgme_op_export_start): ... this.  New argument SYNCHRONOUS.
701         Use _gpgme_op_reset.  Make function static.
702         (gpgme_op_export_start): Just a wrapper around
703         _gpgme_op_export_start now.
704         (gpgme_op_export): Add synchronous argument.  Use _gpgme_wait_one
705         instead gpgme_wait.
706         * genkey.c (gpgme_op_genkey_start): Rename to ...
707         (_gpgme_op_genkey_start): ... this.  New argument SYNCHRONOUS.
708         Use _gpgme_op_reset.  Make function static.
709         (gpgme_op_genkey_start): Just a wrapper around
710         _gpgme_op_genkey_start now.
711         (gpgme_op_genkey): Add synchronous argument.  Use _gpgme_wait_one
712         instead gpgme_wait.
713         * import.c (gpgme_op_import_start): Rename to ...
714         (_gpgme_op_import_start): ... this.  New argument SYNCHRONOUS.
715         Use _gpgme_op_reset.  Make function static.
716         (gpgme_op_import_start): Just a wrapper around
717         _gpgme_op_import_start now.
718         (gpgme_op_import): Add synchronous argument.  Use _gpgme_wait_one
719         instead gpgme_wait.
720         * keylist.c (gpgme_op_keylist_start): Use _gpgme_op_reset.
721         (gpgme_op_keylist_ext_start): Likewise.
722         * sign.c (gpgme_op_sign_start): Rename to ...
723         (_gpgme_op_sign_start): ... this.  New argument SYNCHRONOUS.  Use
724         _gpgme_op_reset.  Make function static.
725         (gpgme_op_sign_start): Just a wrapper around _gpgme_op_sign_start
726         now.
727         (gpgme_op_sign): Add synchronous argument.  Use _gpgme_wait_one
728         instead gpgme_wait.
729         * trustlist.c (gpgme_op_trustlist_start): Use _gpgme_op_reset.
730         * verify.c (gpgme_op_verify_start): Rename to ...
731         (_gpgme_op_verify_start): ... this.  New argument SYNCHRONOUS.
732         Use _gpgme_op_reset.  Make function static.
733         (gpgme_op_verify_start): Just a wrapper around
734         _gpgme_op_verify_start now.
735         (gpgme_op_verify): Add synchronous argument.  Use _gpgme_wait_one
736         instead gpgme_wait.
737         * engine-gpgsm.c (iocb_data_t): New type.
738         (struct gpgsm_object_s): New member status_cb.  Replace input_fd
739         and input_data with input_cb.  Replace output_fd and output_data
740         with output_cb.  Replace message_fd and message_data with
741         message_cb.  New member io_cbs.
742         (_gpgme_gpgsm_new): Initialize all new members (and drop the old
743         ones).
744         (close_notify_handler): New variable POSSIBLY_DONE.  For each I/O
745         callback, check if it should be unregistered.  If all callbacks
746         have been unregistered, trigger GPGME_EVENT_DONE.
747         (_gpgme_gpgsm_release): Remove variable PID.  Use new variable
748         names to close the file descriptors.
749         (_gpgme_gpgsm_op_decrypt): Use new variable names,
750         (_gpgme_gpgsm_op_encrypt): Likewise.
751         (_gpgme_gpgsm_op_genkey): Likewise.
752         (_gpgme_gpgsm_op_import): Likewise.
753         (_gpgme_gpgsm_op_keylist): Likewise.
754         (_gpgme_gpgsm_op_keylist_ext): Likewise.
755         (_gpgme_gpgsm_op_sign): Likewise.
756         (_gpgme_gpgsm_op_verify): Likewise.
757         (gpgsm_status_handler): Drop argument PID.  Change return type to
758         void.  Close status pipe before returning because of EOF or error.
759         (_gpgme_gpgsm_add_io_cb): New function.
760         (_gpgme_gpgsm_start): Use _gpgme_gpgsm_add_io_cb to register
761         callback function.
762         (_gpgme_gpgsm_set_io_cbs): New function.
763         * engine-gpgsm.h: New prototype for _gpgme_gpgsm_set_io_cbs.
764         * engine.c (_gpgme_engine_set_io_cbs): New function.
765         * engine.h: New prototype for _gpgme_engine_set_io_cbs.
766
767 2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
768
769         * Makefile.am (libgpgme_la_SOURCES): Remove mutex.h.
770
771 2002-06-03  Marcus Brinkmann  <marcus@g10code.de>
772
773         * key.c: Include <ctype.h>.
774         (_gpgme_key_append_name): Skip one more char when
775         processing escaped char.  Submitted by Marc Mutz <mutz@kde.org>.
776         Handle hexadecimal encodings.  Also reported by Marc.  Thanks!
777
778 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
779
780         * ath.h: Enable the _gpgme_ prefix.  Fix all those prefix macros.
781         * posix-sema.c: Use that prefix here.
782         * posix-io.c: Include "ath.h".
783         (_gpgme_io_read): Use _gpgme_ath_read instead read.
784         (_gpgme_io_write): Use _gpgme_ath_write instead write.
785         (_gpgme_io_waitpid): Use _gpgme_ath_waitpid instead waitpid.
786         (_gpgme_io_select): Use _gpgme_ath_select instead select.
787
788 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
789
790         * Makefile.am (ath_components): New variable.
791         (ath_components_pthread): Likewise.
792         (ath_components_pth): Likewise.
793         (system_components): Add ath_componentes.
794
795         * ath.h: New file.
796         * ath.c: Likewise.
797         * ath-pthread.c: Likewise.
798         * ath-pth.c: Likewise.
799         * posix-sema.c (_gpgme_sema_cs_enter): Rework to use the ATH
800         interface.
801         * mutex.h: Remove file.
802
803 2002-05-30  Werner Koch  <wk@gnupg.org>
804
805         * key.c (gpgme_key_get_string_attr): Return NULL when asking for
806         an issuer with IDX > 0.  We don't support altIssuerNames for now.
807
808 2002-05-22  Werner Koch  <wk@gnupg.org>
809
810         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Aehmm, added
811         missing variable definition.  Oohh - Marcus was faster.
812
813 2002-05-22  Marcus Brinkmann  <marcus@gnu.org>
814
815         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Fix last change.
816
817 2002-05-21  Werner Koch  <wk@gnupg.org>
818
819         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist)
820         (_gpgme_gpgsm_op_keylist_ext):  Pass the keylist mode to gpgsm.
821
822 2002-05-10  Werner Koch  <wk@gnupg.org>
823
824         * key.h (gpgme_key_s): Add OTRUST.
825         * keylist.c (set_ownertrust): New.
826         (keylist_colon_handler): Get the ownertrust value
827         * key.c (gpgme_key_get_string_attr,gpgme_key_get_ulong_attr):
828         Return that value.
829
830 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
831
832         * w32-util.c: New static variable GET_PATH_LOCK.
833         (_gpgme_get_gpg_path): Remove superfluous NULL initializer.
834         Take lock while determining path.
835         (_gpgme_get_gpgsm_path): Likewise.
836         * version.c (do_subsystem_inits): Set DONE to 1 after
837         initialization.
838         (gpgme_get_engine_info): New variable ENGINE_INFO_LOCK.  Take lock
839         while determining engine info.
840         * rungpg.c (_gpgme_gpg_get_version): New variable
841         GPG_VERSION_LOCK.  Take the lock while determining the program
842         version.
843         * posix-io.c: Include "sema.h".
844         (_gpgme_io_spawn): New variable FIXED_SIGNALS_LOCK.  Take the lock
845         while fixing the signals.
846         (_gpgme_io_select): Make READFDS and WRITEFDS non-static.
847         * key.c: Include "sema.h".  New globals KEY_CACHE_LOCK and
848         KEY_REF_LOCK.
849         (capabilities_to_string): Make STRINGS very const.
850         (_gpgme_key_cache_add): Lock the key cache.
851         (_gpgme_key_cache_get): Likewise.
852         (gpgme_key_ref, gpgme_key_release): Lock the key_ref_lock.
853         * import.c (append_xml_impinfo): Make IMPORTED_FIELDS and
854         IMPORT_RES_FIELDS very const.  Make FIELD and FIELD_NAME a litle
855         const.
856         * engine.c (_gpgme_engine_get_info): New variable
857         ENGINE_INFO_LOCK.  Take lock while determining engine info.
858         * engine-gpgsm.c: Include "sema.h".
859         (_gpgme_gpgsm_get_version): New variable GPGSM_VERSION_LOCK.  Take
860         lock while getting program version.
861
862 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
863
864         * debug.h: New file.
865         * Makefile.am (libgpgme_la_SOURCES): Add debug.h.
866         * util.h: Removed all prototypes and declarations related to
867         debugging.  Include "debug.h".
868
869         * debug.c (debug_level): Comment variable and remove superfluous
870         zero initializer.
871         (errfp): Likewise.
872         (_gpgme_debug_enabled): Function removed.
873         (struct debug_control_s): Definition removed.
874         (_gpgme_debug_level): Function removed.
875         (_gpgme_debug_begin): Rewritten to use vasprintf.  Accept a
876         pritnf-style format specification and a variable number of
877         arguments.
878         (_gpgme_debug_add): Rewritten using vasprintf.  Expect that format
879         starts out with "%s" for simplicity.
880         (_gpgme_debug_end): Rewritten using vasprintf.  Do not accept a
881         TEXT argument anymore.
882
883         * posix-io.c (_gpgme_io_select): Use new level argument for
884         DEBUG_BEGIN instead explicit if construct.
885
886         * debug.c (debug_init): Remove superfluous zero initializer,
887         remove volatile flag of INITIALIZED.  Do not use the
888         double-checked locking algorithm, it is fundamentally flawed and
889         will empty your fridge (on a more serious note, despite the
890         volatile flag it doesn't give you the guarantee you would expect,
891         for example on a DEC Alpha or an SMP machine.  The volatile only
892         serializes accesses to the volatile variable, but not to the other
893         variables).
894
895 2002-05-03  Werner Koch  <wk@gnupg.org>
896
897         * engine-gpgsm.c (_gpgme_gpgsm_new): Redirect any gpgsm error
898         output to /dev/null.
899
900         * verify.c (gpgme_get_sig_key): Set the protocol of the listctx.
901         * gpgme.c (gpgme_get_protocol): New.
902
903         * data.c (gpgme_data_write): Changed type of BUFFER to void*.
904         (gpgme_data_read): Ditto.
905
906         * verify.c (_gpgme_verify_status_handler): Handle TRUST_* status
907         lines so that a claim can be made without looking up the key.
908         (gpgme_get_sig_string_attr): New. 
909         (gpgme_get_sig_ulong_attr): New.
910
911         * gpgme.h (GpgmeAttr): Added GPGME_ATTR_SIG_STATUS.
912
913         * rungpg.h: Add new status codes from gpg 1.0.7 and formatted the
914         list to align with the status.h file from gnupg.
915
916         * gpgme.h (GpgmeSigStat): Add _GOOD_EXP and _GOOD_EXPKEY.
917         * verify.c (_gpgme_verify_status_handler, finish_sig): Handle
918         these new status codes.  Store the expiration time 
919
920 2002-04-27  Werner Koch  <wk@gnupg.org>
921
922         * gpgme.h (GpgmeData_Encoding): New.
923         * data.c (gpgme_data_get_encoding,gpgme_data_set_encoding): New.
924         * engine-gpgsm.c (map_input_enc): New. Use it in all local
925         functions where the INPUT command gets send.
926
927 2002-04-27  Marcus Brinkmann  <marcus@g10code.de>
928
929         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Close the output
930         descriptor only when we don't need it anymore.  Close the message
931         descriptor if we don't need it.
932
933 2002-04-26  Werner Koch  <wk@gnupg.org>
934
935         * Makefile.am (libgpgme_la_LIBADD): Use libtool libraries.
936
937 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
938
939         * rungpg.c (_gpgme_gpg_release): Call gpgme_data_release on
940         GPG->cmd.cb_data, not xfree.
941
942 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
943
944         * engine-gpgsm.c (_gpgme_gpgsm_new): Set the display, ttyname,
945         ttytype, lc_ctype and lc_messages options in the server.
946
947 2002-04-24  Marcus Brinkmann  <marcus@g10code.de>
948
949         * engine-gpgsm.c (map_assuan_error): Add new error codes.
950
951 2002-04-23  Werner Koch  <wk@gnupg.org>
952
953         * key.c (gpgme_key_get_ulong_attr): Swapped use of can_encrypt and
954         can_certify to return the requested values.
955
956 2002-04-23  Marcus Brinkmann  <marcus@g10code.de>
957
958         * gpgme.c (gpgme_get_progress_cb): Allow either return parameter
959         to be NULL.
960         (gpgme_get_passphrase_cb): Likewise.
961
962 2002-04-22  Marcus Brinkmann  <marcus@g10code.de>
963
964         * gpgme.c (gpgme_get_passphrase_cb): New function.
965         (gpgme_get_progress_cb): New function.
966         * gpgme.h: Add new prototypes for gpgme_get_passphrase_cb and
967         gpgme_get_progress_cb.
968
969 2002-03-28  Werner Koch  <wk@gnupg.org>
970
971         * gpgme.h (GpgmeAttr): Add values for issuer and chaining.
972         * key.h (gpgme_key_s): Add issuer and chaining elements for X509.
973         * keylist.c (keylist_colon_handler): Store them.
974         * key.c (gpgme_key_release): Free them.
975         (gpgme_key_get_as_xml,gpgme_key_get_string_attr): Print them.
976
977 2002-03-26  Werner Koch  <wk@gnupg.org>
978
979         * Makefile.am (libgpgme_la_SOURCES): Add mutex.h
980
981 2002-03-21  Werner Koch  <wk@gnupg.org>
982
983         * util.h [!HAVE_FOPENCOOKIE]: Make sure off_t and ssize_t are
984         defined.
985
986 2002-03-18  Marcus Brinkmann  <marcus@g10code.de>
987
988         * Makefile.am (system_components): New variable, set depending on
989         HAVE_DOSISH_SYSTEM.
990         (libgpgme_la_SOURCES): Use system_components.  Remove `syshdr.h'.
991         * syshdr.h: File removed.
992
993         * posix-io.c: Remove !HAVE_DOSISH_SYSTEM safeguard.  Clean up source.
994         * posix-sema.c: Likewise.
995         * posix-util.c: Likewise.
996
997         * w32-io.c: Remove HAVE_DOSISH_SYSTEM safeguard.
998         * w32-sema.c: Likewise.
999         * w32-util.c: Likewise.
1000
1001         * posix-io.c: Include `unistd.h', do not include `syshdr.h'.
1002         * posix-sema.c: Likewise.
1003         * w32-io.c: Include `io.h', do not include `syshdr.h'
1004         * w32-sema.c: Likewise.
1005         * w32-util.c: Likewise.
1006         * data.c: Do not include `syshdr.h'.
1007         * wait.c: Likewise.
1008         * wait.h: Code cleanup.
1009
1010         * mutex.h: New file.
1011         * posix-sema.c: Implement.
1012
1013 2002-03-08  Werner Koch  <wk@gnupg.org>
1014
1015         * util.h [!HAVE_FOPENCOOKIE]: Fixed type.  Thanks to Frank Heckenbach.
1016
1017 2002-03-07  Werner Koch  <wk@gnupg.org>
1018
1019         * gpgme.h (gpgme_op_keylist_ext_start): Add prototype.
1020
1021 2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
1022
1023         * encrypt.c (_gpgme_encrypt_sym_status_handler): New function.
1024         (gpgme_op_encrypt_start): New variable SYMMETRIC, set it if RECP
1025         is null, and if it is set, use _gpgme_encrypt_sym_status_handler
1026         as status handler and run _gpgme_passphrase_start.
1027         * rungpg.c (_gpgme_gpg_op_encrypt): If RECP is zero, do symmetric
1028         encryption.
1029         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): If RECP is zero,
1030         return error value.
1031
1032         * rungpg.c (_gpgme_gpg_op_verify): Add "--" argument.
1033
1034 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
1035
1036         * passphrase.c (_gpgme_passphrase_status_handler): Also set the
1037         error No_Passphrase if only a bad passphrase was provided.
1038
1039 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
1040
1041         * rungpg.c (_gpgme_gpg_op_verify): If TEXT is of mode
1042         GPGME_DATA_MODE_IN, construct a command line that stores the
1043         plaintext in TEXT.
1044         * verify.c (gpgme_op_verify_start): Accept TEXT being
1045         uninitialized, and in this case interpret SIG as a normal or
1046         cleartext signature and TEXT as a return data object.
1047         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.
1048
1049 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
1050
1051         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext) [!ENABLE_GPGSM]:
1052         Add stub function.
1053
1054 2002-02-28  Werner Koch  <wk@gnupg.org>
1055
1056         * key.h (subkey_s): New member expires_at.
1057         * keylist.c (keylist_colon_handler): Set it here
1058         * key.c (gpgme_key_get_as_xml,gpgme_key_get_ulong_attr): Return it.
1059
1060 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
1061
1062         * rungpg.h (_gpgme_gpg_op_keylist_ext): New prototype.
1063         * rungpg.c (_gpgme_gpg_op_keylist_ext): New function.
1064         * engine-gpgsm.h (_gpgme_gpgsm_op_keylist_ext): New prototype.
1065         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): New function.
1066         * engine.h (_gpgme_engine_op_keylist_ext): New prototype.
1067         * engine.c (_gpgme_engine_op_keylist_ext): New function.
1068         * keylist.c (gpgme_op_keylist_ext_start): New function.
1069
1070 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
1071
1072         * gpgme.h: Add new error code GPGME_Invalid_Recipient.
1073         * encrypt.c (struct encrypt_result_s): New member invalid_recipients,
1074         rename no_recipients to no_valid_recipients.
1075         (_gpgme_encrypt_status_handler): Include error for invalid
1076         recipients.
1077         * engine-gpgsm.c (gpgsm_set_recipients): Change type of first
1078         argument to GpgsmObject.  Use that to report back the status about
1079         the recipients.
1080
1081 2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
1082
1083         * verify.c (_gpgme_verify_status_handler): Fix the last change.
1084
1085 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
1086
1087         * engine.c (_gpgme_engine_op_encrypt_sign): New function.
1088         * engine.h (_gpgme_engine_op_encrypt_sign): New prototype.
1089         * rungpg.c (_gpgme_append_gpg_args_from_signers): New function.
1090         (_gpgme_gpg_op_sign): Use that new function.
1091         (_gpgme_gpg_op_encrypt_sign): New function.
1092         * rungpg.h (_gpgme_gpg_op_encrypt_sign): New prototype. 
1093         * gpgme.h (gpgme_op_encrypt_sign_start): New prototype.
1094         (gpgme_op_encrypt_sign): Likewise.
1095         * Makefile.am (libgpgme_la_SOURCES): Add encrypt-sign.c.
1096         * ops.h (_gpgme_encrypt_status_handler): Add prototype.
1097         (_gpgme_sign_status_handler): Add prototype.
1098         * sign.c (sign_status_handler): Rename to ...
1099         (_gpgme_sign_status_handler): ... this and make non-static.
1100         * encrypt.c (encrypt_status_handler): Rename to ...
1101         (_gpgme_encrypt_status_handler): ... this and make non-static.
1102         * encrypt.c (gpgme_op_encrypt_start): Use new status handler name.
1103         * sign.c (gpgme_op_sign_start): Likewise.
1104         
1105 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
1106
1107         * verify.c (_gpgme_verify_status_handler): Parse the args line to
1108         see if the problem is due to a missing key, and report that back
1109         to the user.
1110
1111 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
1112
1113         * context.h (struct gpgme_context_s): New member include_certs.
1114         * gpgme.h (gpgme_set_include_certs): Add prototype.
1115         (gpgme_get_include_certs): Likewise.
1116         * gpgme.c (gpgme_set_include_certs): New function.
1117         (gpgme_get_include_certs): Likewise.
1118         (gpgme_new): Set include_certs to 1 (the default).
1119         * engine.c (_gpgme_engine_op_sign): Accept new argument include_certs,
1120         and pass it to _gpgme_gpgsm_op_sign.
1121         * engine.h (_gpgme_engine_op_sign): Likewise for prototype.
1122         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Accept new argument
1123         include_certs and handle it.
1124         * engine-gpgsm.h (_gpgme_gpgsm_start): Add new argument include_certs.
1125         * sign.c (gpgme_op_sign_start): Add new argument to
1126         _gpgme_engine_op_sign call.
1127
1128 2002-02-14  Werner Koch  <wk@gnupg.org>
1129
1130         * keylist.c (gpgme_op_keylist_start): Do not use a verbose listing.
1131
1132 2002-02-13  Werner Koch  <wk@gnupg.org>
1133
1134         * vasprintf.c, fopencookie.c: Add replacement functions.
1135         * util.h: Add prototypes for them.
1136
1137 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
1138
1139         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return 0 if we
1140         reach the end of the function.
1141
1142 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
1143
1144         * genkey.c (gpgme_op_genkey_start): Fix logic in validity check.
1145         (gpgme_op_genkey_start): Skip newlines after opening tag.
1146
1147         * engine-gpgsm.c (_gpgme_gpgsm_start): Remove cruft.
1148
1149 2002-02-08  Marcus Brinkmann  <marcus@g10code.de>
1150
1151         * genkey.c (gpgme_op_genkey_start): Allow PUBKEY and SECKEY to be
1152         set, and pass them down to the crypto engine.
1153         * engine-gpgsm.h (_gpgme_gpgsm_start): New arguments PUBKEY and SECKEY.
1154         * engine.h: Likewise.
1155         * rungpg.h (_gpgme_gpg_spawn): Likewise.
1156         * engine.c (_gpgme_engine_op_genkey): Likewise.  Use those
1157         arguments.
1158         * rungpg.c (_gpgme_gpg_op_genkey): Likewise.  Complain if those
1159         arguments are set.
1160         * engine-gpgsm.c (_gpgme_gpgsm_op_genkey): Likewise.  Implement
1161         function.
1162
1163         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Beautify comment.
1164
1165 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
1166
1167         * rungpg.c (_gpgme_gpg_op_keylist): Remove handling of keylist
1168         mode (for now).
1169
1170 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
1171
1172         * wait.c (gpgme_wait): Add new argument STATUS, in which the
1173         status of the returned context is returned.
1174         (_gpgme_wait_on_condition): Rework the function a bit, to make it
1175         aware of cancelled processes, and to allow to use gpgme_wait with
1176         CTX being NULL (as documented in the source).
1177         (struct proc_s): New member REPORTED.
1178         * gpgme.h: Fix prototype.
1179         * verify.c (gpgme_op_verify): Fix use of gpgme_wait.
1180         * sign.c (gpgme_op_sign): Likewise.
1181         * import.c (gpgme_op_import): Likewise.
1182         * genkey.c (gpgme_op_genkey): Likewise.
1183         * export.c (gpgme_op_export): Likewise.
1184         * encrypt.c (gpgme_op_encrypt): Likewise.
1185         * delete.c (gpgme_op_delete): Likewise.
1186         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
1187
1188 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
1189
1190         * gpgme.c (gpgme_set_keylist_mode): Possibly return an error
1191         value.
1192         (gpgme_get_keylist_mode): New function.
1193         (gpgme_new): Set the default for keylist_mode member of CTX.
1194
1195         * gpgme.h (gpgme_set_keylist_mode): Fix prototype.
1196         (gpgme_get_keylist_mode): New prototype.
1197         (GPGME_KEYLIST_MODE_LOCAL): New macro.
1198         (GPGME_KEYLIST_MODE_EXTERN): Likewise..
1199
1200 2002-02-02  Marcus Brinkmann  <marcus@g10code.de>
1201
1202         This patch has gotten a bit large... mmh.  The main thing that
1203         happens here is that error values are now not determined in the
1204         operation function after gpgme_wait completed, but in the status
1205         handler when EOF is received.  It should always be the case that
1206         either an error is flagged or EOF is received, so that after a
1207         gpgme_wait you should never have the situation that no error is
1208         flagged and EOF is not received.  One problem is that the engine
1209         status handlers don't have access to the context, a horrible
1210         kludge works around this for now.  All errors that happen during a
1211         pending operation should be catched and reported in ctx->error,
1212         including out-of-core and cancellation.  This rounds up neatly a
1213         couple of loose ends, and makes it possible to pass up any errors
1214         in the communication with the backend as well.  As a bonus, there
1215         will be a function to access gpgme->wait, so that the operations
1216         can truly be implemented with their _start function.
1217
1218         * engine-gpgsm.c (gpgsm_status_handler): Horrible kludge to report
1219         error back to the context.
1220         * rungpg.c (gpg_status_handler): Same horrible kludge applied here.
1221
1222         * engine-gpgsm.c (gpgsm_assuan_simple_command): Add error checking.
1223
1224         * wait.c (_gpgme_wait_on_condition): If canceled, set CTX->error
1225         to a value indication that.
1226
1227         * verify.c (add_notation): Set error, not out_of_core.
1228         (finish_sig): Likewise.
1229         (gpgme_op_verify_start): Don't clear out_of_core.
1230         (_gpgme_verify_status_handler): At EOF, clean up the notation data.
1231         (gpgme_op_verify): And don't do it here.
1232
1233         * trustlist.c (trustlist_status_handler): Check error, not out_of_core.
1234         (gpgme_op_trustlist_start): Don't clear out_of_core.
1235         (gpgme_op_trustlist_next): Check error, not out_of_core.
1236         (gpgme_op_trustlist_end): Likewise.
1237
1238         * ops.h (test_and_allocate_result): New macro.
1239         (_gpgme_passphrase_result): Remove prototype.
1240         * delete.c (gpgme_op_delete): Return error from context.
1241         (delete_status_handler): Use macro test_and_allocate_result.
1242         Perform error checking at EOF.
1243         (gpgme_op_delete_start): Release result.
1244         * passphrase.c (_gpgme_passphrase_status_handler): Use macro
1245         test_and_allocate_result, and perform error checking here.
1246         (_gpgme_passphrase_result): Function removed.
1247         * sign.c (gpgme_op_sign_start): Do not set out_of_core to zero.
1248         (gpgme_op_sign): Just return the error value from the context.
1249         (sign_status_handler): Only progress if no error is set yet.  If
1250         we process an EOF, set the resulting error value (if any).
1251         * decrypt.c (_gpgme_decrypt_result): Function removed.
1252         (create_result_struct): Function removed.
1253         (_gpgme_decrypt_status_handler): Use macro test_and_allocate_result,
1254         caclulate error on EOF, do not progress with errors.
1255         (_gpgme_decrypt_start): Do not set out_of_core to zero.
1256         (gpgme_op_decrypt): Just return the error value from the context.
1257         * encrypt.c (encrypt_status_handler): Perform the error checking
1258         here.
1259         (gpgme_op_encrypt_start): Do not clear out_of_core.
1260         * export.c (export_status_handler): Return if error is set in context.
1261         (gpgme_op_export_start): Release result.
1262         (gpgme_op_export): Return error from context.
1263         * decrypt-verify.c (gpgme_op_decrypt_verify): Return the error in
1264         the context.
1265         * genkey.c (genkey_status_handler): Use macro
1266         test_and_allocate_result.  Perform error checking at EOF.
1267         (gpgme_op_genkey): Just return the error from context.
1268         * import.c (gpgme_op_import): Return the error from context.
1269         (import_status_handler): Use macro test_and_allocate_result.
1270         * keylist.c (gpgme_op_keylist_start): Do not clear out_of_core.
1271         (gpgme_op_keylist_next): Return error of context.
1272         (keylist_colon_handler): Set error instead out_of_code.
1273         (finish_key): Likewise.
1274
1275         * context.h: Remove member out_of_core, add member error.
1276         * gpgme.c (_gpgme_release_result): Clear error flag.
1277
1278         * engine.h (_gpgme_engine_get_error): New prototype.
1279         * engine.c (_gpgme_engine_get_error): New function.
1280         * engine-gpgsm.c (_gpgme_gpgsm_get_error): New function.
1281
1282         * engine-gpgsm.c (map_assuan_error): New function.
1283         (gpgsm_assuan_simple_command): Change return type to GpgmeError,
1284         use the new function to map error values.
1285         (gpgsm_set_fd): Change return type tp GpgmeError.
1286         (_gpgme_gpgsm_op_decrypt): Change type of ERR to GpgmeError.
1287         (gpgsm_set_recipients): Likewise.  Change type of return value
1288         equivalently.  Adjust error values.
1289         (_gpgme_gpgsm_op_import): Likewise.
1290         (_gpgme_gpgsm_op_sign): Likewise.
1291         (struct gpgsm_object_s): New member error.
1292         (gpgsm_status_handler): Set error if error occurs.  Determine
1293         error number from ERR line received.  If assuan_read_line fails,
1294         terminate the connection.
1295
1296 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
1297
1298         * Makefile.am (MOSTLYCLEANFILES): New variable.
1299
1300 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
1301
1302         * engine-gpgsm.c (gpgsm_status_handler): At error, terminate the
1303         connection to the server.
1304
1305 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
1306
1307         * rungpg.h: Add STATUS_KEY_CREATED.
1308
1309         * progress.c: New file.
1310         * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
1311
1312         * genkey.c (genkey_status_handler): Use
1313         _gpgme_progress_status_handler.  Add check for status.
1314         (struct genkey_result_s): New structure.
1315         (_gpgme_release_genkey_result): New function.
1316         (gpgme_op_genkey): Check for error.
1317         * gpgme.c (_gpgme_release_result): Call
1318         _gpgme_release_genkey_result.
1319         * ops.h (_gpgme_release_genkey_result): Add prototype.
1320         * types.h (GenKeyResult): New type.
1321         * context.h (gpgme_context_s): Add GenKeyResult to member result.
1322
1323 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
1324
1325         * gpgme.c (_gpgme_release_result): Call
1326         _gpgme_release_delete_result.
1327         * ops.h (_gpgme_release_delete_result): Add prototype.
1328         * types.h (DeleteResult): New type.
1329         * context.h (gpgme_context_s): Add DeleteResult to member result.
1330
1331         * delete.c (enum delete_problem): New type.
1332         (struct delete_result_s): New structure.
1333         (_gpgme_release_delete_result): New function.
1334         (delete_status_handler): Implement more status codes.
1335         (gpgme_op_delete): Return error on failure.
1336
1337         * import.c (MAX_IMPORTED_FIELDS): Bump up to 14.
1338
1339 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
1340
1341         * import.c (struct import_result_s): New structure.
1342         (_gpgme_release_import_result): New function.
1343         (append_xml_impinfo): Likewise.
1344         (import_status_handler): Implement.
1345         * gpgme.c (_gpgme_release_result): Add call to
1346         _gpgme_release_import_result.
1347         * ops.h (_gpgme_release_import_result): Add prototype.
1348         * types.h (ImportResult): New type.
1349         * context.h (gpgme_context_s): Add ImportResult to member result.
1350
1351         * encrypt.c (gpgme_op_encrypt): Code clean up.
1352
1353 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
1354
1355         * gpgme.h: Add lots of comment and fix the formatting.  Add
1356         gpgme_trustlist_end prototype.
1357
1358 2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
1359
1360         * gpgme.h: Add new type GpgmeIdleFunc.  Change type of
1361         gpgme_register_idle to return and accept this type.
1362         * wait.c (gpgme_register_idle): Fix type.
1363         Save and return old value of idle_function.
1364
1365 2002-01-29  Werner Koch  <wk@gnupg.org>
1366
1367         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode.
1368
1369         * keylist.c (keylist_colon_handler): Add support for the new "crs"
1370         record type.
1371
1372 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
1373
1374         * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect,
1375         not assuan_pipe_disconnect.
1376
1377         * Makefile.am (libgpgme_la_LIBADD): Change to link assuan and
1378         jnlib (needed by assuan) statically into libgpgme.  Linking a
1379         static library into a shared library this way is not portable.
1380
1381 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
1382
1383         * gpgme.h (GpgmePassphraseCb): Change type of R_HD from void* to
1384         void**.
1385
1386 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
1387
1388         * data.c (gpgme_data_new_from_filepart): Change type of LENGTH
1389         from off_t to size_t.
1390         * gpgme.h: Likewise.
1391
1392 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
1393
1394         * wait.c (_gpgme_wait_on_condition): If the process finished,
1395         reset the pending flag.  Also if the operation was cancelled.
1396
1397         (struct proc_s): Rename READY to DONE.
1398         (wait_item_s): Likewise.
1399         (set_process_ready): Rename to ...
1400         (set_process_done): ... this.
1401         (_gpgme_remove_proc_from_wait_queue): Call set_process_done
1402         instead set_process_ready.
1403         (_gpgme_wait_on_condition): Likewise.
1404         (do_select): Rename READY to DONE.
1405
1406         * verify.c (gpgme_op_verify): Do not set pending to zero here.
1407         * sign.c (gpgme_op_sign): Likewise.
1408         * import.c (gpgme_op_import): Likewise.
1409         * genkey.c (gpgme_op_genkey): Likewise.
1410         * export.c (gpgme_op_export): Likewise.
1411         * encrypt.c (gpgme_op_encrypt): Likewise.
1412         * delete.c (gpgme_op_delete): Likewise.
1413         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
1414         * decrypt.c (gpgme_op_decrypt): Likewise.
1415
1416 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
1417
1418         * export.c: Cleanup.
1419
1420 2002-01-15  Marcus Brinkmann  <marcus@g10code.de>
1421
1422         * trustlist.c: Various source clean ups.
1423         (my_isdigit): Removed.
1424         (gpgme_op_trustlist_end): New function.
1425
1426 2002-01-13  Marcus Brinkmann  <marcus@g10code.de>
1427
1428         * gpgme.c: Various source clean ups, like renaming C to CTX where
1429         appropriate.
1430         (gpgme_new): Clear R_CTX before starting the work.
1431         (my_isdigit): Removed.
1432         (my_isxdigit): Likewise.
1433
1434         * data.c: Various source clean ups.
1435         (gpgme_data_new_from_mem): Check BUFFER after clearing R_DH.
1436         (gpgme_data_new_with_read_cb): Similar for READ_CB.
1437         (gpgme_data_new_from_file): Loop over fread while EINTR.
1438         (gpgme_data_new_from_filepart): Rediddled a bit.  Allow LENGTH to
1439         be zero.  Loop over fread while EINTR.
1440
1441         (my_isdigit): Removed.
1442         (my_isxdigit): Likewise.
1443
1444 2001-12-21  Marcus Brinkmann  <marcus@g10code.de>
1445
1446         * engine-gpgsm.c (_gpgme_gpgsm_new): Replace General_Error with
1447         Pipe_Error where appropriate.
1448
1449 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
1450
1451         * engine.c: Include `string.h'.  Reported by Stéphane Corthésy.
1452
1453         * version.c (get_engine_info): Remove prototype.
1454
1455 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
1456
1457         * engine-gpgsm.c (_gpgme_gpgsm_new): New variable CHILD_FDS.
1458         Fill it with the servers fds, and pass it to assuan_pipe_connect.
1459
1460 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
1461
1462         * keylist.c (gpgme_op_keylist_end): New function.
1463         * gpgme.h (gpgme_op_keylist_end): New prototype.
1464
1465         * engine.h (gpgme_engine_check_version): Move prototype to ...
1466         * gpgme.h (gpgme_engine_check_version): ... here.
1467
1468         * genkey.c (gpgme_op_genkey_start): Remove unused variable.
1469
1470 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
1471
1472         * version.c (gpgme_get_engine_info): Reimplemented.
1473         (gpgme_check_engine): Reimplemented.
1474         (_gpgme_compare_versions): Return NULL if MY_VERSION is NULL.
1475
1476         * engine.c: Include `io.h'.
1477         (gpgme_engine_get_info): New function.
1478         * engine.h (gpgme_engine_check_version, _gpgme_engine_get_info):
1479         Add prototype.
1480
1481 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
1482
1483         * rungpg.c (struct reap_s, reap_list, reap_list_lock): Moved to ...
1484         * engine.c (struct reap_s, reap_list, reap_list_lock): ... here.
1485         Include `time.h', `sys/types.h', `assert.h', and `sema.h'.
1486
1487         * rungpg.c (_gpgme_engine_add_child_to_reap_list): New function.
1488         (do_reaping, _gpgme_gpg_housecleaning): Moved to ...
1489         * engine.c (do_reaping, _gpgme_engine_housecleaning): ... here.
1490         * rungpg.c (_gpgme_gpg_release): Replace code that is now in its
1491         own function by call to _gpgme_engine_add_child_to_reap_list().
1492
1493         * wait.c: Include `engine.h'.
1494         (run_idle): Call _gpgme_engine_housecleaning(), not
1495         _gpgme_gpg_housecleaning().
1496         
1497 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
1498
1499         * key.c (_gpgme_key_append_name): Append, not prepend, the uid.
1500         Initialize the next field of the uid structure.
1501         (gpgme_key_get_as_xml): Do not list last uid first.
1502
1503 2001-12-17  Marcus Brinkmann  <marcus@g10code.de>
1504
1505         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New
1506         function [!ENABLE_GPGSM].
1507
1508 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1509
1510         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Put TEXT into
1511         message_data, not SIG.
1512         (_gpgme_gpgsm_op_sign): Use `--detached', not `--detach'.
1513
1514         * sign.c (sign_status_handler): Call
1515         _gpgme_passphrase_status_handler early.
1516
1517 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1518
1519         * engine-gpgsm.c: Revert last change.
1520
1521 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1522
1523         * engine-gpgsm.c (gpgsm_status_handler): Freeze the output file
1524         handler when ending this operation, otherwise the wait function
1525         will sit on it.
1526
1527 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1528
1529         * engine-gpgsm.c (struct gpgsm_object_s): New member colon.attic.
1530         (_gpgme_gpgsm_new): Initialize some more members.
1531         (_gpgme_gpgsm_release): Free the colon line handler's attic line.
1532         (gpgsm_status_handler): Rework the inline-data processing.
1533
1534 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
1535
1536         * rungpg.c (_gpgme_gpg_spawn): Do not add the fds to the child
1537         list that are not dup'ed, for those the close-on-exec flag is set
1538         now.
1539         * version.c (_gpgme_get_program_version): Remove first entry in
1540         CFD, as the close-on-exec flag is now set for this fd.
1541
1542 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
1543
1544         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): Do not add `armor'
1545         option to `ENCRYPT'.
1546         * engine-gpgsm.c (gpgsm_set_recipients): Free LINE when returning
1547         successfully.
1548
1549 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
1550
1551         * engine-gpgsm.c (close_notify_handler): New function.
1552         (_gpgme_gpgsm_new): Manage the file descriptors a
1553         bit differently.  Do not set close-on-exec flags.
1554         (_gpgme_gpgsm_op_decrypt): Do not set message_fd
1555         to -1, this is done by the close handler.
1556         (_gpgme_gpgsm_op_encrypt): Likewise.
1557         (_gpgme_gpgsm_op_import): Likewise (also for output_fd).
1558         (_gpgme_gpgsm_op_keylist): Likewise (also for input_fd and output_fd).
1559         (_gpgme_gpgsm_op_sign): Likewise.
1560         (_gpgme_gpgsm_op_verify): Likewise, but for output_fd.
1561
1562         * posix-io.c (_gpgme_io_pipe): Set the close-on-exec flag for the
1563         non-inherited file descriptor index of the pipe.
1564
1565 2001-12-13  Werner Koch  <wk@gnupg.org>
1566
1567         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New.
1568         (gpgsm_status_handler): Pass datalines to a colon handler
1569         * engine.c (_gpgme_engine_set_colon_line_handler): Set the colon
1570         handler for gpgsm.
1571
1572         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Allow NULL for
1573         pattern.
1574         (gpgsm_assuan_simple_command): Removed underscore from
1575         assuan_write_line.
1576         (_gpgme_gpgsm_start): Ditto.
1577         (gpgsm_assuan_simple_command): Replaced interal Assuan read
1578         function by the new assuan_read_line.  Removed the use of the
1579         internal header.
1580         (gpgsm_status_handler): Ditto. Use the new assuan_pending_line.
1581         (_gpgme_gpgsm_start): Use the documented way to get an fd from
1582         assuan.
1583
1584         * keylist.c (keylist_colon_handler): Handle "crt" records
1585         * key.h (gpgme_key_s): Add an x509 flag.
1586         * key.c (parse_x509_user_id): New.
1587         (_gpgme_key_append_name): Handle x.509 names.
1588
1589 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
1590
1591         * engine-gpgsm.c (gpgsm_status_handler): Make it work with current
1592         version of assuan.
1593
1594 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
1595
1596         * engine-gpgsm.c (gpgsm_set_fd): Accept one more argument OPT.
1597         (_gpgme_gpgsm_op_encrypt): Pass armor argument to gpgsm_set_fd for
1598         output descriptor.
1599         (_gpgme_gpgsm_op_sign): Likewise.
1600
1601 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
1602
1603         * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
1604         occurs.
1605
1606 2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
1607
1608         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
1609
1610 2001-11-24  Marcus Brinkmann  <marcus@g10code.de>
1611
1612         * engine-gpgsm.c (gpgsm_status_handler): Don't break if bsearch fails.
1613         Deal with assuan read line returning more than one line (for now).
1614
1615 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
1616
1617         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement it according to
1618         the current protocol definition.
1619
1620 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
1621
1622         * engine-gpgsm.c (_gpgme_gpgsm_new): Set CLOEXEC flag for parent
1623         ends of the pipe.
1624
1625 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1626
1627         * engine-gpgsm.c: Include stdlib.h and string.h.  Also include,
1628         for now, rungpg.h and status-table.h.
1629         (gpgsm_status_handler): Implement more of the status handler.
1630
1631 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1632
1633         * engine.c (_gpgme_engine_op_decrypt): Implement CMS case.
1634         (_gpgme_engine_op_delete): Likewise.
1635         (_gpgme_engine_op_encrypt): Likewise.
1636         (_gpgme_engine_op_export): Likewise.
1637         (_gpgme_engine_op_genkey): Likewise.
1638         (_gpgme_engine_op_keylist): Likewise.
1639         (_gpgme_engine_op_sign): Likewise.
1640         (_gpgme_engine_op_trustlist): Likewise.
1641
1642         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): New function.
1643         (gpgsm_assuan_simple_command): Likewise.
1644         (gpgsm_set_recipients): Likewise.
1645         (gpgsm_set_fd): Reimplement using gpgsm_assuan_simple_command.
1646         (_gpgme_gpgsm_op_delete): New function.
1647         (_gpgme_gpgsm_op_export): Likewise.
1648         (_gpgme_gpgsm_op_genkey): Likewise.
1649         (_gpgme_gpgsm_op_sign): Likewise.
1650         (_gpgme_gpgsm_op_keylist): Likewise.
1651         (_gpgme_gpgsm_op_trustlist): Likewise.
1652         (_gpgme_gpgsm_release): Release command.
1653         (_gpgme_gpgsm_op_decrypt): Allocate command.
1654         (_gpgme_gpgsm_op_import): Likewise.
1655         (gpgsm_status_handler): Also treat `ERR' strings as EOF.
1656
1657 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1658
1659         * gpgme.h (gpgme_set_protocol): New prototype.
1660
1661 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1662
1663         * engine-gpgsm.c (_gpgme_gpgsm_op_decrypt): New function.
1664         (_gpgme_gpgsm_op_import): Likewise.
1665
1666 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1667
1668         * engine-gpgsm.c: Shuffle around header inclusion a bit, to still
1669         keep them seperate.
1670         (_gpgme_set_status_handler) [!ENABLE_GPGSM]: New function.
1671
1672 2001-11-22  Werner Koch  <wk@gnupg.org>
1673
1674         * engine-gpgsm.c: Include more headers so that NULL and mk_error
1675         is defined even with an undefined GPGSM_PATH.
1676
1677 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1678
1679         * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
1680         gpg_outbound_handler): Moved to ...
1681         * data.c (_gpgme_data_inbound_handler, write_mem_data,
1682         write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
1683         _gpgme_* ones non-static.
1684         * data.c: Include io.h.
1685
1686         * ops.h (_gpgme_data_inbound_handler): New prototype.
1687         (_gpgme_data_outbound_handler): Likewise.
1688         (_gpgme_gpg_spawn): Use these new functions.
1689
1690         * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
1691         _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
1692         _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
1693         _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
1694         _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
1695         _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
1696         Include <rungpg.h> for status handler function.
1697
1698         * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
1699         input_data, output_fd, output_data, message_fd, message_data, command
1700         and status.
1701         (_gpgme_gpgsm_new): Open input, output and message pipes before
1702         connecting to the client.  Close server's ends afterwards.
1703         (_gpgme_gpgsm_release): Close open file descriptors.  Remove
1704         server process from wait queue.
1705         (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
1706         _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
1707         
1708         * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
1709         (_gpgme_engine_set_status_handler): Likewise.
1710         (_gpgme_engine_op_verify): Likewise.
1711
1712 2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
1713
1714         * context.h: Do not include rungpg.h, but engine.h.
1715         (struct gpgme_context_s): Replace member gpg with engine.
1716         * gpgme.c (gpgme_release): Release engine, not gpg.
1717
1718         * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
1719         moved ...
1720         * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
1721         Make static, change order of arguments, and return an error value.
1722         * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
1723
1724         * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
1725         (_gpgme_gpg_op_encrypt): Likewise.
1726         (_gpgme_gpg_op_decrypt): Likewise.
1727         (_gpgme_gpg_op_delete): Likewise.
1728         (_gpgme_gpg_op_export): Likewise.
1729         (_gpgme_gpg_op_genkey): Likewise.
1730         (_gpgme_gpg_op_import): Likewise.
1731         (_gpgme_gpg_op_keylist): Likewise.
1732         (_gpgme_gpg_op_sign): Likewise.
1733         (_gpgme_gpg_op_trustlist): Likewise.
1734         * rungpg.c (_gpgme_gpg_op_verify): New function.
1735         (_gpgme_gpg_op_encrypt): Likewise.
1736         (_gpgme_gpg_op_decrypt): Likewise.
1737         (_gpgme_gpg_op_delete): Likewise.
1738         (_gpgme_gpg_op_export): Likewise.
1739         (_gpgme_gpg_op_genkey): Likewise.
1740         (_gpgme_gpg_op_import): Likewise.
1741         (_gpgme_gpg_op_keylist): Likewise.
1742         (_gpgme_gpg_op_sign): Likewise.
1743         (_gpgme_gpg_op_trustlist): Likewise.
1744
1745         * engine.h (_gpgme_engine_set_status_handler): Add prototype.
1746         (_gpgme_engine_set_command_handler): Likewise.
1747         (_gpgme_engine_set_colon_line_handler): Likewise.
1748         (_gpgme_engine_op_decrypt): Likewise.
1749         (_gpgme_engine_op_delete): Likewise.
1750         (_gpgme_engine_op_encrypt): Likewise.
1751         (_gpgme_engine_op_export): Likewise.
1752         (_gpgme_engine_op_genkey): Likewise.
1753         (_gpgme_engine_op_import): Likewise.
1754         (_gpgme_engine_op_keylist): Likewise.
1755         (_gpgme_engine_op_sign): Likewise.
1756         (_gpgme_engine_op_trustlist): Likewise.
1757         (_gpgme_engine_op_verify): Likewise.
1758         (_gpgme_engine_start): Likewise.
1759         * engine.c (_gpgme_engine_set_status_handler): New function.
1760         (_gpgme_engine_set_command_handler): Likewise.
1761         (_gpgme_engine_set_colon_line_handler): Likewise.
1762         (_gpgme_engine_op_decrypt): Likewise.
1763         (_gpgme_engine_op_delete): Likewise.
1764         (_gpgme_engine_op_encrypt): Likewise.
1765         (_gpgme_engine_op_export): Likewise.
1766         (_gpgme_engine_op_genkey): Likewise.
1767         (_gpgme_engine_op_import): Likewise.
1768         (_gpgme_engine_op_keylist): Likewise.
1769         (_gpgme_engine_op_sign): Likewise.
1770         (_gpgme_engine_op_trustlist): Likewise.
1771         (_gpgme_engine_op_verify): Likewise.
1772         (_gpgme_engine_start): Likewise.
1773
1774         * verify.c (gpgme_op_verify_start): Reimplement in terms of above
1775         functions.
1776         * encrypt.c (gpgme_op_encrypt_start): Likewise.
1777         * decrypt.c (_gpgme_decrypt_start): Likewise.
1778         * passphrase.c (_gpgme_passphrase_start): Likewise.
1779         * keylist.c (gpgme_op_keylist_start): Likewise.
1780
1781 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
1782
1783         * types.h: Add types EngineObject and GpgsmObject.
1784
1785         * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
1786         engine-gpgsm.c, engine.h and engine.c.
1787         * engine.h: New file.
1788         * engine.c: Likewise.
1789         * engine-gpgsm.h: Likewise.
1790         * engine-gpgsm.c: Likewise.
1791         
1792         * rungpg.c (_gpgme_gpg_get_version): New function.
1793         (_gpgme_gpg_check_version): Likewise.
1794         * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
1795         _gpgme_gpg_check_version.
1796
1797         * version.c (compare_versions): Rename to ...
1798         (_gpgme_compare_versions): ... this.  Make non-static.
1799         (gpgme_check_version): Use _gpgme_compare_versions rather than
1800         compare_versions.
1801         (gpgme_check_engine): Likewise.
1802         * ops.h (_gpgme_get_program_version): Add prototype.
1803
1804 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
1805
1806         * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
1807         (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
1808         (libgpgme_la_LIBADD): Likewise.
1809
1810 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
1811
1812         * version.c: Remove global variables lineno and
1813         tmp_engine_version.
1814         (version_handler): Removed.
1815         (_gpgme_get_program_version): New function.
1816         (get_engine_info): Don't use context and version_handler,
1817         but _gpgme_get_program_version.
1818         * ops.h (_gpgme_get_program_version): Add prototype for
1819         _gpgme_get_program_version (we expect to use it elsewhere soon).
1820
1821 2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
1822
1823         * version.c (get_engine_info): If GnuPG is not available, return
1824         an error message.
1825         * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
1826         undefined.
1827         (_gpgme_get_gpgsm_path): New function.
1828         * w32-util.c (find_program_in_registry): New static function.
1829         (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
1830         to use find_program_in_registry.
1831         (_gpgme_get_gpgsm_path): New function.
1832         (util.h): Prototype _gpgme_get_gpgsm_path).
1833         * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
1834         returns non-null.
1835
1836 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
1837
1838         * decrypt-verify.c: New file.
1839         * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
1840         * types.h: Add decrypt-verify types.
1841         * ops.h: Likewise.
1842         * context.h: Add result type for decrypt-verify.
1843         * gpgme.h: Add decrypt-verify prototypes.
1844
1845         * decrypt.c (decrypt_status_handler): Renamed to ...
1846         (_gpgme_decrypt_status_handler): ... this.  Make non-static.
1847         (_gpgme_decrypt_start): New function, derived from
1848         gpgme_op_decrypt_start.
1849         (gpgme_op_decrypt_start): Reimplement in terms of
1850         _gpgme_decrypt_start.
1851         (_gpgme_decrypt_result): New function to retrieve error value.
1852         (gpgme_op_decrypt): Use _gpgme_decrypt_result.
1853         * ops.h: Add prototypes for new functions.
1854
1855         * verify.c (verify_status_handler): Renamed to ...
1856         (_gpgme_verify_status_handler): ... this.  Make non-static.
1857         (gpgme_op_verify_start): Use new function name.
1858         (intersect_stati): Renamed to ...
1859         (_gpgme_intersect_stati): ... this.  Make non-static.
1860         (gpgme_op_verify): Use new name.
1861         * ops.h: Add prototypes for new functions.
1862
1863 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
1864
1865         * passphrase.c: New file.
1866         * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
1867         * ops.h (_gpgme_passphrase_result): Add prototypes from
1868         passphrase.c.
1869         * types.h: Likewise.
1870         * context.h: Add member passphrase to result.
1871         * gpgme.c (_gpgme_release_result): Release passphrase member.
1872
1873         * decrypt.c: Some formatting and variable name changes (like
1874         CTX instead C).
1875         (struct decrypt_result_s): Remove members now found in
1876         passphrase result.
1877         (_gpgme_release_decrypt_result): Don't release removed members.
1878         (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
1879         and don't handle the cases catched there.
1880         (command_handler): Removed.
1881         (gpgme_op_decrypt_start): Don't set command handler, but invoke
1882         _gpgme_passphrase_start which does it.
1883         (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
1884         cases covered by it.
1885
1886         * sign.c Some formatting and variable name changes (like
1887         CTX instead C).
1888         (struct sign_result_s): Remove members now found in
1889         passphrase result.
1890         (_gpgme_release_sign_result): Don't release removed members.
1891         (sign_status_handler): Call _gpgme_passphrase_status_handler,
1892         and don't handle the cases catched there.
1893         (command_handler): Removed.
1894         (gpgme_op_sign_start): Don't set command handler, but invoke
1895         _gpgme_passphrase_start which does it.
1896         (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
1897         cases covered by it.
1898
1899 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
1900
1901         * decrypt.c (command_handler): Fix last change.
1902
1903 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
1904
1905         * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
1906         Rename R2 to NEXT_RESULT.
1907         (intersect_stati): Rename RES to RESULT.
1908         (gpgme_get_sig_status): Likewise.  Do not check return_type, but
1909         the member verify of result.
1910         (gpgme_get_sig_key): Likewise.
1911
1912         * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
1913         RESULT is zero, return.
1914         (sign_status_handler, command_handler): Do not check return_type,
1915         but the member sign of result.
1916         (gpgme_op_sign): Likewise.  Drop assertion.
1917
1918         * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
1919         If RESULT is zero, return.
1920         (encrypt_status_handler): Do not check return_type, but the member
1921         encrypt of result.
1922         (gpgme_op_encrypt): Likewise.  Drop assertion.
1923
1924         * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
1925         (create_result_struct): Do not set result_type.
1926         (command_handler, decrypt_status_handler): Do not check
1927         return_type, but the member decrypt of result.
1928         (gpgme_op_decrypt): Likewise.  Drop assertion.
1929
1930         * context.h (enum ResultType): Removed.
1931         (struct gpgme_context_s): Remove member result_type.
1932         (struct result): Replaces union result.
1933         * gpgme.c: Include string.h.
1934         (_gpgme_release_result): Release all members of c->result, which
1935         is now a struct.  Zero out all members of the struct afterwards.
1936
1937 2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
1938
1939         * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
1940         Release all members of the list GPG->arglist.
1941         Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
1942
1943 2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
1944
1945         * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
1946
1947         * key.c: Include string.h.
1948         * data.c: Likewise.
1949         * recipient.c: Likewise.
1950
1951 2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
1952
1953         * context.h: New member signers_len.
1954         * signers.c (gpgme_signers_clear): Require that signers are
1955         non-NULL with assertion.  Use signers_len to determine how much
1956         keys to release.  Add documentation.
1957         (gpgme_signers_add): Use signers_len to determine if the buffer is
1958         large enough.  Use xtryrealloc rather than xtrymalloc and copying.
1959         Add documentation.
1960         (gpgme_signers_enum): Use signers_len to determine if key is
1961         available.  Add documentation.
1962
1963 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
1964
1965         * data.c (_gpgme_data_append): Check if LENGTH is smaller than
1966         ALLOC_CHUNK, not DH->length.
1967
1968 2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
1969
1970         * gpgme.c (gpgme_set_protocol): Fix last change.
1971
1972 2001-10-15  Werner Koch  <wk@gnupg.org>
1973
1974         * gpgme.h (GpgmeProtocol): New.
1975         * gpgme.c (gpgme_set_protocol): New.
1976
1977 2001-09-26  Werner Koch  <wk@gnupg.org>
1978
1979         * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
1980         (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
1981
1982 2001-09-17  Werner Koch  <wk@gnupg.org>
1983
1984         * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
1985         callers to use this function without a check for tmp_key.
1986         
1987         * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
1988         emptying the queue.  Bug reported by Stéphane Corthésy.
1989
1990 2001-09-12  Werner Koch  <wk@gnupg.org>
1991
1992         * data.c (gpgme_data_rewind): Allow rewind for callbacks.
1993
1994 2001-09-07  Werner Koch  <wk@gnupg.org>
1995
1996         * rungpg.h: Add NO_RECP.
1997         * encrypt.c (encrypt_status_handler): Take on No_RECP.
1998         (gpgme_op_encrypt): Better error return.
1999
2000         * verify.c (verify_status_handler): Take on NODATA.
2001
2002 2001-09-03  Werner Koch  <wk@gnupg.org>
2003
2004         * rungpg.h: Added STATUS_INV_RECP.
2005         * gpgme.c (_gpgme_release_result): Add support for new
2006         EncryptResult object.
2007         * encrypt.c (append_xml_encinfo): New.
2008         (encrypt_status_handler): Add some status parsing.
2009         (_gpgme_release_encrypt_result): New.
2010
2011 2001-08-29  Werner Koch  <wk@gnupg.org>
2012
2013         * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
2014
2015         * keylist.c (keylist_colon_handler): Do a finish key if we receive
2016         an EOF here.  This is probably the reason for a lot of bugs
2017         related to keylisting.  It is so obvious.  Kudos to Enno Cramer
2018         for pointing that out. 
2019
2020 2001-08-28  Werner Koch  <wk@gnupg.org>
2021
2022         * gpgme.c, gpgme.h (gpgme_get_op_info): New.
2023         (_gpgme_set_op_info): New. 
2024         (_gpgme_release_result): Reset the op_info here.
2025         * sign.c (append_xml_siginfo): New.
2026         (sign_status_handler): Store the sig create information.
2027
2028 2001-07-31  Werner Koch  <wk@gnupg.org>
2029
2030         * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
2031
2032 2001-07-30  Werner Koch  <wk@gnupg.org>
2033
2034         * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
2035
2036         * rungpg.c (build_argv): Disable armor comments
2037         * w32-io.c (build_commandline): Need to add quotes here
2038
2039 2001-07-24  Werner Koch  <wk@gnupg.org>
2040
2041         * data.c (gpgme_data_read): Add a a way to return the available bytes.
2042
2043 2001-07-23  Werner Koch  <wk@gnupg.org>
2044
2045         * util.c: Removed stpcpy() because we use the version from jnlib.
2046
2047 2001-07-19  Werner Koch  <wk@gnupg.org>
2048
2049         * mkstatus: Define the collating sequence for sort.
2050
2051 2001-06-26  Werner Koch  <wk@gnupg.org>
2052
2053         * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
2054
2055 2001-06-15  Werner Koch  <wk@gnupg.org>
2056
2057         * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
2058         to Timo for pointing this out.
2059
2060 2001-06-01  Werner Koch  <wk@gnupg.org>
2061
2062         * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
2063         Johannes Poehlmann.
2064
2065 2001-05-28  Werner Koch  <wk@gnupg.org>
2066
2067         * version.c (gpgme_check_engine): Stop version number parsing at
2068         the opening angle and not the closing one.  By Tommy Reynolds.
2069
2070 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
2071
2072         * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
2073         line, because it gave an error if another operation had been made 
2074         before using the same context.
2075         
2076         * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
2077         one line to release the gpg object in the context (if any).
2078         
2079 2001-04-26  Werner Koch  <wk@gnupg.org>
2080
2081         * key.c, key.h (_gpgme_key_cache_init): New.
2082         (_gpgme_key_cache_add): New.
2083         (_gpgme_key_cache_get): New.
2084         * version.c (do_subsystem_inits): Init the cache.
2085         * keylist.c (finish_key): Put key into the cache
2086         * verify.c (gpgme_get_sig_key): First look into the cache.
2087
2088 2001-04-19  Werner Koch  <wk@gnupg.org>
2089
2090         * keylist.c (parse_timestamp): Adjusted for the changed
2091         --fixed-list-mode of gpg 1.0.4h.
2092
2093 2001-04-05  Werner Koch  <wk@gnupg.org>
2094
2095         * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
2096
2097 2001-04-04  Werner Koch  <wk@gnupg.org>
2098
2099         * w32-io.c (_gpgme_io_select): Don't select on the writer if there
2100         are still bytes pending.  Timo found this not easy to track down
2101         race condition. 
2102
2103 2001-04-02  Werner Koch  <wk@gnupg.org>
2104
2105         * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
2106         * key.c (gpgme_key_get_ulong_attr): And return those attribs.
2107
2108         * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
2109         the mode set in the current context.  Suggested by Timo.
2110
2111         * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
2112         can_encrypt. By Timo.
2113
2114 2001-03-30  Werner Koch  <wk@gnupg.org>
2115
2116         * debug.c (debug_init): Allow to specify a debug file.
2117         (_gpgme_debug_level): New.
2118
2119         * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
2120         (_gpgme_io_select): Debug only with level > 2.
2121
2122 2001-03-15  Werner Koch  <wk@gnupg.org>
2123
2124         * rungpg.c: Included time.h.
2125
2126         * key.h: New keyflags for capabilities.
2127         * keylist.c (set_mainkey_capability, set_subkey_capability): New.
2128         (keylist_colon_handler): Parse them.
2129         * gpgme.h: New attribute values for capabilties.
2130         * key.c (gpgme_key_get_string_attr): Return them.
2131         (capabilities_to_string): New.
2132         (gpgme_key_get_ulong_attr): Return the global caps.
2133
2134 2001-03-14  Werner Koch  <wk@gnupg.org>
2135
2136         * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
2137         Thanks to Jan Oliver Wagner.
2138
2139 2001-03-13  Werner Koch  <wk@gnupg.org>
2140
2141         * context.h: Add invalid and revoke flags to user_id structure.
2142         * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
2143         (keylist_colon_handler): Adjust for that.
2144         (set_userid_flags): New. 
2145         (set_mainkey_trust_info): Handle new key invalid flag
2146         (set_subkey_trust_info): Ditto.
2147         * gpgme.h: Add new attributes for key and user ID flags.
2148         * key.c (_gpgme_key_append_name): Init these flags
2149         (gpgme_key_get_as_xml): Print them.
2150         (one_uid_as_xml): New helper for above.
2151         (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
2152         Return the new attributes.  Enhanced, so that subkey information
2153         can be returned now.
2154
2155 2001-02-28  Werner Koch  <wk@gnupg.org>
2156
2157         * w32-io.c (destroy_reader): Set stop_me flag.
2158         (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
2159         (_gpgme_io_write): Use a writer thread to avaoid blocking.
2160         (_gpgme_io_close): Cleanup a writer thread
2161         (_gpgme_io_select): Repalce tthe faked wait on writing by a real
2162         waiting which is now possible due to the use of a writer thread.
2163
2164 2001-02-20  Werner Koch  <wk@gnupg.org>
2165
2166         * w32-io.c (destroy_reader,kill_reader): New. 
2167         (create_reader, reader): Add a new event to stop the thread.
2168         (_gpgme_io_close): Kill the reader thread.
2169
2170         * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
2171         * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
2172
2173         * wait.c: Reworked the whole thing.
2174         * rungpg.c (_gpgme_gpg_new): Init pid to -1.
2175         (_gpgme_gpg_release): Remove the process from the wait queue.
2176
2177 2001-02-19  Werner Koch  <wk@gnupg.org>
2178
2179         * w32-io.c (_gpgme_io_set_close_notify): New.
2180         (_gpgme_io_close): Do the notification.
2181
2182         * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
2183         microseconds.
2184
2185         * wait.c (remove_process): Don't close the fd here.
2186         (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
2187         (_gpgme_wait_on_condition): Remove the assert on the queue and
2188         break out if we could not find the queue.  The whole thing should
2189         be reworked.
2190
2191         * posix-io.c (_gpgme_io_set_close_notify): New.
2192         (_gpgme_io_close): Do the notification.
2193
2194         * rungpg.c (close_notify_handler): New. 
2195         (_gpgme_gpg_new): Register a callback for the fd.
2196         (_gpgme_gpg_set_colon_line_handler): Ditto.
2197         (build_argv): Ditto
2198
2199 2001-02-13  Werner Koch  <wk@gnupg.org>
2200
2201         * rungpg.c (struct reap_s): Replaced pid_t by int.
2202
2203         * types.h: Add ulong typedef.
2204
2205         * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
2206         (_gpgme_gpg_release): Reap children.
2207         * io.h, posix-io.c (_gpgme_io_kill): New.
2208         * w32-io.c (_gpgme_io_kill): New (dummy).
2209
2210         * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
2211
2212         * posix-io.c (_gpgme_io_read): Add some debug output. 
2213         (_gpgme_io_write): Ditto.
2214         (_gpgme_io_select): Increased the timeout.
2215
2216 2001-02-12  Werner Koch  <wk@gnupg.org>
2217
2218         Enhanced the signature verification, so that it can how handle
2219         more than one signature and is able to return more information on 
2220         the signatures.
2221         * verify.c (gpgme_get_sig_key): New.
2222         (gpgme_get_sig_status): New.
2223
2224         * gpgme.h: Add stdio.h. 
2225         (GpgmeSigStat): New status DIFF.
2226
2227 2001-02-01  Werner Koch  <wk@gnupg.org>
2228
2229         * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
2230         code to all Set/ResetEvent().
2231
2232         * rungpg.c (read_status): Check for end of stream only if we have
2233         an r.  By Timo.
2234
2235 2001-01-31  Werner Koch  <wk@gnupg.org>
2236
2237         * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
2238         (propagate_term_results,clear_active_fds): Removed.
2239         (count_active_fds): Renamed to .. 
2240         (count_active_and_thawed_fds): .. this and count only thawed fds. 
2241
2242         * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
2243         status.eof ;-)
2244
2245 2001-01-30  Werner Koch  <wk@gnupg.org>
2246
2247         * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.
2248
2249         * version.c (get_engine_info): Return better error information.
2250
2251         * posix-util.c, w32-util.c: New.
2252         (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
2253         * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.
2254
2255         * signers.c (gpgme_signers_add): Ooops, one should test code and
2256         not just write it; the newarr was not assigned.  Thanks to José
2257         for pointing this out.  Hmmm, still not tested, why shoudl a coder
2258         test his fix :-)
2259
2260         * w32-io.c: Does now use reader threads, so that we can use
2261         WaitForMultipleObjects. 
2262         * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
2263         Does currently only work for W32.
2264
2265         * debug.c, util.h : New. Changed all fprintfs to use this new
2266         set of debugging functions.
2267
2268 2001-01-23  Werner Koch  <wk@gnupg.org>
2269
2270         * data.c (_gpgme_data_release_and_return_string): Fixed string
2271         termination.
2272
2273 2001-01-22  Werner Koch  <wk@gnupg.org>
2274
2275         * delete.c: New.
2276
2277         * signers.c: New.
2278         * key.c (gpgme_key_ref, gpgme_key_unref): New.
2279         * sign.c (gpgme_op_sign_start): Allow the use of other keys.
2280
2281         * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
2282         * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.
2283
2284 2001-01-05  Werner Koch  <wk@gnupg.org>
2285
2286         * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
2287
2288
2289  Copyright 2001, 2002 g10 Code GmbH
2290
2291  This file is free software; as a special exception the author gives
2292  unlimited permission to copy and/or distribute it, with or without
2293  modifications, as long as this notice is preserved.
2294
2295  This file is distributed in the hope that it will be useful, but
2296  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
2297  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2298