C++ fixes
[gpgme.git] / gpgme / ChangeLog
1 2003-12-22  Werner Koch  <wk@gnupg.org>
2
3         * gpgme.h (_GPGME_D_CLASS): Kludge for C++ compatibility without
4         changing the C API.
5
6 2003-11-19  Werner Koch  <wk@gnupg.org>
7
8         * conversion.c (_gpgme_parse_timestamp): New.
9         (atoi_1, atoi_2, atoi_4): New.
10         * keylist.c (parse_timestamp): Removed. Changed all callers to use
11         the new function.
12         * verify.c (parse_valid_sig): Ditto.  Repalced the errno check.
13         * sign.c (parse_sig_created): Ditto.
14
15 2003-10-31  Werner Koch  <wk@gnupg.org>
16
17         * keylist.c (parse_timestamp): Detect ISO 8601 timestamps and try
18         to convert them.
19
20 2003-10-10  Marcus Brinkmann  <marcus@g10code.de>
21
22         * genkey.c (get_key_parameter): Make a copy of the key parameters.
23         Submitted by Miguel Coca <e970095@zipi.fi.upm.es>.
24
25 2003-10-06  Marcus Brinkmann  <marcus@g10code.de>
26
27         * data-compat.c: Include <sys/time.h> before <sys/stat.h> for
28         broken systems.
29
30         * engine-gpgsm.c (map_assuan_error): If ERR is -1, return sensible
31         error.
32
33         * io.h (_gpgme_io_subsystem_init): New prototype.
34         * posix-io.c (_gpgme_io_subsystem_init): Add function.
35         (_gpgme_io_spawn): Do not fixup signal handler here.
36         * version.c (do_subsystem_inits): Call _gpgme_io_subsystem_init.
37
38         * debug.c (debug_init): Drop const qualifier from E.
39
40         * ath.h (struct ath_ops): Make ADDR argument of CONNECT prototype
41         const.
42         (ath_connect): Make ADDR argument const.
43         * ath-pthread.c (ath_connect): Likewise.
44         * ath-pth.c (ath_connect): Likewise.
45         * ath-compat.c (ath_connect): Likewise.
46         * ath.c (ath_connect): Likewise.
47
48         * ath.h [HAVE_SYS_SELECT_H]: Include <sys/select.h> for fd_set.
49         [!HAVE_SYS_SELECT_H]: Include <sys/time.h>.
50
51         * conversion.c (_gpgme_hextobyte): Drop "unsigned" from type of
52         SRC argument.
53         * util.h (_gpgme_hextobyte): Likewise for prototype.
54
55         * gpgme.h: Remove trailing comma in enum.
56
57         * rungpg.c: Do not include <time.h>, <sys/time.h>, <sys/types.h>,
58         <signal.h>, <fcntl.h>, or "unistd.h".
59
60 2003-10-02  Marcus Brinkmann  <marcus@g10code.de>
61
62         * engine-backend.h (struct engine_ops): Add argument TYPE.
63         * engine.c (_gpgme_engine_op_edit): Likewise.
64         * engine.h: Likewise.
65         * rungpg.c (gpg_edit): Likewise.  Use it.
66         * edit.c (edit_start): Likewise.  Pass it on.
67         (gpgme_op_edit_start, gpgme_op_edit): Likewise.
68         (gpgme_op_card_edit_start, gpgme_op_card_edit): New functions.
69
70 2003-09-30  Marcus Brinkmann  <marcus@g10code.de>
71
72         * gpgme.h (gpg_strerror_r): Change prototype to match
73         gpg_strerror_r change.
74         * error.c (gpg_strerror_r): Likewise, also update implementation.
75
76         * gpgme.c (gpgme_hash_algo_name): Change name of RMD160 to
77         RIPEMD160, name of TIGER to TIGER192, name of CRC32-RFC1510 to
78         CRC32RFC1510, and name of CRC24-RFC2440 to CRC24RFC2440.
79
80 2003-09-14  Marcus Brinkmann  <marcus@g10code.de>
81
82         * gpgme.h: Add prototype for gpgme_set_locale.
83
84         * gpgme.h: Define macro _GPGME_INLINE depending on the compiler
85         characteristics and use that instead __inline__.
86
87         * context.h (struct gpgme_context): New members lc_ctype and
88         lc_messages.
89         * gpgme.c: Include <locale.h>.
90         (def_lc_lock, def_lc_ctype, def_lc_messages): New static
91         variables.
92         (gpgme_set_locale): New function.
93         * engine.c (_gpgme_engine_new): Add arguments lc_ctype and
94         lc_messages.
95         * engine.h (_gpgme_engine_new): Likewise.
96         * engine-gpgsm.c (gpgsm_new): Likewise.
97         * rungpg.c (gpg_new): Likewise.
98         * engine-backend.h (struct engine_ops): Likewise to NEW.
99         * op-support.c (_gpgme_op_reset): Likewise to invocation of
100         _gpgme_engine_new.
101
102 2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
103
104         * gpgme.h (gpgme_strerror_r): New prototype.
105         * error.c (gpgme_strerror_r): New function.
106
107         * get-env.c: New file.
108         * util.h (_gpgme_getenv): Add prototype.
109         * Makefile.am (libgpgme_real_la_SOURCES): Add get-env.c.
110         * rungpg.c (build_argv): Use _gpgme_getenv.
111         * debug.c (debug_init): Likewise.
112         * engine-gpgsm.c (gpgsm_new): Likewise.
113         (gpgsm_new): Use ttyname_r.
114         * w32-io.c (_gpgme_io_spawn): Disable debugging for now.
115
116 2003-09-03  Marcus Brinkmann  <marcus@g10code.de>
117
118         * gpgme-config.in: Use $libdir, not @libdir@, for the echo
119         command.
120
121         * gpgme-config.in: Rewritten.
122         * gpgme.m4: Rewritten.
123
124 2003-08-19  Marcus Brinkmann  <marcus@g10code.de>
125
126         The ath files (ath.h, ath.c, ath-pth.c, ath-pthread.c,
127         ath-compat.c, ath-pth-compat.c and ath-pthread-compat.c) have been
128         updated to have better thread support, and the Makefile.am was
129         changed to reflect that.
130
131         * util.h [!HAVE_FOPENCOOKIE]: Remove fopencookie declaration.
132         * engine-gpgsm.c (gpgsm_assuan_simple_command): Set ERR to return
133         value of status_fnc.
134         * rungpg.c (start): Return SAVED_ERRNO, not errno.
135
136 2003-08-18  Marcus Brinkmann  <marcus@g10code.de>
137
138         * rungpg.c (start): Use saved_errno instead errno.
139
140 2003-08-18  Marcus Brinkmann  <marcus@g10code.de>
141
142         * funopen.c, putc_unlocked.c, isascii.c, memrchr.c: New files.
143         * fopencookie.c: File removed.
144
145 2003-08-15  Marcus Brinkmann  <marcus@g10code.de>
146
147         * gpgme-config.in: Put gpg-error related flags after gpgme's.
148
149 2003-08-14  Marcus Brinkmann  <marcus@g10code.de>
150
151         * gpgme.h (struct _gpgme_new_signature): Rename member CLASS to
152         _OBSOLETE_CLASS, add member CLASS with type unsigned int.
153         * sign.c (parse_sig_created): Also set SIG->_unused_class for
154         backward compatibility.
155
156 2003-08-04  Marcus Brinkmann  <marcus@g10code.de>
157
158         * verify.c (parse_new_sig): Fix status parsing case.
159
160 2003-07-31  Marcus Brinkmann  <marcus@g10code.de>
161
162         * gpgme.h (struct _gpgme_subkey): Add flag CAN_AUTHENTICATE.
163         Lower _UNUSED to 23 bits.
164         (struct _gpgme_key): Likewise.
165         * keylist.c (set_mainkey_capability): Support 'a' and 'A'.
166         (set_subkey_capability): Support 'a'.
167
168         * keylist.c (gpgme_get_key): Check if there is more than one key
169         listed, and return GPG_ERR_AMBIGUOUS_NAME in that case.
170
171         * util.h (_gpgme_decode_c_string): Change type of LEN argument to
172         size_t.
173         (_gpgme_decode_percent_string): Likewise.
174         * conversion.c (_gpgme_decode_c_string): Likewise.
175         (_gpgme_decode_percent_string): Likewise.
176         (_gpgme_map_gnupg_error): Change type of I to unsigned int.
177         * signers.c (gpgme_signers_clear): Likewise.
178         (gpgme_signers_enum): New unsigned variable SEQNO, set to SEQ.
179         Use SEQNO instead SEQ.
180         * wait.c (fd_table_put): Change type of I and J to unsigned int.
181         * wait-global.c (_gpgme_wait_global_event_cb): Change type of IDX
182         to unsigned int.
183         (gpgme_wait): Change type of I and IDX to unsigned int.
184         * wait-private.c (_gpgme_wait_on_condition): Change type of IDX
185         and I to unsigned int.
186         * posix-io.c (_gpgme_io_close): Cast return value of macro DIM to
187         int to suppress gcc warning.
188         (_gpgme_io_set_close_notify): Likewise.
189         (_gpgme_io_select): Change type of I to unsigned int.
190         * engine.c (gpgme_get_engine_info): Change type of PROTO to
191         unsigned int.
192         * wait-user.c (_gpgme_user_io_cb_handler): Change type of IDX and
193         I to unsigned int.
194
195 2003-07-29  Marcus Brinkmann  <marcus@g10code.de>
196
197         * decrypt-verify.c (decrypt_verify_status_handler): Expand silly
198         and wrong expression.
199         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
200         * encrypt.c (encrypt_sym_status_handler): Likewise.
201         * sign.c (sign_status_handler): Likewise.
202         * verify.c (verify_status_handler): Likewise.
203         * decrypt.c (decrypt_status_handler): Likewise.
204
205         * engine.c (gpgme_get_engine_info): Initialize NULL.
206
207 2003-07-23  Marcus Brinkmann  <marcus@g10code.de>
208
209         * gpgme-config.in (gpg_error_libs): Quote GPG_ERROR_CFLAGS and
210         GPG_ERROR_LIBS when setting the corresponding variables.
211         Reported by Stéphane Corthésy.
212
213 2003-07-22  Marcus Brinkmann  <marcus@g10code.de>
214
215         * engine-gpgsm.c (set_recipients): Move declaration of NEWLEN to
216         the beginning of the block.
217
218 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
219
220         * data-mem.c (mem_write): Copy original buffer content.
221
222 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
223
224         * gpgme.h (gpgme_user_ids_release, gpgme_user_ids_append): Remove
225         prototypes.
226
227 2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
228
229         * Makefile.am (AM_CPPFLAGS): Add @GPG_ERROR_CFLAGS@.
230         * gpgme-config.in (gpg_error_libs, gpg_error_cflags): New variables.
231         Print them.
232
233         * op-support.c (_gpgme_parse_inv_userid): Rename to
234         _gpgme_parse_inv_recp and change to new datatype.
235         * ops.h (_gpgme_parse_inv_key): Fix prototype.
236         * gpgme.h (struct _gpgme_invalid_user_id): Rename to
237         __gpgme_invalid_key.  Rename field ID to KEY.
238         (gpgme_invalid_user_id_t): Rename to gpgme_invalid_key_t.
239         (struct _gpgme_op_encrypt_result): Here, too.
240         (struct _gpgme_op_sign_result): Likewise.
241         * encrypt.c (struct op_data): Likewise.
242         (release_op_data): Likewise.
243         * sign.c (struct op_data): Likewise.
244         (release_op_data): Likewise.
245
246         * posix-io.c (_gpgme_io_read): Save errno across debug calls.
247         (_gpgme_io_write): Likewise.
248         (_gpgme_io_pipe): Likewise.
249         (_gpgme_io_select): Likewise.
250
251         * rungpg.c (struct engine_gpg): Remove arg_error.
252         (add_arg): Don't set arg_error.
253         (add_data): Likewise.
254         (start): Don't check arg_error.
255         (gpg_new): Check return value of add_arg.
256         * verify.c (parse_notation): Free allocated memory at error.
257
258 2003-06-05  Marcus Brinkmann  <marcus@g10code.de>
259
260         Everywhere: Use libgpg-error error codes.
261
262         * Makefile.am (EXTRA_DIST): Remove mkerrors.
263         (BUILT_SOURCES): Remove errors.c.
264         (MOSTLYCLEANFILES): Likewise.
265         (libgpgme_la_SOURCES): Likewise.  Add error.c.
266         (errors.c): Remove target.
267         * mkerrors: File removed.
268         * error.c: New file.
269
270         * gpgme.h (gpgme_error_t): Change to type gpg_error_t.
271         (gpgme_err_code_t, gpgme_err_source_t): New types.
272         (gpgme_err_code, gpgme_err_source, gpgme_error, gpgme_err_make):
273         New static inline functions.
274         (gpgme_strsource, gpgme_err_code_from_errno,
275         gpgme_err_code_to_errno, gpgme_err_make_from_errno,
276         gpgme_error_from_errno): New prototypes.
277
278 2003-05-29  Marcus Brinkmann  <marcus@g10code.de>
279
280         * gpgme.h (gpgme_op_export_start): Change second arg to const char *.
281         (gpgme_op_export): Likewise.
282         (gpgme_op_export_ext_start): New prototype.
283         (gpgme_op_export_ext): Likewise.
284         * engine.h: Likewise for _gpgme_engine_op_export and
285         _gpgme_engine_op_export_ext.
286         * engine-backend.h (struct engine_ops): Change second argument of
287         prototype of export to const char *, and add reserverd int as
288         third argument.  Add prototype for export_ext.
289         * engine.c (_gpgme_engine_op_export_ext): New function.
290         (_gpgme_engine_op_export): Change second argument of prototype of
291         export to const char *, and add reserverd int as third argument.
292         * rungpg.c (gpg_export): Change second argument of prototype of
293         export to const char *, and add reserverd int as third argument.
294         (gpg_export_ext): New function.
295         (gpg_keylist_ext): Break loop at error.
296         (_gpgme_engine_ops_gpg): Add gpg_export_ext.
297         * engine-gpgsm.c (gpgsm_export): Change second argument of
298         prototype of export to const char *, and add reserverd int as
299         third argument.
300         (gpgsm_export_ext): New function.
301         (_gpgme_engine_ops_gpgsm): Add gpgsm_export_ext.
302         * export.c (export_start): Change second argument of prototype of
303         export to const char *, and add reserverd int as third argument.
304         (gpgme_op_export_start): Likewise.
305         (export_ext_start): New function.
306         (gpgme_op_export_ext_start): Likewise.
307         (gpgme_op_export_ext): Likewise.
308
309         * gpgme.h (gpgme_keylist_mode_t): New type for anonymous enum.
310         (gpgme_sigsum_t): New type for anonymous enum.
311
312         * encrypt-sign.c (encrypt_sign_start): Check for errors earlier,
313         and return an error if RECP is not set.
314
315         * Makefile.am (libgpgme_la_SOURCES): Remove user-id.c.
316         * user-id.c: Remove file.
317         * ops.h: Remove prototype for _gpgme_user_ids_all_valid.
318         * gpgme.h (gpgme_encrypt_flags_t): New type.
319         (gpgme_op_encrypt_start): Change second parameter to type
320         gpgme_key_t[], and add third parameter.
321         (gpgme_op_encrypt): Likewise.
322         (gpgme_op_encrypt_sign_start): Likewise.
323         (gpgme_op_encrypt_sign): Likewise.
324         * encrypt.c (encrypt_start): Likewise.
325         (gpgme_op_encrypt_start): Likewise.
326         (gpgme_op_encrypt): Likewise.  Pass flags to engine.
327         * encrypt-sign.c (encrypt_sign_start): Likewise.
328         (gpgme_op_encrypt_sign_start): Likewise.
329         (gpgme_op_encrypt_sign): Likewise.
330         * engine-backend.h (struct engine_ops): Likewise for prototypes of
331         encrypt and encrypt_sign.
332         * engine.h: Likewise for prototypes of _gpgme_engine_op_encrypt
333         and _gpgme_engine_op_encrypt_sign.
334         * engine.c (_gpgme_engine_op_encrypt): Likewise.
335         (_gpgme_engine_op_encrypt_sign): Likewise.
336         * rungpg.c (gpg_encrypt): Likewise.
337         (gpg_encrypt_sign): Likewise.
338         * rungpg.c (gpg_encrypt): Check flags for always trust option.
339         * engine-gpgsm.c (gpgsm_encrypt): Likewise.
340         (set_recipients): Rewritten to use keys instead user IDs.
341         * rungpg.c (append_args_from_recipients): Rewritten to use keys
342         instead user IDs.
343         * encrypt.c (_gpgme_encrypt_status_handler): Change errors
344         returned to GPGME_Invalid_Key and GPGME_General_Error.
345
346 2003-05-28  Marcus Brinkmann  <marcus@g10code.de>
347
348         * engine-gpgsm.c: Rename GpgsmObject to engine_gpgsm_t.
349         (struct gpgsm_object_s): Rename to struct engine_gpgsm.
350         * rungpg.c: Rename GpgObject to engine_gpg_t.
351         (struct gpg_object_s): Rename to struct engine_gpg.
352
353         * context.h (struct gpgme_context): Change EngineObject to
354         engine_object_t.
355         (enum ctx_op_data_type): Rename to ctx_op_data_id_t.
356         (ctx_op_data_t): New type.
357         (struct gpgme_context): Use it.
358         * ops.h (_gpgme_op_data_lookup): Use new type name.
359         * op-support.c (_gpgme_op_data_lookup): Likewise.
360         * engine.c: Rename EngineObject to engine_t in the file.  Also
361         EngineStatusHandler to engine_status_handler_t,
362         EngineCommandHandler to engine_command_handler_t and
363         EngineColonLineHandler to engine_colon_line_handler.    
364         * rungpg.c (start): Likewise.
365         * engine-gpgsm.c: Likewise.
366         * engine-backend.h (struct engine_ops): Likewise
367         * engine.h (struct engine_object_s): Rename to struct engine.
368         (EngineObject): Rename to engine_t.  Also everywhere else in the
369         file.
370         (EngineStatusHandler): Rename to engine_status_handler_t.
371         (EngineColonLineHandler): Rename to engine_colon_line_handler_t.
372         (EngineCommandHandler): Rename to engine_command_handler_t.
373
374         * engine-gpgsm.c (gpgsm_export): Fix bug in last change.
375
376         * Makefile.am (libgpgme_la_SOURCES): Remove recipient.c, add
377         user-id.c.
378         * gpgme.h (gpgme_recipients_t): Removed.
379         (gpgme_recipients_new, gpgme_recipients_release,
380         gpgme_recipients_add_name,
381         gpgme_recipients_add_name_with_validity, gpgme_recipients_count,
382         gpgme_recipients_enum_open, gpgme_recipients_enum_read,
383         gpgme_recipients_enum_close): Removed.
384         (gpgme_op_encrypt, gpgme_op_encrypt_start, gpgme_op_encrypt_sign,
385         gpgme_op_encrypt_sign_start, gpgme_op_export_start,
386         gpgme_op_export): Change second argument to gpgme_user_id_t.
387         (gpgme_user_ids_release): New prototype.
388         (gpgme_user_ids_append): Likewise.
389         * ops.h (_gpgme_recipients_all_valid): Remove.
390         (_gpgme_user_ids_all_valid): Add.
391         * context.h (struct gpgme_recipients): Removed.
392         * user-id.c: New file.
393         * recipient.c: Removed file.
394         * rungpg.c (append_args_from_recipients): Change last arg to
395         gpgme_user_id_t.  Reimplement.
396         (gpg_encrypt): Change second arg to gpgme_user_id_t.
397         (gpg_encrypt_sign): Likewise.
398         (gpg_export): Likewise.  Rewrite user ID list code.
399         * engine.c (_gpgme_engine_op_encrypt): Change second arg to
400         gpgme_user_id_t.
401         (_gpgme_engine_op_encrypt_sign): Likewise.
402         (_gpgme_engine_op_export): Likewise.
403         * engine.h (_gpgme_engine_op_encrypt, _gpgme_engine_op_encrypt_sign,
404         _gpgme_engine_op_export): Likewise.
405         * engine-gpgsm.c (set_recipients): Likewise.  Rewrite loop code.
406         (gpgsm_encrypt): Likewise.
407         (gpgsm_export): Likewise.
408         * engine-backend.h (struct engine_ops): Likewise for members
409         ENCRYPT, ENCRYPT_SIGN and EXPORT.
410         * export.c (export_start, gpgme_op_export_start, gpgme_op_export):
411         Likewise.
412         * encrypt.c (encrypt_start): Likewise.  Don't check for count of
413         recipients.
414         (gpgme_op_encrypt_start): Likewise.
415         (gpgme_op_encrypt): Likewise.
416         * encrypt-sign.c (encrypt_sign_start): Likewise.
417         (gpgme_op_encrypt_sign): Likewise.
418         (gpgme_op_encrypt_sign_start): Likewise.
419
420 2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
421
422         * gpgme.h (struct _gpgme_op_import_result): Add skipped_new_keys.
423         * import.c (parse_import_res): Add skipped_new_keys parser.
424
425         * op-support.c (_gpgme_parse_inv_userid): Add missing break
426         statements.
427         * encrypt.c (gpgme_op_encrypt): Use gpgme_error_t instead of int.
428
429 2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
430
431         * encrypt.c (gpgme_op_encrypt_result): Use intermediate variable
432         HOOK to avoid compiler warning.  Don't ask, you don't want to know.
433         (_gpgme_encrypt_status_handler): Likewise.
434         (_gpgme_op_encrypt_init_result): Likewise.
435         * decrypt.c (gpgme_op_decrypt_result): Likewise.
436         (_gpgme_decrypt_status_handler): Likewise.
437         (_gpgme_op_decrypt_init_result): Likewise.
438         * verify.c (gpgme_op_verify_result): Likewise.
439         (_gpgme_verify_status_handler): Likewise.
440         (_gpgme_op_verify_init_result): Likewise.
441         * edit.c (edit_status_handler): Likewise.
442         (command_handler): Likewise.
443         (edit_start): Likewise.
444         * genkey.c (gpgme_op_genkey_result): Likewise.
445         (genkey_status_handler): Likewise.
446         (genkey_start): Likewise.
447         * import.c (gpgme_op_import_result): Likewise.
448         (import_status_handler): Likewise.
449         (_gpgme_op_import_start): Likewise.
450         * trustlist.c (gpgme_op_trustlist_next): Likewise.
451         (_gpgme_op_trustlist_event_cb): Likewise.
452         (gpgme_op_trustlist_start): Likewise.
453         * keylist.c (gpgme_op_keylist_result): Likewise.
454         (keylist_colon_handler): Likewise.
455         (keylist_status_handler): Likewise.
456         (_gpgme_op_keylist_event_cb): Likewise.
457         (gpgme_op_keylist_start): Likewise.
458         (gpgme_op_keylist_ext_start): Likewise.
459         (gpgme_op_keylist_next): Likewise.
460         * passphrase.c (_gpgme_passphrase_status_handler): Likewise.
461         (_gpgme_passphrase_command_handler_internal): Likewise.
462         * sign.c (gpgme_op_sign_result): Likewise.
463         (_gpgme_sign_status_handler): Likewise.
464         (_gpgme_op_sign_init_result): Likewise.
465
466         * passphrase.c (_gpgme_passphrase_command_handler_internal): Fix
467         access to pointer type.
468
469 2003-05-26  Marcus Brinkmann  <marcus@g10code.de>
470
471         * engine.h (EngineCommandHandler): Change last argument to int fd.
472         * gpgme.h (gpgme_passphrase_cb_t): Rewritten to take parts of the
473         description and fd.
474         (gpgme_edit_cb_t): Change last argument to int fd.
475         * ops.h (_gpgme_passphrase_command_handler_internal): New prototype.
476         * passphrase.c: Include <assert.h>.
477         (op_data_t): Rename userid_hint to uid_hint, remove last_pw_handle.
478         (release_op_data): Check values before calling free.
479         (_gpgme_passphrase_status_handler): Likewise.
480         (_gpgme_passphrase_command_handler_internal): New function.
481         (_gpgme_passphrase_command_handler): Rewritten.
482         * edit.c (edit_status_handler): Pass -1 as fd argument.
483         (command_handler): Update prototype.  New variable processed.  Use
484         it to store return value of
485         _gpgme_passphrase_command_handler_internal which is now used
486         instead _gpgme_passphrase_command_handler.  Use it also to check
487         if we should call the user's edit function.  Pass fd to user's
488         edit function.
489         * rungpg.c (struct gpg_object_s): Change type of cmd.cb_data to
490         void *.
491         (gpg_release): Check value before calling free.  Do not release
492         cmd.cb_data.
493         (command_cb): Function removed.
494         (command_handler): New function.  Thus we don't use a data object
495         for command handler stuff anymore, but handle it directly.  This
496         allows proper error reporting (cancel of passphrase requests, for
497         example).  Also all callbacks work via direct writes to the file
498         descriptor (so that passphrases are not kept in insecure memory).
499         (gpg_set_command_handler): Rewritten to use even more ugly hacks.
500         (read_status): Check cmd.keyword before calling free.  Install
501         command_handler as the I/O callback handler with GPG as private
502         data.
503
504         * rungpg.c (gpg_new): Add --enable-progress-filter to gpg
505         invocation.
506         * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Rename to
507         decrypt_verify_start.
508         (gpgme_op_decrypt_verify_start): Call decrypt_verify_start.
509         (gpgme_op_decrypt_verify): Likewise.
510         * verify.c (verify_status_handler): New function that also calls
511         progress status handler.
512         (_gpgme_op_verify_start): Set status handler to verify_status_handler.
513         Rename to (verify_start).
514         (gpgme_op_verify_start): Call verify_start.
515         (gpgme_op_verify): Likewise.
516         * encrypt.c (encrypt_status_handler): New function.
517         (_gpgme_encrypt_sym_status_handler): Call progress status handler.
518         Make static.  Rename to encrypt_sym_status_handler.
519         (encrypt_start): Set status handler to encrypt_sym_status_handler
520         or encrypt_status_handler.
521         * sign.c (sign_status_handler): New function.
522         (sign_start): Set status handler to sign_status_handler.
523         * decrypt.c (decrypt_status_handler): New function that also calls
524         progress status handler.
525         (decrypt_start): Set status handler to decrypt_status_handler.
526         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
527         * decrypt-verify.c (decrypt_verify_status_handler): Call
528         _gpgme_progress_status_handler.
529
530         * conversion.c (_gpgme_decode_c_string): Add missing break
531         statement.
532
533         * recipient.c (gpgme_recipients_add_name_with_validity): Add one
534         to buffer to allocate.
535
536 2003-05-19  Marcus Brinkmann  <marcus@g10code.de>
537
538         * verify.c (parse_new_sig): Fix ERRSIG case.
539         Submitted by Benjamin Lee <benjaminlee@users.sf.net>.
540
541 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
542
543         * gpgme.h: The following types are renamed.  The old name is kept
544         as a deprecated typedef.
545         (GpgmeCtx): Rename to gpgme_ctx_t.
546         (GpgmeData): Rename to gpgme_data_t.
547         (GpgmeRecipients): Rename to gpgme_recipients_t.
548         (GpgmeError): Rename to gpgme_error_t.
549         (GpgmeDataEncoding): Rename to gpgme_data_encoding_t.
550         (GpgmePubKeyAlgo): Rename to gpgme_pubkey_algo_t.
551         (GpgmeHashAlgo): Rename to gpgme_hash_algo_t.
552         (GpgmeSigStat): Rename to gpgme_sig_stat_t.
553         (GpgmeSigMode): Rename to gpgme_sig_mode_t.
554         (GpgmeAttr): Rename to gpgme_attr_t.
555         (GpgmeValidity): Rename to gpgme_validity_t.
556         (GpgmeProtocol): Rename to gpgme_protocol_t.
557         (GpgmeStatusCode): Rename to gpgme_status_code_t.
558         (GpgmeEngineInfo): Rename to gpgme_engine_info_t.
559         (GpgmeSubkey): Rename to gpgme_subkey_t.
560         (GpgmeKeySig): Rename to gpgme_keysig_t.
561         (GpgmeUserID): Rename to gpgme_user_id_t.
562         (GpgmePassphraseCb): Rename to gpgme_passphrase_cb_t.
563         (GpgmeProgressCb): Rename to gpgme_progress_cb_t.
564         (GpgmeEditCb): Rename to gpgme_edit_cb_t.
565         (GpgmeIOCb): Rename to gpgme_io_cb_t.
566         (GpgmeRegisterIOCb): Rename to gpgme_register_io_cb_t.
567         (GpgmeRemoveIOCb): Rename to gpgme_remove_io_cb_t.
568         (GpgmeEventIO): Rename to gpgme_event_io_t.
569         (GpgmeEventIOCb): Rename to gpgme_event_io_cb_t.
570         (GpgmeIOCbs): Rename to gpgme_io_cbs.
571         (gpgme_io_cbs_t): New type.
572         (GpgmeDataReadCb): Rename to gpgme_data_read_cb_t.
573         (GpgmeDataWriteCb): Rename to gpgme_data_write_cb_t.
574         (GpgmeDataSeekCb): Rename to gpgme_data_seek_cb_t.
575         (GpgmeDataReleaseCb): Rename to gpgme_data_release_cb_t.
576         (GpgmeDataCbs): Rename to gpgme_data_cbs.
577         (gpgme_data_cbs_t): New type.
578         (GpgmeInvalidUserID): Rename to gpgme_invalid_user_id_t.
579         (GpgmeEncryptResult): Rename to gpgme_encrypt_result_t.
580         (GpgmeDecryptResult): Rename to gpgme_decrypt_result_t.
581         (GpgmeNewSignature): Rename to gpgme_new_signature_t.
582         (GpgmeSignResult): Rename to gpgme_sign_result_t.
583         (GpgmeSigNotation): Rename to gpgme_sig_notation_t.
584         (GpgmeSignature): Rename to gpgme_signature_t.
585         (GpgmeVerifyResult): Rename to gpgme_verify_result_t.
586         (GpgmeImportStatus): Rename to gpgme_import_status_t.
587         (GpgmeImportResult): Rename to gpgme_import_result_t.
588         (GpgmeGenKeyResult): Rename to gpgme_genkey_result_t.
589         (GpgmeKeyListResult): Rename to gpgme_keylist_result_t.
590         (GpgmeTrustItem): Rename to gpgme_trust_item_t.
591         * gpgme.h (gpgme_deprecated_error_t): New type, swallowing macros
592         GPGME_No_Recipients, GPGME_Invalid_Recipient and
593         GPGME_No_Passphrase.
594         * data.h (struct gpgme_data_s): Rename to struct gpgme_data.
595         * context.h (struct gpgme_context_s): Rename to struct
596         gpgme_context.
597         (struct gpgme_recipients_s): Rename to gpgme_recipients.
598
599 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
600
601         * keylist.c (finish_key): Clear OPD->tmp_uid.
602
603 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
604
605         * verify.c (_gpgme_verify_status_handler): Return GPGME_No_Data
606         for NODATA status without signatures.
607
608 2003-05-05  Marcus Brinkmann  <marcus@g10code.de>
609
610         * key.c (_gpgme_key_append_name): Use decoded string to parse user id.
611         (_gpgme_key_add_sig): Likewise.
612
613 2003-05-04  Marcus Brinkmann  <marcus@g10code.de>
614
615         * context.h (struct gpgme_context_s): Remove member op_info.
616
617         * key.c (_gpgme_key_add_sig): Initialize SIG->uid.
618
619         * gpgme.h (GpgmeError): Add deprecated values for
620         GPGME_Invalid_Type and GPGME_Invalid_Mode.
621
622 2003-04-30  Marcus Brinkmann  <marcus@g10code.de>
623
624         * gpgme.h (gpgme_get_op_info): Remove prototype.
625         * ops.h (_gpgme_set_op_info,
626         _gpgme_data_release_and_return_string, _gpgme_data_get_as_string,
627         _gpgme_data_append, _gpgme_data_append_string,
628         _gpgme_data_append_string_for_xml, _gpgme_data_append_for_xml,
629         _gpgme_data_append_percentstring_for_xml): Likewise.
630         (_gpgme_progress_status_handler): Change first arg to void *.
631         * progress.c (_gpgme_progress_status_handler): Likewise.
632         * conversion.c: Do not include <string.h>, <errno.h>, <ctype.h>,
633         and <sys/types.h>, but <string.h>.
634         (_gpgme_data_append): Remove function.
635         (_gpgme_data_append_string): Likewise.
636         (_gpgme_data_append_for_xml): Likewise.
637         (_gpgme_data_append_string_for_xml): Likewise.
638         (_gpgme_data_append_percentstring_for_xml): Likewise.
639         * data-mem.c (_gpgme_data_get_as_string): Likewise.
640         (_gpgme_data_release_and_return_string): Likewise.
641         * gpgme.c (gpgme_get_op_info): Likewise.
642         (_gpgme_set_op_info): Likewise.
643
644         * gpgme.h (struct _gpgme_key): New structure.
645         (GpgmeKey): Define using _gpgme_key.
646         (struct _gpgme_subkey): New structure.
647         (GpgmeSubKey): New type.
648         (struct _gpgme_key_sig): New structure.
649         (GpgmeKeySig): New type.
650         (struct _gpgme_user_id): New structure.
651         (GpgmeUserID): New type.
652         (struct _gpgme_op_keylist_result): New structure.
653         (GpgmeKeyListResult): New type.
654         (gpgme_op_keylist_result): New function.
655         (gpgme_key_get_as_xml): Remove prototype.
656         * context.h (struct gpgme_context_s): Remove members tmp_key,
657         tmp_uid, key_cond and key_queue.
658         (struct key_queue_item_s): Remove structure.
659         (struct user_id_s): Remove structure.
660         (struct gpgme_recipients_s): Replace with simple
661         GpgmeUserID list.
662         * gpgme.c (gpgme_release): Do not release CTX->tmp_key.
663         * ops.h (_gpgme_key_add_subkey, _gpgme_key_append_name,
664         _gpgme_key_add_sig, _gpgme_trust_item_new): New prototypes.
665         * rungpg.c (command_cb): Return GpgmeError instead int.
666         New variable ERR.  Use it to hold return value of cmd handler.
667         (gpg_delete): Access fingerprint of key directly.
668         (append_args_from_signers): Likewise.
669         (gpg_edit): Likewise.
670         (append_args_from_recipients): Use GpgmeUserID for recipient list.
671         * engine-gpgsm.c: Do not include "key.h".
672         (gpgsm_delete): Access fingerprint of key directly.
673         (gpgsm_sign): Likewise.
674         (set_recipients): Use GpgmeUserID for recipients.  Invert invalid
675         user ID flag.
676         * key.h: File removed.
677         * key.c: Completely reworked to use exposed GpgmeKey data types.
678         * keylist.c: Likewise.
679         * recipient.c: Completely reworked to use GpgmeUserID.
680
681 2003-04-29  Marcus Brinkmann  <marcus@g10code.de>
682
683         * gpgme.h (gpgme_get_key): Remove force_update argument.
684         * key-cache.c: File removed.
685         * Makefile.am (libgpgme_la_SOURCES): Remove key-cache.c.
686         * ops.h (_gpgme_key_cache_add, _gpgme_key_cache_get): Remove
687         prototypes.
688         * keylist.c (_gpgme_op_keylist_event_cb): Don't call
689         _gpgme_key_cache_add.
690         (gpgme_get_key): New function.
691         * verify.c (gpgme_get_sig_key): Remove last argument to
692         gpgme_get_key invocation.
693
694         * gpgme.h (struct _gpgme_trust_item): New structure.
695         (GpgmeTrustItem): New type.
696         (gpgme_trust_item_ref, gpgme_trust_item_unref): New prototypes.
697         * context.h (struct trust_queue_item_s): Remove structure.
698         (struct gpgme_context_s): Remove trust_queue member.
699         * Makefile.am (libgpgme_la_SOURCES): Add trust-item.c.
700         * trust-item.c: New file.
701         * trustlist.c: Do not include <stdio.h> or <time.h>, but
702         "gpgme.h".
703         (struct trust_queue_item_s): Change to new type op_data_t.
704         (trust_status_handler): Change first argument to void *.
705         (trust_colon_handler): Likewise.
706         (_gpgme_op_trustlist_event_cb): Use op_data_t type.
707         (gpgme_op_trustlist_start): Use op_data_t and rework error
708         handling.
709         (gpgme_op_trustlist_next): Use op_data_t.
710         (gpgme_trust_item_release): Remove function.
711         (gpgme_trust_item_get_string_attr): Likewise.
712         (gpgme_trust_item_get_int_attr): Likewise.
713
714         * verify.c (calc_sig_summary): Do not set GPGME_SIGSUM_SYS_ERROR
715         for bad signatures.
716
717 2003-04-28  Marcus Brinkmann  <marcus@g10code.de>
718
719         * context.h: Remove OPDATA_VERIFY_COLLECTING.
720         (struct gpgme_context_s): Remove member notation.
721         * gpgme.h: Make enum for GPGME_KEYLIST_MODE_* values.
722
723         * gpgme.h (struct _gpgme_sig_notation): New structure.
724         (GpgmeSigNotation): New type.
725         (struct _gpgme_signature): New structure.
726         (GpgmeSignature): New type.
727         (struct _gpgme_op_verify_result): New structure.
728         (GpgmeVerifyResult): New type.
729         (gpgme_op_verify_result): New prototype.
730         (gpgme_get_notation): Remove prototype.
731         * ops.h (_gpgme_op_verify_init_result): New prototype.
732         (_gpgme_verify_status_handler): Change first argument to void *.
733         * util.h (_gpgme_decode_percent_string, _gpgme_map_gnupg_error):
734         New prototypes.
735         * conversion.c (_gpgme_decode_percent_string): New function.
736         (gnupg_errors): New static global.
737         (_gpgme_map_gnupg_error): New function.
738         * gpgme.c (gpgme_release): Don't release CTX->notation.
739         (gpgme_get_notation): Remove function.
740         * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Call
741         _gpgme_op_verify_init_result.
742         * verify.c: Do not include <stdio.h>, <assert.h> and "key.h", but
743         do include "gpgme.h".
744         (struct verify_result): Replace with ...
745         (op_data_t): ... this type.
746         (release_verify_result): Remove function.
747         (release_op_data): New function.
748         (is_token): Remove function.
749         (skip_token): Remove function.
750         (copy_token): Remove function.
751         (gpgme_op_verify_result): New function.
752         (calc_sig_summary): Rewritten.
753         (finish_sig): Remove function.
754         (parse_new_sig): New function.
755         (parse_valid_sig): New function.
756         (parse_notation): New function.
757         (parse_trust): New function.
758         (parse_error): New function.
759         (_gpgme_verify_status_handler): Rewritten.  Change first argument
760         to void *.
761         (_gpgme_op_verify_start): Rework error handling.  Call
762         _gpgme_op_verify_init_result.
763         (gpgme_op_verify): Do not release or clear CTX->notation.
764         (gpgme_get_sig_status): Rewritten.
765         (gpgme_get_sig_string_attr): Likewise.
766         (gpgme_get_sig_ulong_attr): Likewise.
767         (gpgme_get_sig_key): Likewise.
768
769         * gpgme.h (struct _gpgme_op_decrypt_result): New structure.
770         (GpgmeDecryptResult): New type.
771         (gpgme_op_decrypt_result): New prototype.
772         * ops.h (_gpgme_op_decrypt_init_result): New prototype.
773         (_gpgme_decrypt_status_handler): Fix prototype.
774         (_gpgme_decrypt_start): Remove prototype.
775         * decrypt-verify.c: Do not include <stdio.h>, <stdlib.h>,
776         <string.h> and <assert.h>, "util.h" and "context.h", but
777         "gpgme.h".
778         (decrypt_verify_status_handler): Change first argument to void *,
779         and rework error handling.
780         (_gpgme_op_decrypt_verify_start): New function.
781         (gpgme_op_decrypt_verify_start): Rewrite using
782         _gpgme_op_decrypt_verify_start.
783         (gpgme_op_decrypt_verify): Likewise.
784         * decrypt.c: Include <string.h>, "gpgme.h" and "util.h".
785         (struct decrypt_result): Change to typedef op_data_t, rewritten.
786         (is_token): Remove function.
787         (release_op_data): New function.
788         (skip_token): Remove function.
789         (gpgme_op_decrypt_result): New function.
790         (_gpgme_decrypt_status_handler): Change first argument to void *.
791         Rework error handling.
792         (_gpgme_decrypt_start): Rename to ...
793         (decrypt_start): ... this.  Call _gpgme_op_decrypt_init_result.
794         (_gpgme_op_decrypt_init_result): New function.
795         (gpgme_op_decrypt_start): Use decrypt_start.
796         (gpgme_op_decrypt): Likewise.
797
798 2003-04-27  Marcus Brinkmann  <marcus@g10code.de>
799
800         * encrypt-sign.c: Do not include <stddef.h>, <stdio.h>,
801         <stdlib.h>, <string.h>, <assert.h> and "util.h", but "gpgme.h".
802         (_gpgme_op_encrypt_sign_start): Rename to ...
803         (encrypt_sign_start): ... this.
804         (gpgme_op_encrypt_sign_start): Use encrypt_sign_start, not
805         _gpgme_op_encrypt_sign_start.
806         (gpgme_op_encrypt_sign): Likewise.
807
808         * gpgme.h (GpgmeEncryptResult): New data type.
809         (gpgme_op_encrypt_result): New prototype.
810         * ops.h (_gpgme_op_encrypt_init_result): New prototype.
811         (_gpgme_op_encrypt_status_handler): Fix prototype.
812         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Call
813         _gpgme_op_encrypt_init_result.
814         * encrypt.c: Do not include <stdio.h>, <assert.h>, "util.h" and
815         "wait.h".  Include <errno.h> and "gpgme.h".
816         (SKIP_TOKEN_OR_RETURN): Remove macro.
817         (struct encrypt_result): Rename to ...
818         (op_data_t): ... new data type.  Rewrite for user result data.
819         (append_xml_encinfo): Remove function.
820         (release_op_data): New function.
821         (gpgme_op_encrypt_result): New function.
822         (_gpgme_op_encrypt_status_handler): Change first argument to void *.
823         Rewrite result parsing.
824         (_gpgme_op_encrypt_sym_status_handler): Change first argument to
825         void *.
826         (_gpgme_op_encrypt_init_result): New function.
827         (_gpgme_op_encrypt_start): Rename to ...
828         (encrypt_start): ... this.
829         (gpgme_op_encrypt_start): Use encrypt_start, not
830         gpgme_op_encrypt_start.
831         (gpgme_op_encrypt): Likewise.
832
833         * gpgme.h (GpgmePubKeyAlgo, GpgmeHashAlgo, GpgmeInvalidUserID,
834         GpgmeNewSignature, GpgmeSignResult): New data types.
835         (gpgme_op_sign_result, gpgme_pubkey_algo_name,
836         gpgme_hash_algo_name): New prototypes.
837         * gpgme.c (gpgme_pubkey_algo_name): New function.
838         (gpgme_hash_algo_name): Likewise.
839         * ops.h (_gpgme_parse_inv_userid, _gpgme_op_sign_init_result): New
840         prototype.
841         (_gpgme_op_sign_status_handler): Fix prototype.
842         * op-support.c: Include <errno.h> and <string.h>.
843         (_gpgme_parse_inv_userid): New function.
844         * sign.c: Include <errno.h> and "gpgme.h", but not <stdio.h>,
845         <assert.h> and "util.h".
846         (SKIP_TOKEN_OR_RETURN): Remove macro.
847         (struct sign_result): Change to op_data_t type and rework it.
848         (release_sign_result): Rename to ...
849         (release_op_data): ... this and rewrite it.
850         (append_xml_info): Remove function.
851         (gpgme_op_sign_result): New function.
852         (parse_sig_created): New function.
853         (_gpgme_sign_status_handler): Change first argument to void *.
854         Rewrite the function to use the new result structure and functions.
855         (_gpgme_op_sign_init_result): New function.
856         (_gpgme_op_sign_start): Rename to ...
857         (sign_start): ... this.  Call _gpgme_op_sign_init_result.
858         (gpgme_op_sign_start): Use sign_start instead _gpgme_op_sign_start.
859         (gpgme_op_sign): Likewise.
860         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Call
861         _gpgme_op_sign_init_result.
862         
863         * delete.c: Include <errno.h> and "gpgme.h", but not "util.h" or
864         "key.h".
865         (enum delete_problem): Move into function delete_status_handler.
866         (delete_status_handler): Change first argument to void *.  Parse
867         delete problem with strtol instead atoi.  Return better error
868         values.
869         (_gpgme_op_delete_start): Rename to ...
870         (delete_start): ... this.  Rework error handling.
871         (gpgme_op_delete_start): Use delete_start instead
872         _gpgme_op_delete_start.
873         (gpgme_op_delete): Likewise.
874         * gpgme.h (GpgmeDataType): Removed.
875
876 2003-04-25  Marcus Brinkmann  <marcus@g10code.de>
877
878         * gpgme.h: Change GPGME_IMPORT_PRIVATE to GPGME_IMPORT_SECRET.
879         * import.c (parse_import_res): Parse unchanged field.
880
881         * gpgme.h: New enum for GPGME_IMPORT_NEW, GPGME_IMPORT_UID,
882         GPGME_IMPORT_SIG, GPGME_IMPORT_SUBKEY, GPGME_IMPORT_PRIVATE.
883         (GpgmeError): GPGME_Unknown_Reason, GPGME_Not_Found,
884         GPGME_Ambiguous_Specification, GPGME_Wrong_Key_Usage,
885         GPGME_Key_Revoked, GPGME_Key_Expired, GPGME_No_CRL_Known,
886         GPGME_CRL_Too_Old, GPGME_Policy_Mismatch, GPGME_No_Secret_Key,
887         GPGME_Key_Not_Trusted, GPGME_Issuer_Missing, GPGME_Chain_Too_Long,
888         GPGME_Unsupported_Algorithm, GPGME_Sig_Expired,
889         GPGME_Bad_Signature, GPGME_No_Public_Key added as new error codes.
890         (struct _gpgme_import_status): New structure.
891         (GpgmeImportStatus): New type.
892         (struct _gpgme_op_import_result): New structure.
893         (GpgmeImportResult): New type.
894         (gpgme_op_import_result): New function.
895         * import.c: Include <errno.h> and "gpgme.h", but not "util.h".
896         (struct import_result): Change to type op_data_t.
897         (release_import_result): Rename to ...
898         (release_op_data): ... this.
899         (append_xml_impinfo): Function removed.
900         (gpgme_op_import_result): New function.
901         (parse_import): New function.
902         (parse_import_res): Likewise.
903         (import_status_handler): Change first argument to void *.  Rewrite
904         to use new functions.
905         (_gpgme_op_import_start): Rework error handling.
906
907         * edit.c: Do not include <assert.h>, "util.h", but "gpgme.h".
908         (edit_resut): Change to typedef for op_data_t.
909         (edit_status_handler): Change first argument to void *.
910         Rework error handling.
911         (command_handler): Rework error handling.
912         (_gpgme_op_edit_start): Rename to ...
913         (edit_start): ... this.  Rework error handling.
914         (gpgme_op_edit_start): Rewrite using edit_start.
915         (gpgme_op_edit): Likewise.
916
917         * ops.h (_gpgme_passphrase_start): Remove prototype.
918         * passphrase.c: Do not include <assert.h>, "util.h" or
919         "debug.h", but "gpgme.h".
920         (struct passphrase_result): Change to typedef for op_data_t.
921         (release_passphrase_result): Rename to release_op_data.
922         (_gpgme_passphrase_status_handler): Change first argument to void *.
923         Use new op_data_t type.
924         (_gpgme_passphrase_command_handler): Use new op_data_t type.
925         (_gpgme_passphrase_start): Remove function.
926         * decrypt.c (_gpgme_decrypt_start): Rewrite error handling.  Do
927         not call _gpgme_passphrase_start, but install command handler.
928         * encrypt.c (_gpgme_op_encrypt_start): Likewise.
929         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
930         * sign.c (_gpgme_op_sign_start): Likewise.
931
932         * context.h (struct gpgme_context_s): Remove member initialized,
933         use_cms and help_data_1.  Add member protocol.  Make use_armor and
934         use_textmode bit flags.  Make keylist_mode, include_certs,
935         signers_len and signers_size unsigned.
936         * gpgme.c (gpgme_new): Initialize CTX->protocol.
937         (gpgme_set_protocol): Do not check CTX.  Use CTX->protocol.
938         (gpgme_get_protocol): Likewise.
939         (gpgme_release): Do not release CTX->help_data_1.
940         * op-support.c (_gpgme_op_reset): Use CTX->protocol.
941
942         * wait-private.c (_gpgme_wait_private_event_cb): Remove variable CTX.
943
944         * data.c: Do not include <assert.h>, but "gpgme.h".
945         (_gpgme_data_inbound_handler): Expand _gpgme_data_append, because
946         it will go.  Do not assert DH.
947         (_gpgme_data_outbound_handler): Do not assert DH.
948         
949         * export.c: Do not include <stdlib.h>, "debug.h" and "util.h", but
950         "gpgme.h".
951         (export_status_handler): Change type of first argument to void *.
952         (_gpgme_op_export_start): Rename to ...
953         (export_start): ... this.  Rework error handling.
954         (gpgme_op_export_start): Rewritten to use export_start instead
955         _gpgme_op_export_start.
956         (gpgme_op_export): Likewise.
957
958         * gpgme.h (GpgmeError): Add GPGME_Busy, GPGME_No_Request.
959         (GPGME_No_Recipients, GPGME_Invalid_Recipient,
960         GPGME_No_Passphrase): New macros.
961
962         * key.c (gpgme_key_get_string_attr): Fix validity attribute.
963
964 2003-04-24  Marcus Brinkmann  <marcus@g10code.de>
965         
966         * gpgme.h (struct _gpgme_op_genkey_result): New structure.
967         (GpgmeGenKeyResult): New type.
968         (gpgme_op_genkey): Drop last argument.
969         (gpgme_op_genkey_result): New function.
970         * genkey.c: Do not include "util.h", but "gpgme.h".
971         (struct genkey_result): Replace with ...
972         (op_data_t): ... this new type.
973         (release_genkey_result): Replace with ...
974         (release_op_data): ... this new function.
975         (gpgme_op_genkey_result): New function.
976         (genkey_status_handler): Rewritten using new op_data_t type.
977         (get_key_parameter): New function.
978         (_gpgme_op_genkey_start): Renamed to
979         (genkey_start): ... this and rewritten.
980         (gpgme_op_genkey_start): Use genkey_start instead
981         _gpgme_op_genkey_start.
982         (gpgme_op_genkey): Rewritten.  Remove FPR argument.
983
984         * context.h (struct gpgme_context_s): Remove member verbosity.
985         * gpgme.c (gpgme_new): Do not set member verbosity.
986         * engine.h (_gpgme_engine_set_verbosity): Remove prototype.
987         * engine.c (_gpgme_engine_set_verbosity): Remove function.
988         * engine-backend.h (struct engine_ops): Remove set_verbosity.
989         * engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Remove set_verbosity member.
990         * rungpg.c (_gpgme_engine_ops_gpg): Likewise.
991         (gpg_set_verbosity): Remove function.
992         * decrypt.c (_gpgme_decrypt_start): Don't call
993         _gpgme_engine_set_verbosity.
994         * delete.c (_gpgme_op_delete_start): Likewise.
995         * edit.c (_gpgme_op_edit_start): Likewise.
996         * encrypt.c (_gpgme_op_encrypt_start): Likewise.
997         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
998         * export.c (_gpgme_op_export_start): Likewise.
999         * genkey.c (_gpgme_op_genkey_start): Likewise.
1000         * import.c (_gpgme_op_import_start): Likewise.
1001         * keylist.c (gpgme_op_keylist_start): Likewise.
1002         (gpgme_op_keylist_ext_start): Likewise.
1003         * sign.c (_gpgme_op_sign_start): Likewise.
1004         * verify.c (_gpgme_op_verify_start): Likewise.
1005
1006         * Makefile.am (libgpgme_la_SOURCES): Add key-cache.c.
1007         * key.c (key_cache_initialized, key_cache_size,
1008         key_cache_max_chain_length, ): Removed.
1009         (struct key_cache_item_s, key_cache_lock, key_cache,
1010         key_cache_unused_items, hash_key, _gpgme_key_cache_add,
1011         _gpgme_key_cache_get, gpgme_get_key): Moved to ...
1012         * key-cache.c: ... here.  New file.
1013         * key.h (_gpgme_key_cache_init): Remove prototypes.
1014         (_gpgme_key_cache_add,_gpgme_key_cache_get): Move to ...
1015         * ops.h: ... here.
1016         * version.c: Do not include "key.h".
1017         (do_subsystem_inits): Do not call _gpgme_key_cache_init.
1018
1019         * mkstatus: Strip trailing comma.
1020         * gpgme.h (GpgmeStatus): Pretty print.
1021
1022         * gpgme.h (GpgmeError): Rename GPGME_No_Passphrase to
1023         GPGME_Bad_Passphrase.
1024         * passphrase.c (_gpgme_passphrase_status_handler): Use
1025         GPGME_Bad_Passphrase instead GPGME_No_Passphrase.
1026
1027         * gpgme.h (GpgmeError): Rename GPGME_No_Recipients to
1028         GPGME_No_UserID and GPGME_Invalid_Recipient to
1029         GPGME_Invalid_UserID.
1030         * encrypt.c (_gpgme_encrypt_status_handler): Use GPGME_No_UserID
1031         instead GPGME_No_Recipients and GPGME_Invalid_UserID instead
1032         GPGME_Invalid_Recipient.
1033         (_gpgme_op_encrypt_start): Likewise.
1034
1035         * gpgme.h (GpgmeError): Remove GPGME_Busy and GPGME_No_Request.
1036         * wait-user.c (_gpgme_wait_user_event_cb): Don't clear CTX->pending.
1037         * wait-private.c (_gpgme_wait_private_event_cb): Likewise.
1038         * wait-global.c (gpgme_wait): Likewise.
1039         * verify.c (_gpgme_op_verify_start): Likewise.
1040         (gpgme_get_sig_status): Don't check pending flag.
1041         (gpgme_get_sig_string_attr): Likewise.
1042         (gpgme_get_sig_ulong_attr): Likewise.
1043         (gpgme_get_sig_key): Likewise.
1044         * op-support.c (_gpgme_op_reset): Likewise.
1045         * trustlist.c (gpgme_op_trustlist_start): Don't clear pending flag.
1046         (gpgme_op_trustlist_next): Don't check or clear pending flag.
1047         (gpgme_op_trustlist_end): Likewise.
1048         * sign.c (_gpgme_op_sign_start): Likewise.
1049         * context.h (struct gpgme_context_s): Remove member PENDING.
1050         * decrypt.c (_gpgme_decrypt_start): Likewise.
1051         * delete.c (_gpgme_op_delete_start): Likewise.
1052         * edit.c (_gpgme_op_edit_start): Likewise.
1053         * encrypt.c (_gpgme_op_encrypt_start): Likewise.
1054         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
1055         * export.c (_gpgme_op_export_start): Likewise.
1056         * genkey.c (_gpgme_op_genkey_start): Likewise.
1057         * import.c (_gpgme_op_import_start): Likewise.
1058         * key.c (gpgme_get_key): Likewise.
1059         * keylist.c (gpgme_op_keylist_start): Likewise.
1060         (gpgme_op_keylist_ext_start): Likewise.
1061         (gpgme_op_keylist_next): Likewise.
1062         (gpgme_op_keylist_end): Likewise.
1063         * data-compat.c (gpgme_error_to_errno): Don't convert EBUSY.
1064
1065 2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
1066
1067         * gpgme.h (GpgmePassphraseCb): Change type to return GpgmeError,
1068         and add argument for returning the result string.
1069         (gpgme_cancel): Remove prototype.
1070         * gpgme.c (gpgme_cancel): Remove function.
1071         * context.h (struct gpgme_context_s): Remove member cancel.
1072         * passphrase.c (_gpgme_passphrase_command_handler): Call the
1073         passphrase callback in the new way.
1074
1075 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
1076
1077         * edit.c (_gpgme_edit_status_handler): Call the progress status
1078         handler.
1079
1080 2003-02-05  Marcus Brinkmann  <marcus@g10code.de>
1081
1082         * wait-user.c (_gpgme_wait_user_remove_io_cb): Move check for no
1083         I/O handlers left to ...
1084         (_gpgme_user_io_cb_handler): ... here.
1085
1086 2003-02-04  Marcus Brinkmann  <marcus@g10code.de>
1087
1088         * trustlist.c (trustlist_colon_handler): Release ITEM if name
1089         could not be allocated.
1090         (gpgme_trust_item_release): Only release name if it is allocated.
1091         Reported by Marc Mutz <Marc.Mutz@uni-bielefeld.de>.
1092
1093 2003-02-04  Marcus Brinkmann  <marcus@g10code.de>
1094
1095         * rungpg.c (read_status): If he status handler returns an error,
1096         return it.
1097         (status_handler): If read_status fails, just return the error.
1098
1099 2003-02-01  Marcus Brinkmann  <marcus@g10code.de>
1100
1101         * engine-gpgsm.c (start): Handle all errors, not only most of
1102         them.
1103         (xtoi_1, xtoi_2): Remove macro.
1104         (status_handler): Replace use of xtoi_2 with _gpgme_hextobyte.
1105
1106 2003-02-01  Marcus Brinkmann  <marcus@g10code.de>
1107
1108         * engine-gpgsm.c (map_assuan_error): Replace
1109         ASSUAN_Bad_Certificate_Path with ASSUAN_Bad_Certificate_Chain.
1110         (gpgsm_new): Use assuan_pipe_connect instead assuan_pipe_connect2.
1111
1112         * util.h (DIMof): Remove macro.
1113
1114         * ops.h (_gpgme_op_event_cb, _gpgme_op_event_cb_user,
1115         _gpgme_data_unread): Prototypes removed.
1116
1117 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
1118
1119         * types.h: File removed.
1120         * Makefile.am (libgpgme_la_SOURCES): Remove types.h.
1121         * io.h (struct spawn_fd_item_s): Do not include "types.h".
1122         * key.h: Likewise.
1123         * context.h: Likewise.
1124         * cengine-gpgsm.h: Likewise.
1125         * engine.h: Include "gpgme.h" instead "types.h".  Add prototypes
1126         for EngineStatusHandler, EngineColonLineHandler and
1127         EngineCommandHandler.
1128         (_gpgme_engine_set_status_handler): Change parameter type from
1129         GpgmeStatusHandler to EngineStatusHandler.
1130         (_gpgme_engine_set_command_handler): Change parameter type from
1131         GpgmeCommandHandler to EngineCommandHandler.
1132         (_gpgme_engine_set_colon_line_handler): Change parameter type from
1133         GpgmeColonLineHandler to EngineColonLineHandler.
1134         * engine-backend.h: Include "engine.h" instead "types.h".
1135         (struct engine_ops): Change Gpgme*Handler parameters in members
1136         set_command_handler, set_colon_line_handler and set_status_handler
1137         to Engine*Handler.
1138         * engine.c (_gpgme_engine_set_status_handler): Change parameter
1139         type from GpgmeStatusHandler to EngineStatusHandler.
1140         (_gpgme_engine_set_command_handler): Change parameter type from
1141         GpgmeCommandHandler to EngineCommandHandler.
1142         (_gpgme_engine_set_colon_line_handler): Change parameter type from
1143         GpgmeColonLineHandler to EngineColonLineHandler.
1144         * rungpg.c (struct gpg_object_s): Change type of member status.fnc
1145         from GpgmeStatusHandler to EngineStatusHandler.  Change type of
1146         member colon.fnc from GpgmeColonLineHandler to
1147         EngineColonLineHandler.  Change type of member cmd.fnc from
1148         GpgmeCommandHandler to EngineCommandHandler.
1149         * engine-gpgsm.c (struct gpgsm_object_s): Likewise.
1150         * rungpg.c (gpg_set_status_handler): Change parameter type from
1151         GpgmeStatusHandler to EngineStatusHandler.
1152         * engine-gpgsm.c (gpgsm_set_status_handler): Likewise.
1153         (assuan_simple_command): Likewise.
1154         * rungpg.c (gpg_set_colon_line_handler): Change parameter type
1155         from GpgmeColonLineHandler to EngineColonLineHandler.
1156         * engine-gpgsm.c (gpgsm_set_colon_line_handler): Likewise.
1157         * rungpg.c (gpg_set_command_handler): Change parameter type from
1158         GpgmeCommandHandler to EngineCommandHandler.
1159
1160         * engine-gpgsm.c (status_handler): Do not close status fd at end
1161         of function.
1162
1163         * ops.h (_gpgme_op_data_lookup): Add prototype.
1164         * op-support.c: Include <stdlib.h>.
1165         (_gpgme_op_data_lookup): New function.
1166         * decrypt.c (_gpgme_release_decrypt_result): Function removed.
1167         (struct decrypt_result_s): Rename to ...
1168         (struct decrypt_resul): ... this.
1169         (DecryptResult): New type.
1170         (_gpgme_decrypt_status_handler): Don't use
1171         test_and_allocate_result, but use _gpgme_op_data_lookup to
1172         retrieve result data object.
1173         * sign.c (_gpgme_release_sign_result): Function removed.
1174         (release_sign_result): New function.
1175         (struct sign_result_s): Rename to ...
1176         (struct sign_result): ... this.
1177         (SignResult): New type.
1178         (_gpgme_sign_status_handler): Don't use
1179         test_and_allocate_result, but use _gpgme_op_data_lookup to
1180         retrieve result data object.
1181         * encrypt.c (struct encrypt_result_s): Rename to ...
1182         (struct encrypt_result): ... this.
1183         (_gpgme_release_encrypt_result): Function removed.
1184         (release_encrypt_result): New function.
1185         (_gpgme_encrypt_status_handler): Don't use
1186         test_and_allocate_result, but use _gpgme_op_data_lookup to
1187         retrieve result data object.
1188         * verify.c (struct verify_result_s): Rename to ...
1189         (struct verify_result): ... this.  Remove member next.
1190         (VerifyResult): New type.
1191         (_gpgme_release_verify_result): Function removed.
1192         (release_verify_result): New function.
1193         (finish_sig): Change first argument to type VerifyResult.  Diddle
1194         the type of the op_data structure.
1195         (add_notation): Change first argument to type VerifyResult.
1196         (_gpgme_verify_status_handler): Don't use
1197         test_and_allocate_result, but use _gpgme_op_data_lookup to
1198         retrieve result data object.
1199         * passphrase.c (struct passphrase_result_s): Rename to ...
1200         (struct passphrase_result): ... this.  Remove member next.
1201         (PassphraseResult): New type.
1202         (_gpgme_release_passphrase_result): Function removed.
1203         (release_passphrase_result): New function.
1204         (_gpgme_passphrase_status_handler): Don't use
1205         test_and_allocate_result, but use _gpgme_op_data_lookup to
1206         retrieve result data object.
1207         (_gpgme_passphrase_command_handler): Likewise.
1208         * keylist.c (struct keylist_result_s): Rename to ...
1209         (struct keylist_result): ... this.  Remove member next.
1210         (KeylistResult): New type.
1211         (_gpgme_release_keylist_result): Function removed.
1212         (release_keylist_result): New function.
1213         (keylist_status_handler): Don't use
1214         test_and_allocate_result, but use _gpgme_op_data_lookup to
1215         retrieve result data object.
1216         * edit.c (struct edit_result_s): Rename to ...
1217         (struct edit_result): ... this.  Remove member next.
1218         (EditResult): New type.
1219         (_gpgme_release_edit_result): Function removed.
1220         (release_edit_result): New function.
1221         (edit_status_handler): Don't use
1222         test_and_allocate_result, but use _gpgme_op_data_lookup to
1223         retrieve result data object.
1224         (command_handler): Likewise.
1225         * types.h (DecryptResult, SignResult, EncryptResult,
1226         PassphraseResult, ImportResult, DeleteResult, GenKeyResult,
1227         KeylistResult, EditResult): Types removed.
1228         * ops.h: Don't include "types.h", but "gpgme.h" and "context.h".
1229         (test_and_allocate_result): Remove macro.
1230         (_gpgme_release_decrypt_result): Remove prototype.
1231         (_gpgme_decrypt_result): Remove prototype.
1232         (_gpgme_release_sign_result): Remove prototype.
1233         (_gpgme_release_encrypt_result): Remove prototype.
1234         (_gpgme_release_passphrase_result): Remove prototype.
1235         (_gpgme_release_import_result): Remove prototype.
1236         (_gpgme_release_delete_result): Remove prototype.
1237         (_gpgme_release_genkey_result): Remove prototype.
1238         (_gpgme_release_keylist_result): Remove prototype.
1239         (_gpgme_release_edit_result): Remove prototype.
1240         (_gpgme_release_verify_result): Remove prototype.
1241         * gpgme.c (_gpgme_release_result): Rewritten.
1242         * context.h (enum ctx_op_data_type): New enum.
1243         (struct ctx_op_data): New structure.
1244         (struct gpgme_context_s): Replace the member result with a member
1245         op_data.
1246         (fail_on_pending_request): Remove macro.
1247         * op-support.c (_gpgme_op_reset): Expand macro
1248         fail_on_pending_request.
1249         * util.h: Don't include "types.h" or "debug.h", but include "gpgme.h".
1250
1251 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
1252
1253         * types.h (EngineObject): Move typedef to ...
1254         * engine.h: ... here.
1255         * types.h (GpgObject): Move typedef to ...
1256         * rungpg.c: ... here.
1257         * types.h (GpgsmObject): Move typedef to ...
1258         * engine-gpgsm.c: ... here.
1259
1260         * util.h (return_if_fail, return_null_if_fail,
1261         return_val_if_fail): Remove macro.
1262         * gpgme.c (gpgme_cancel): Don't use return_if_fail.
1263         * key.c (gpgme_key_ref): Likewise.
1264         * signers.c (gpgme_signers_enum): Likewise.
1265         (gpgme_signers_clear): Likewise.
1266
1267         * engine-backend.h (struct engine_ops): Rename get_path to
1268         get_file_name.
1269         * gpgme.h (struct _gpgme_engine_info): Rename member path to
1270         file_name.
1271         * version.c: Do not include <stdio.h>, <stdlib.h>, context.h and
1272         util.h.  Other clean ups.
1273         (parse_version_number): Protect more seriously against
1274         overflow.
1275         (gpgme_get_engine_info): Move to ...
1276         * engine.c (gpgme_get_engine_info): ... here.
1277         (_gpgme_engine_get_info): Function removed.
1278         (_gpgme_engine_get_path): Make static and rename to ...
1279         (engine_get_file_name): .. this.
1280         (_gpgme_engine_get_version): Make static and rename to ...
1281         (engine_get_version): ... this.
1282         (_gpgme_engine_get_req_version): Make static and rename to ...
1283         (engine_get_req_version): ... this.
1284         * engine.h (_gpgme_engine_get_path, _gpgme_engine_get_version,
1285         _gpgme_engine_req_version, _gpgme_engine_get_info.): Remove
1286         prototypes.
1287
1288         * gpgme.h (enum GpgmeProtocol): Remove GPGME_PROTOCOL_AUTO.
1289         * gpgme.c (gpgme_set_protocol): Don't handle GPGME_PROTOCOL_AUTO.
1290         (gpgme_get_protocol_name): New function.
1291
1292         * engine-backend.h (struct engine_ops): New member
1293         get_req_version, remove member check_version.
1294         * engine.h (_gpgme_Engine_get_version): New prototype.
1295         * rungpg.c (gpg_get_req_version): New function.
1296         (gpg_check_version): Function removed.
1297         (_gpgme_engine_ops_gpg): Add gpg_get_req_version, remove
1298         gpg_check_version.
1299         * engine-gpgsm.c (gpgsm_get_req_version): New function.
1300         (gpgsm_check_version): Function removed.
1301         (_gpgme_engine_ops_gpgsm): Add gpgsm_get_req_version, remove
1302         gpgsm_check_version.
1303         * engine.c: Include ops.h.
1304          (_gpgme_engine_get_req_version): New function.
1305         (gpgme_engine_check_version): Rewritten.
1306         * version.c (gpgme_get_engine_info): Rewritten.
1307         * gpgme.h (gpgme_engine_info): New structure.
1308         (GpgmeEngineInfo): New type.
1309         
1310 2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
1311
1312         * types.h: Remove byte and ulong types.
1313         * util.h (_gpgme_hextobyte): Change prototype to unsigned char
1314         instead byte.
1315         * conversion.c (_gpgme_hextobyte): Change argument to unsigned
1316         char instead byte.
1317         (_gpgme_decode_c_string): Likewise, and beautify.  Also support a
1318         few more escaped characters.  Be more strict about buffer size.
1319         (_gpgme_data_append_percentstring_for_xml): Change type of SRC,
1320         BUF and DST to unsigned char instead byte.
1321         * progress.c (_gpgme_progress_status_handler): Use unsigned char
1322         instead byte.
1323         * debug.c (trim_spaces): Likewise.
1324
1325         * util.h (mk_error): Remove macro.
1326         * conversion.c, data.c, data-compat.c, decrypt.c, delete.c,
1327         edit.c, encrypt.c, encrypt-sign.c, engine.c, engine-gpgsm.c,
1328         export.c, genkey.c, gpgme.c, import.c, key.c, keylist.c,
1329         passphrase.c, progress.c, recipient.c, rungpg.c, sign.c,
1330         signers.c, trustlist.c, verify.c, wait.c, wait-global.c,
1331         wait-private (literally everywhere): Expand the mk_error macro.
1332
1333         * context.h (wait_on_request_or_fail): Remove macro.
1334
1335         * context.h (gpgme_context_s): Remove member ERROR.
1336         * types.h (GpgmeStatusHandler): Change return type to GpgmeError.
1337         (GpgmeCommandHandler): Change return type to GpgmeError and add
1338         new argument RESULT.
1339         * gpgme.h (GpgmeIOCb): Change return type to GpgmeError.
1340         (GpgmeEventIO): New event GPGME_EVENT_START.
1341         (GpgmeIdleFunc): Remove type.
1342         (gpgme_register_idle): Remove prototype.
1343         * data.c: Include <assert.h>.
1344         (_gpgme_data_inbound_handler): Change return type to GpgmeError.
1345         Return any error instead ignoring it, don't close file descriptor
1346         on error.
1347         (_gpgme_data_outbound_handler): Likewise.
1348         * decrypt.c: Do not include <stdio.h>, <string.h> and <assert.h>.
1349         (_gpgme_decrypt_status_handler): Change return type to GpgmeError.
1350         Return error instead setting ctx->error.  Return success at end of
1351         function.
1352         (gpgme_op_decrypt): Don't work around the old kludge anymore.
1353         * decrypt-verify.c (decrypt_verify_status_handler): Change return
1354         type to GpgmeError.  Return possible errors.
1355         * delete.c: Do not include <stdio.h>, <string.h>, <time.h> and
1356         <assert.h>.
1357         (delete_status_handler): Change return type to GpgmeError.  Return
1358         error instead setting ctx->error.  Return success at end of
1359         function.
1360         * edit.c: Do not include <stdio.h> and <string.h>.
1361         (_gpgme_edit_status_handler): Change type to GpgmeError,
1362         make static and rename to ...
1363         (edit_status_handler): ... this.  Return error directly.
1364         (command_handler): Change return type to GpgmeError, add result
1365         argument.  Return error directly.
1366         * encrypt.c (status_handler_finish): Remove function.
1367         (_gpgme_encrypt_status_handler): Change return type to GpgmeError.
1368         Return error directly.
1369         (_gpgme_encrypt_sym_status_handler): Likewise.
1370         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
1371         * engine-gpgsm.c (close_notify_handler): Do not signal done event
1372         anymore.
1373         (status_handler): Change return type to GpgmeError.  Diddle things
1374         around a bit to return errors directly.
1375         (start): Send start event.
1376         * export.c: Do not include <stdio.h>, <string.h> and <assert.h>.
1377         (export_status_handler): Change return type to GpgmeError.  Don't
1378         check ctx->error.
1379         * genkey.c: Do not include <stdio.h> and <assert.h>.
1380         (genkey_status_handler): Change return type to GpgmeError.  Don't
1381         check ctx->error.  Return errors directly.
1382         * gpgme.c (_gpgme_release_result): Do not initialize ctx->error.
1383         (_gpgme_op_event_cb): Function removed.
1384         (_gpgme_op_event_cb_user): Likewise.
1385         * import.c: Do not include <stdio.h>, <string.h> and <assert.h>.
1386         (import_status_handler): Change return type to GpgmeError.  Don't
1387         check ctx->error.
1388         * keylist.c (keylist_colon_handler, keylist_status_handler, finish_key):
1389         Change return type to GpgmeError, return error directly.
1390         * Makefile (libgpgme_la_SOURCES): Add wait-global.c,
1391         wait-private.c and wait-user.c
1392         * ops.h (test_and_allocate_result): Return error instead setting
1393         ctx->error.
1394         (_gpgme_data_inbound_handler, _gpgme_data_outbound_handler,
1395         _gpgme_verify_status_handler, _gpgme_decrypt_status_handler,
1396         _gpgme_sign_status_handler, _gpgme_encrypt_staus_handler,
1397         _gpgme_passphrase_status_handler, _gpgme_progress_status_handler):
1398         Change return type to GpgmeError.
1399         (_gpgme_passphease_command_handler): Change return type to
1400         GpgmeError and add new argument RESULT.
1401         * op-support.c: Use new callback functions, and change private
1402         data to ctx everywhere.
1403         * passphrase.c (_gpgme_passphrase_status_handler): Change return
1404         type to GpgmeError, return error directly.
1405         (_gpgme_passphrase_command_handler): Change return type to
1406         GpgmeError, add result argument.  Return results accordingly.
1407         * progress.c (_gpgme_progress_status_handler): Change return type
1408         to GpgmeError, return errors directly.
1409         * rungpg.c (status_handler): Change return type to GpgmeError.
1410         Return error directly.
1411         (close_notify_handler): Don't send done event.
1412         (colon_line_handler): Change return type to GpgmeError, return
1413         errors directly.
1414         * rungpg.c (start): Send start event.
1415         * sign.c (_gpgme_sign_status_handler): Change return type to
1416         GpgmeError, return errors directly.
1417         * trustlist.c (trustlist_status_handler): Change return type to
1418         GpgmeError.  Return 0.
1419         (trustlist_colon_handler): Change return type GpgmeError.  Return
1420         errors directly.
1421         * verify.c (add_notation): Change return type to GpgmeError,
1422         return errors directly.
1423         (_gpgme_verify_status_handler): Likewise.
1424         * wait.h (struct fd_table): Remove lock member.
1425         (struct wait_item_s): Moved here from wait.c.
1426         (struct tag): New structure.
1427         (_gpgme_wait_event_cb): Remove prototype.
1428         (_gpgme_wait_private_event_cb, _gpgme_wait_global_event_cb,
1429         _gpgme_wait_user_add_io_cb, _gpgme_wait_user_remove_io_cb,
1430         _gpgme_wait_user_event_io_cb): New prototypes.
1431         * wait.c: Don't include <stdio.h>.
1432         (ftd_global, ctx_done_list, ctx_done_list_size,
1433         ctx_done_list_length, ctx_done_list_lock, idle_function): Remove
1434         global variable.
1435         (gpgme_register_idle, do_select, _gpgme_wait_event_cb): Remove
1436         function.
1437         (gpgme_wait): Move to file wait-global.c.
1438         (_gpgme_add_io_cb): Take ctx as private argument, initialize ctx
1439         member in wait item and tag.
1440         (_gpgme_remove_io_cb): Take ctx from tag.  Don't use FDT lock.
1441         (_gpgme_wait_one, _gpgme_wait_on_condition): Move to
1442         wait-private.c.
1443         (gpgme_fd_table_init): Don't initialize FDT->lock.
1444         (gpgme_fd_table_deinit): Don't destroy FDT->lock.
1445         (_gpgme_fd_table_put): Make static and rename to ...
1446         (fd_table_put): ... this function.  Don't use FDT->lock.
1447         (struct wait_item_s): Move to wait.h.
1448         * wait-global.c: New file.
1449         * wait-private.c: New file.
1450         * wait-user.c: New file.
1451
1452         * key.c (gpgme_key_sig_get_string_attr): Use validity_to_string
1453         instead otrust_to_string to calculate validity.
1454         
1455 2003-01-19  Miguel Coca  <mcoca@gnu.org>
1456
1457         * w32-io.c (_gpgme_io_select): Add missing argument in calls to
1458         DEBUG_BEGIN.
1459         * w32-util.c: Include "sema.h".
1460         (find_program_in_registry): Change DEBUG1 to DEBUG2, fixes compilation
1461         error.
1462
1463 2003-01-19  Marcus Brinkmann  <marcus@g10code.de>
1464
1465         * rungpg.c (_gpgme_engine_ops_gpg): Remove gpg_start.
1466         (gpg_start): Rename to ...
1467         (start): ... this function.  Change arguments to GpgObject.
1468         (gpg_decrypt): Call start.
1469         (gpg_edit): Likewise.
1470         (gpg_encrypt): Likewise.
1471         (gpg_encrypt_sign): Likewise.
1472         (gpg_export): Likewise.
1473         (gpg_import): Likewise.
1474         (gpg_keylist): Likewise.
1475         (gpg_keylist_ext): Likewise.
1476         (gpg_trustlist): Likewise.
1477         (gpg_verify): Likewise.
1478
1479         * engine-gpgsm.c (_gpgme_engine_ops_encrypt): Remove gpgsm_start.
1480         (gpgsm_start): Rename to ...
1481         (struct gpgsm_object_s): Remove member command.
1482         (gpgsm_release): Don't free command.
1483         (start): ... this function.  Change arguments to GpgsmObject and
1484         const char *.
1485         (gpgsm_decrypt): Call start.
1486         (gpgsm_delete): Likewise.
1487         (gpgsm_encrypt): Likewise.
1488         (gpgsm_export): Likewise.
1489         (gpgsm_genkey): Likewise.
1490         (gpgsm_import): Likewise.
1491         (gpgsm_keylist): Likewise.
1492         (gpgsm_keylist_ext): Likewise.
1493         (gpgsm_verify): Likewise.
1494
1495         * decrypt.c (_gpgme_decrypt_start): Don't call
1496         _gpgme_engine_start.
1497         * delete.c (_gpgme_op_delete_start): Likewise.
1498         * edit.c (_gpgme_op_edit_start): Likewise.
1499         * encrypt.c (_gpgme_op_encrypt_start): 
1500         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): 
1501         * export.c (_gpgme_op_export_start): Likewise.
1502         * genkey.c (_gpgme_op_genkey_start): Likewise.
1503         * import.c (_gpgme_op_import_start): Likewise.
1504         * keylist.c (gpgme_op_keylist_ext_start): Likewise.
1505         (gpgme_op_keylist_start): Likewise.
1506         * sign.c (_gpgme_op_sign_start): Likewise.
1507         * trustlist.c (gpgme_op_trustlist_start): Likewise.
1508         * verify.c (_gpgme_op_verify_start): Likewise.
1509
1510         * engine-backend.h (struct engine_ops): Remove member start.
1511
1512         * engine.h (_gpgme_engine_start): Remove prototype.
1513         * engine.c (_gpgme_engine_start): Remove function.
1514
1515 2003-01-06  Werner Koch  <wk@gnupg.org>
1516
1517         * keylist.c (set_mainkey_capability): Handle 'd' and 'D' used
1518         since gpg 1.3 to denote disabled keys.
1519
1520 2003-01-06  Marcus Brinkmann  <marcus@g10code.de>
1521
1522         * data-mem.c: Include <string.h>.
1523         * engine.c: Likewise.
1524
1525 2003-01-06  Marcus Brinkmann  <marcus@g10code.de>
1526
1527         * Makefile.am (libgpgme_la_DEPENDENCIES): Correct bug in last change.
1528
1529 2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
1530
1531         * gpgme.h (gpgme_op_verify, gpgme_op_decrypt_verify): Drop R_STAT
1532         argument.
1533         * decrypt-verify.c (gpgme_op_decrypt_verify): Drop R_STAT
1534         argument.
1535         * verify.c (gpgme_op_verify): Drop R_STAT argument.
1536         (_gpgme_intersect_stati): Function removed.
1537         * ops.h (_gpgme_intersect_stati): Remove prototype.
1538
1539 2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
1540
1541         * libgpgme.vers: New file.
1542         * Makefile.am (EXTRA_DIST): Add libgpgme.vers.
1543         (libgpgme_version_script_cmd): New variable.
1544         (libgpgme_la_LDFLAGS): Add libgpgme_version_script_cmd here.
1545         (libgpgme_la_DEPENDENCIES): New variable.
1546
1547 2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
1548
1549         * key.c (gpgme_key_get_string_attr): Don't accept GPGME_ATTR_IS_SECRET.
1550         (otrust_to_string): New function.
1551         (gpgme_key_get_as_xml): Use it.
1552         (validity_to_string): New function.
1553         (gpgme_key_get_string_attr): Beautify using above functions.
1554         (gpgme_key_get_ulong_attr): Likewise.
1555
1556 2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
1557
1558         * data-mem.c (mem_release): Fix gcc warning.
1559         * data-user.c (user_release): Likewise.
1560
1561 2002-12-06  Marcus Brinkmann  <marcus@g10code.de>
1562
1563         * data.h (gpgme_data_release_cb): Change return type to void.
1564         (gpgme_data_read_cb): Change return type to ssize_t.
1565         * data.c (gpgme_data_read): Likewise.
1566         * data-stream.c (stream_read): Likewise.
1567         * data-fd.c (fd_read): Likewise.
1568         * data-mem.c (mem_read): Likewise.
1569         (mem_release): Change return type to void.
1570         * data-user.c (user_read): Change return type to ssize_t.
1571         (user_release): Change return type to void.
1572         * data-compat.c (old_user_read): Change return type to ssize_t. 
1573         * gpgme.h (GpgmeDataReadCb): Likewise.
1574         (gpgme_data_read): Likewise.
1575         (GpgmeDataSeekCb): Change return type to off_t.
1576
1577 2002-12-04  Marcus Brinkmann  <marcus@g10code.de>
1578
1579         * gpgme.h: Add prototype for gpgme_get_key.
1580         * key.c (gpgme_get_key): New function.
1581         * verify.c (gpgme_get_sig_key): Rewrite using gpgme_get_key.
1582
1583         * gpgme.h: Add prototypes for new interfaces
1584         gpgme_key_sig_get_string_attr and gpgme_key_get_ulong_attr.
1585         (enum GpgmeAttr): New attribute GPGME_ATTR_SIG_CLASS.
1586         * gpgme.c (gpgme_set_keylist_mode): Allow GPGME_KEYLIST_MODE_SIGS.
1587         * key.h (struct certsig_s): New members ALGO, NAME_PART,
1588         EMAIL_PART, COMMENT_PART, NAME, SIG_STAT and SIG_CLASS.
1589
1590         * conversion.c (_gpgme_decode_c_string): Add new parameter LEN.
1591         Use that to determine if allocation is desired or not.
1592         * util.h: Adjust prototype of _gpgme_decode_c_string.
1593         * keylist.c (keylist_colon_handler): Adjust caller of
1594         _gpgme_decode_c_string.
1595
1596         * key.h (struct gpgme_key_s): New member last_uid.
1597         * key.c (_gpgme_key_append_name): Rewritten using
1598         _gpgme_decode_c_string and the last_uid pointer.
1599         (my_isdigit): Macro removed.
1600         (ALLOC_CHUNK): Likewise.
1601         * keylist.c (set_userid_flags): Use last_uid member of KEY.
1602
1603         * context.h (struct user_id_s): New member last_certsig.
1604         * key.h: Add prototype for _gpgme_key_add_certsig.
1605         * key.c (_gpgme_key_add_certsig): New function.
1606         (set_user_id_part): Move function before _gpgme_key_add_certsig.
1607         (parse_user_id): Change first argument to SRC, add new arguments
1608         NAME, EMAIL and COMMENT.  Change code to use these arguments
1609         instead going through UID.  Move function before
1610         _gpgme_add_certsig.
1611         (parse_x509_user_id): Likewise.
1612         (_gpgme_key_append_name): Adjust arguments to parse_x509_user_id
1613         and parse_user_id invocation.
1614         (one_certsig_as_xml): New function.
1615         (one_uid_as_xml): Print signatures.
1616         * context.h (struct gpgme_context_s): New member TMP_UID.
1617         * keylist.c (keylist_colon_handler): Rewritten, implement "sig"
1618         record entries.
1619
1620         * key.c (get_certsig): New function.
1621         (gpgme_key_sig_get_string_attr): Likewise.
1622         (gpgme_key_sig_get_ulong_attr): Likewise.
1623
1624         * keylist.c: Include <ctype.h>.
1625         (my_isdigit): Macro removed.
1626         (set_mainkey_trust_info): Use isdigit, not my_isdigit.
1627         (set_userid_flags): Likewise.
1628         (set_subkey_trust_info): Likewise.
1629         (set_ownertrust): Likewise.
1630         (finish_key): Move function up a bit and remove prototype.
1631
1632         * rungpg.c (gpg_keylist_ext): Correct precedence of signature
1633         listing mode.
1634         (gpg_keylist_ext): Implement signature listing mode.
1635
1636 2002-11-25  Marcus Brinkmann  <marcus@g10code.de>
1637
1638         * rungpg.c (_gpgme_gpg_spawn): Do not set parent fds to -1.
1639         * posix-io.c (_gpgme_io_spawn): Call _gpgme_io_close instead close
1640         for parent fds.
1641         * w32-io.c (_gpgme_io_spawn): Call _gpgme_io_close instead
1642         CloseHandle for parent fds.
1643
1644 2002-11-22  Marcus Brinkmann  <marcus@g10code.de>
1645
1646         * gpgme.h [_MSC_VER]: Define ssize_t as long.
1647
1648 2002-11-22  Werner Koch  <wk@gnupg.org>
1649
1650         * engine-gpgsm.c (_gpgme_gpgsm_new): Save the result of a first
1651         setlocale before doing another setlocale.
1652
1653 2002-11-21  Marcus Brinkmann  <marcus@g10code.de>
1654
1655         * decrypt.c: Some beautyfication.
1656
1657         * verify.c (_gpgme_verify_status_handler): Treat
1658         GPGME_STATUS_UNEXPECTED like GPGME_STATUS_NODATA.
1659         Reported by Miguel Coca <e970095@zipi.fi.upm.es>.
1660
1661 2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
1662
1663         * genkey.c: Only include <config.h> if [HAVE_CONFIG_H].
1664         (struct genkey_result_s): Add new member FPR.
1665         (_gpgme_release_genkey_result): Free RESULT->fpr if set.
1666         (genkey_status_handler): Extract the fingerprint from the status
1667         line.
1668         (gpgme_op_genkey): Add new argument FPR and return the fingerprint
1669         in it.
1670         * gpgme.h: Adjust prototype of gpgme_op_genkey.
1671
1672 2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
1673
1674         * rungpg.c (gpg_keylist): Add --with-fingerprint to gpg invocation
1675         twice, to get fingerprints on subkeys.  Suggested by Timo Schulz
1676         <twoaday@freakmail.de>.
1677         (gpg_keylist_ext): Likewise.
1678
1679 2002-11-05  Marcus Brinkmann  <marcus@g10code.de>
1680
1681         * import.c (append_xml_impinfo): Use
1682         _gpgme_data_append_string_for_xml rather than
1683         _gpgme_data_append_string for the field content.
1684         Submitted by Miguel Coca <e970095@zipi.fi.upm.es>.
1685         
1686 2002-10-10  Marcus Brinkmann  <marcus@g10code.de>
1687
1688         * rungpg.h, engine-gpgsm.h: File removed.
1689         * engine-backend.h: New file.
1690         * Makefile.am (gpgsm_components): New variable, set depending on
1691         automake conditional HAVE_GPGSM.
1692         (libgpgme_la_SOURCES): Add engine-backend.h, remove rungpg.h and
1693         engine-gpgsm.h.  Replace engine-gpgsm.c with ${gpgsm_components}.
1694         (status-table.h): Depend on gpgme.h, not rungpg.h.
1695         * conversion.c: Include <stdlib.h>.
1696         * engine-gpgsm.c: Do not set ENABLE_GPGSM here.  Include
1697         "engine-backend.h" instead "engine-gpgsm.h".  Reorder some
1698         functions and remove all function prototypes.
1699         (_gpgme_gpgsm_get_version): Make static and rename to ...
1700         (gpgsm_get_version): ... this.
1701         (_gpgme_gpgsm_check_version): Make static and rename to ...
1702         (gpgsm_check_version): ... this.
1703         (_gpgme_gpgsm_new): Make static.  Change argument type from
1704         GpgsmObject * to void **.  Call gpgsm_release instead
1705         _gpgme_gpgsm_release.
1706         (_gpgme_gpgsm_op_decrypt): Make static and rename to ...
1707         (gpgsm_check_decrypt): ... this.
1708         (_gpgme_gpgsm_op_delete): Make static and rename to ...
1709         (gpgsm_check_delete): ... this.
1710         (_gpgme_gpgsm_set_recipients): Make static and rename to ...
1711         (gpgsm_check_set_recipients): ... this.
1712         (_gpgme_gpgsm_op_encrypt): Make static and rename to ...
1713         (gpgsm_encrypt): ... this.
1714         (_gpgme_gpgsm_op_export): Make static and rename to ...
1715         (gpgsm_export): ... this.
1716         (_gpgme_gpgsm_op_genkey): Make static and rename to ...
1717         (gpgsm_genkey): ... this.
1718         (_gpgme_gpgsm_op_import): Make static and rename to ...
1719         (gpgsm_import): ... this.
1720         (_gpgme_gpgsm_op_keylist): Make static and rename to ...
1721         (gpgsm_keylist): ... this.
1722         (_gpgme_gpgsm_op_keylist_ext): Make static and rename to ...
1723         (gpgsm_keylist_ext): ... this.
1724         (_gpgme_gpgsm_op_sign): Make static and rename to ...
1725         (gpgsm_sign): ... this.
1726         (_gpgme_gpgsm_op_trustlist): Make static and rename to ...
1727         (gpgsm_trustlist): ... this.
1728         (_gpgme_gpgsm_op_verify): Make static and rename to ...
1729         (gpgsm_verify): ... this.
1730         (gpgsm_status_handler): Rename to ...
1731         (status_handler): ... this.
1732         (_gpgme_gpgsm_set_status_handler): Make static and rename to ...
1733         (gpgsm_set_status_handler): ... this.
1734         (_gpgme_gpgsm_set_colon_line_handler): Make static and rename to ...
1735         (gpgsm_set_colon_line_handler): ... this.
1736         (_gpgme_gpgsm_add_io_cb): Rename to ...
1737         (add_io_cb): ... this.
1738         (_gpgme_gpgsm_start): Make static and rename to ...
1739         (gpgsm_start): ... this.
1740         (_gpgme_gpgsm_set_io_cb): Make static and rename to ...
1741         (gpgsm_set_io_cb): ... this.
1742         (_gpgme_gpgsm_io_event): Make static and rename to ...
1743         (gpgsm_io_event): ... this.
1744         (struct _gpgme_engine_ops_gpgsm): New variable.
1745         [!ENABLE_GPGSM]: Removed.
1746         * engine.c: Do not include <time.h>, <sys/types.h>, <string.h>,
1747         <assert.h>, "io.h", "rungpg.h" and "engine-gpgsm.h".  Include
1748         <stdlib.h> and "engine-backend.h".
1749         (struct engine_object_s): Rewritten.
1750         (engine_ops): New variable.
1751         * engine.c (_gpgme_engine_get_path, _gpgme_engine_get_version,
1752         _gpgme_engine_check_version, _gpgme_engine_new,
1753         _gpgme_engine_release, _gpgme_engine_set_verbosity,
1754         _gpgme_engine_set_status_handler,
1755         _gpgme_engine_set_command_handler,
1756         _gpgme_engine_set_colon_line_handler, _gpgme_engine_op_decrypt,
1757         _gpgme_engine_op_delete, _gpgme_engine_op_edit,
1758         _gpgme_engine_op_encrypt, _gpgme_engine_op_encrypt_sign,
1759         _gpgme_engine_op_export, _gpgme_engine_op_genkey,
1760         _gpgme_engine_op_import, _gpgme_engine_op_keylist,
1761         _gpgme_engine_op_keylist_ext, _gpgme_engine_op_sign,
1762         _gpgme_engine_op_trustlist, _gpgme_engine_op_verify,
1763         _gpgme_engine_start, _gpgme_engine_set_io_cbs,
1764         _gpgme_engine_io_event): Reimplement.
1765         * engine.h: Fix a few comments and a variable name in a prototype.
1766         * ops.h: Do not include "rungpg.h".
1767         * passphrase.c: Include config.h only if [HAVE_CONFIG_H].  Do not
1768         include "rungpg.h".
1769         * recipient.c: Likewise.
1770         * signers.c: Likewise.
1771         * version.c: Likewise.
1772         * rungpg.c: Likewise.  Include "engine-backend.h".  Reorder
1773         functions and remove prototypes.
1774         (_gpgme_gpg_get_version): Make static and rename to ...
1775         (gpg_get_version): ... this.
1776         (_gpgme_gpg_check_version): Make static and rename to ...
1777         (gpg_check_version): ... this.
1778         (_gpgme_gpg_new): Make static.  Change argument type from
1779         GpgObject * to void **.  Call gpg_release instead
1780         _gpgme_gpg_release.
1781         (_gpgme_gpg_op_decrypt): Make static and rename to ...
1782         (gpg_check_decrypt): ... this.
1783         (_gpgme_gpg_op_delete): Make static and rename to ...
1784         (gpg_check_delete): ... this.
1785         (_gpgme_gpg_set_recipients): Make static and rename to ...
1786         (gpg_check_set_recipients): ... this.
1787         (_gpgme_gpg_op_encrypt): Make static and rename to ...
1788         (gpg_encrypt): ... this.
1789         (_gpgme_gpg_op_export): Make static and rename to ...
1790         (gpg_export): ... this.
1791         (_gpgme_gpg_op_genkey): Make static and rename to ...
1792         (gpg_genkey): ... this.
1793         (_gpgme_gpg_op_import): Make static and rename to ...
1794         (gpg_import): ... this.
1795         (_gpgme_gpg_op_keylist): Make static and rename to ...
1796         (gpg_keylist): ... this.
1797         (_gpgme_gpg_op_keylist_ext): Make static and rename to ...
1798         (gpg_keylist_ext): ... this.
1799         (_gpgme_gpg_op_sign): Make static and rename to ...
1800         (gpg_sign): ... this.
1801         (_gpgme_gpg_op_trustlist): Make static and rename to ...
1802         (gpg_trustlist): ... this.
1803         (_gpgme_gpg_op_verify): Make static and rename to ...
1804         (gpg_verify): ... this.
1805         (gpg_status_handler): Rename to ...
1806         (status_handler): ... this.
1807         (_gpgme_gpg_set_status_handler): Make static and rename to ...
1808         (gpg_set_status_handler): ... this.
1809         (_gpgme_gpg_set_colon_line_handler): Make static and rename to ...
1810         (gpg_set_colon_line_handler): ... this.
1811         (gpgme_gpg_add_io_cb): Rename to ...
1812         (add_io_cb): ... this.
1813         (_gpgme_gpg_start): Make static and rename to ...
1814         (gpg_start): ... this.
1815         (_gpgme_gpg_set_io_cb): Make static and rename to ...
1816         (gpg_set_io_cb): ... this.
1817         (_gpgme_gpg_io_event): Make static and rename to ...
1818         (gpg_io_event): ... this.
1819         (struct _gpgme_engine_ops_gpg): New variable.
1820
1821 2002-10-10  Marcus Brinkmann  <marcus@g10code.de>
1822
1823         * engine-gpgsm.c (_gpgme_gpgsm_op_verify) [!ENABLE_GPGSM]: Add
1824         missing argument.
1825
1826 2002-10-09  Marcus Brinkmann  <marcus@g10code.de>
1827
1828         * data.h, data-user.c, data-stream.c, data-mem.c, data-fd.c,
1829         data-compat.c: New file.  Really check them in this time, completes
1830         2002-10-08 change.
1831
1832         * rungpg.h (GpgStatusHandler): Rename type to GpgmeStatusHandler
1833         and move to ...
1834         * types.h (GpgmeStatusHandler): ... here.
1835         * rungpg.h (GpgColonLineHandler): Rename type to GpgmeColonLineHandler.
1836         and move to ...
1837         * types.h (GpgmeColonLineHandler): ... here.
1838         * rungpg.h (GpgCommandHandler): Rename type to GpgmeCommandHandler.
1839         and move to ...
1840         * types.h (GpgmeCommandHandler): ... here.
1841         * engine.h: Don't include "rungpg.h".
1842         (_gpgme_engine_set_status_handler): Change type of
1843         argument from GpgStatusHandler to GpgmeStatusHandler.
1844         (_gpgme_engine_set_colon_line_handler): Change type of
1845         argument from GpgColonLineHandler to GpgmeColonLineHandler.
1846         (_gpgme_engine_set_command_handler): Change type of
1847         argument from GpgCommandHandler to GpgmeCommandHandler.
1848         * engine-gpgsm.h: Don't include "rungpg.h".
1849         (_gpgme_gpgsm_set_status_handler): Change type of
1850         argument from GpgStatusHandler to GpgmeStatusHandler.
1851         (_gpgme_gpgsm_set_colon_line_handler): Change type of
1852         argument from GpgColonLineHandler to GpgmeColonLineHandler.
1853         * engine-gpgsm.c: Do not include "rungpg.h".
1854         (struct gpgsm_object_s): Change type of
1855         status.fnc to GpgmeStatusHandler.  Change type of colon.fnc to
1856         GpgmeColonLineHandler.
1857         (gpgsm_assuan_simple_command): Change type of argument from
1858         GpgStatusHandler to GpgmeStatusHandler.
1859         (_gpgme_gpgsm_set_status_handler): Likewise.
1860         (_gpgme_gpgsm_set_colon_line_handler): Change type of argument from
1861         GpgColonLineHandler to GpgmeColonLineHandler.
1862         * rungpg.h (_gpgme_gpg_set_status_handler): Change type of
1863         argument from GpgStatusHandler to GpgmeStatusHandler.
1864         (_gpgme_gpg_set_colon_line_handler): Change type of
1865         argument from GpgColonLineHandler to GpgmeColonLineHandler.
1866         (_gpgme_gpg_set_command_handler): Change type of
1867         argument from GpgCommandHandler to GpgmeCommandHandler.
1868         * rungpg.c (struct gpg_object_s): Change type of status.fnc to
1869         GpgmeStatusHandler.  Change type of colon.fnc to
1870         GpgmeColonLineHandler.  Change type of cmd.fnc to
1871         GpgmeCommandLineHandler.
1872         (_gpgme_gpg_set_status_handler): Change type of argument FNC to
1873         GpgmeStatusHandler.
1874         (_gpgme_gpg_set_colon_line_handler): Change type of argument FNC
1875         to GpgmeColonLineHandler.
1876         (_gpgme_gpg_set_command_handler): Change type of argument FNC to
1877         GpgmeCommandHandler.
1878         * engine.c (_gpgme_engine_set_status_handler): Change type of
1879         argument FNC to GpgmeStatusHandler.
1880         (_gpgme_engine_set_colon_line_handler): Change type of argument FNC
1881         to GpgmeColonLineHandler.
1882         (_gpgme_engine_set_command_handler): Change type of argument FNC to
1883         GpgmeCommandHandler.
1884
1885         * rungpg.h (_gpgme_gpg_enable_pipemode): Remove prototype.
1886         * rungpg.c (struct gpg_object_s): Remove PM.
1887         (pipemode_cb): Prototype removed.
1888         (add_pm_data): Function removed.
1889         (_gpgme_gpg_enable_pipemode): Likewise.
1890         (pipemode_copy): Likewise.
1891         (pipemode_cb): Likewise.
1892         (add_arg): Don't check for pipemode.
1893         (add_data): Likewise.
1894         (_gpgme_gpg_set_status_handler): Likewise.
1895         (_gpgme_gpg_set_colon_line_handler): Likewise.
1896         (_gpgme_gpg_set_command_handler): Likewise.
1897         (_gpgme_gpg_spawn): Likewise.
1898         (_gpgme_gpg_spawn): Don't set PM.active.
1899         (_gpgme_gpg_op_verify): Remove pipemode case.
1900         * verify.c (_gpgme_op_verify_start): Remove pipemode case.
1901
1902         * rungpg.h (_gpgme_gpg_add_arg, _gpgme_gpg_add_data,
1903         _gpgme_gpg_add_pm_data, _gpgme_gpg_housecleaning,
1904         _gpgme_gpg_set_simple_line_handler): Prototype removed.
1905         (_gpgme_gpg_set_verbosity): New prototype.
1906         * rungpg.c (_gpgme_gpg_add_data): Make static and rename to ...
1907         (add_data): ... this.
1908         (_gpgme_gpg_add_pm_data): Call add_data, not _gpgme_gpg_add_data.
1909         (_gpgme_gpg_set_command_handler): Likewise.
1910         (_gpgme_gpg_op_decrypt, _gpgme_gpg_op_edit, _gpgme_gpg_op_encrypt,
1911         _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
1912         _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_sign,
1913         _gpgme_gpg_op_verify): Likewise.
1914         (_gpgme_gpg_add_pm_data): Rename to ...
1915         (add_pm_data): ... this.
1916         (_gpgme_gpg_op_verify): Call add_pm_data, not
1917         _gpgme_gpg_add_pm_data.
1918         (_gpgme_gpg_add_arg): Make static and rename to ...
1919         (add_arg): ... this.
1920         (_gpgme_gpg_set_command_handler, _gpgme_gpg_new,
1921         _gpgme_gpg_op_decrypt, _gpgme_gpg_op_delete,
1922         _gpgme_append_gpg_args_from_signers, _gpgme_gpg_op_edit,
1923         _gpgme_append_gpg_args_from_recipients, _gpgme_gpg_op_encrypt,
1924         _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
1925         _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_keylist,
1926         _gpgme_gpg_op_keylist_ext, _gpgme_gpg_op_trustlist,
1927         _gpgme_gpg_op_sign, _gpgme_gpg_op_verify): Use add_arg, not
1928         _gpgme_gpg_add_arg.
1929         (_gpgme_gpg_set_verbosity): New function.
1930         (struct gpg_object_s): Remove member simple from colon.
1931         (_gpgme_gpg_set_colon_line_handler): Don't initialize simple.
1932         (_gpgme_gpg_set_simple_line_handler): Removed function.
1933         (read_colon_line): Don't check the GPG->colon.simple.
1934         * engine.c (_gpgme_engine_set_verbosity): Call
1935         _gpgme_gpg_set_verbosity instead _gpgme_gpg_add_arg.
1936
1937 2002-10-08  Marcus Brinkmann  <marcus@g10code.de>
1938
1939         * util.h (_gpgme_malloc, _gpgme_realloc, _gpgme_calloc,
1940         _gpgme_strdup, _gpgme_free): Remove prototypes.
1941         (xtrymalloc, xtrycalloc, xtryrealloc, xtrystrdup, xfree): Remove
1942         macros.
1943         * util.c: File removed.
1944         * Makefile.am (libgpgme_la_SOURCES): Remove util.h.
1945         * conversion.c (_gpgme_decode_c_string): Use malloc instead of
1946         xtrymalloc, realloc instead of xtryrealloc, calloc instead of
1947         xtrycalloc, free instead of xfree.
1948         (_gpgme_data_append_percentstring_for_xml): Likewise.
1949         * data.c (_gpgme_data_new, _gpgme_data_release): Likewise.
1950         * data-compat.c (gpgme_data_new_from_filepart): Likewise.
1951         * data-mem.c (mem_write, mem_release, gpgme_data_new_from_mem,
1952         _gpgme_data_get_as_string): Likewise.
1953         * debug.c (debug_init): Likewise.
1954         * decrypt.c (_gpgme_release_decrypt_result): Likewise.
1955         * delete.c (_gpgme_release_delete_result): Likewise.
1956         * edit.c (_gpgme_release_edit_result, _gpgme_op_edit_start):
1957         Likewise.
1958         * encrypt.c (_gpgme_release_encrypt_result): Likewise.
1959         * engine.c (_gpgme_engine_get_info, _gpgme_engine_new,
1960         _gpgme_engine_release): Likewise.
1961         * engine-gpgsm.c (_gpgme_gpgsm_new, _gpgme_gpgsm_release,
1962         _gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
1963         gpgsm_set_recipients, _gpgme_gpgsm_op_encrypt,
1964         _gpgme_gpgsm_op_export, _gpgme_gpgsm_op_genkey,
1965         _gpgme_gpgsm_op_import, _gpgme_gpgsm_op_keylist,
1966         _gpgme_gpgsm_op_keylist_ext, _gpgme_gpgsm_op_sign,
1967         _gpgme_gpgsm_op_verify, gpgsm_status_handler): Likewise.
1968         * genkey.c (_gpgme_release_genkey_result): Likewise.
1969         * gpgme.c (gpgme_new, gpgme_release): Likewise.
1970         * import.c (_gpgme_release_import_result): Likewise.
1971         * key.c (_gpgme_key_cache_init, _gpgme_key_cache_add, key_new,
1972         add_subkey, gpgme_key_release, _gpgme_key_append_name): Likewise.
1973         * keylist.c (_gpgme_release_keylist_result, keylist_colon_handler,
1974         _gpgme_op_keylist_event_cb, gpgme_op_keylist_next): Likewise.
1975         * ops.h (test_and_allocate_result): Likewise.
1976         * passphrase.c (_gpgme_release_passphrase_result,
1977         _gpgme_passphrase_status_handler,
1978         _gpgme_passphrase_command_handler): Likewise.
1979         * progress.c (_gpgme_progress_status_handler): Likewise.
1980         * recipient.c (gpgme_recipients_new, gpgme_recipients_release,
1981         gpgme_recipients_add_name_with_validity): Likewise.
1982         * rungpg.c (_gpgme_gpg_new, _gpgme_gpg_release,
1983         _gpgme_gpg_add_arg, _gpgme_gpg_add_data,
1984         _gpgme_gpg_set_colon_line_handler, free_argv, free_fd_data_map,
1985         build_argv, _gpgme_gpg_spawn, read_status, read_colon_line):
1986         Likewise.
1987         * sign.c (_gpgme_release_sign_result): Likewise.
1988         * signers.c (_gpgme_signers_add): Likewise.
1989         * trustlist.c (trust_item_new, trustlist_colon_handler,
1990         _gpgme_op_trustlist_event_cb, gpgme_op_trustlist_next,
1991         gpgme_trustitem_release): Likewise.
1992         * verify.c (_gpgme_release_verify_result, finish_sig): Likewise.
1993         * version.c (gpgme_get_engine_info, _gpgme_get_program_version):
1994         Likewise.
1995         * w32-io.c (create_reader, create_writer, destroy_reader,
1996         destroy_writer, build_commandline, _gpgme_io_spawn): Likewise.
1997         * w32-sema.c (critsect_init, _gpgme_sema_cs_destroy): Likewise.
1998         * w32-util.c (read_w32_registry_string): Likewise.
1999         * wait.c (_gpgme_fd_table_deinit, _gpgme_fd_table_put,
2000         _gpgme_wait_event_cb, _gpgme_add_io_cb, _gpgme_remove_io_cb)
2001         * data-compat.c: Include <stdlib.h>.
2002
2003 2002-10-08  Marcus Brinkmann  <marcus@g10code.de>
2004
2005         New data object component:
2006
2007         * gpgme.h (GpgmeDataReadCb, GpgmeDataWriteCb, GpgmeDataSeekCb,
2008         GpgmeDataReleaseCb): New types.
2009         (struct GpgmeDataCbs): New structure.
2010         (gpgme_data_read): Changed prototype to match that of read() closely.
2011         (gpgme_data_write): Similar for write().
2012         (gpgme_data_seek, gpgme_data_new_from_cbs, gpgme_data_new_from_fd,
2013         gpgme_data_new_from_stream): New prototypes.
2014         (gpgme_data_get_type, gpgme_check_engine): Prototype removed.
2015
2016         * Makefile.am (libgpgme_la_SOURCES): Add data.h, data-fd.c,
2017         data-stream.c, data-mem.c, data-user.c and data-compat.c.
2018         * data.c: Reimplemented from scratch.
2019         * (data-compat.c, data-fd.c, data.h, data-mem.c, data-stream.c,
2020         data-user.c): New file.
2021         * context.h (struct gpgme_data_s): Removed.
2022         * conversion.c: Include <errno.h> and <sys/types.h>.
2023         (_gpgme_data_append): New function.
2024         * data.c (_gpgme_data_append_string): Move to ...
2025         * conversion.c (_gpgme_data_append_string): ... here.
2026         * data.c (_gpgme_data_append_for_xml): Move to ...
2027         * conversion.c (_gpgme_data_append_for_xml): ... here.
2028         * data.c (_gpgme_data_append_string_for_xml): Move to ...
2029         * conversion.c (_gpgme_data_append_string_for_xml): ... here.
2030         * data.c (_gpgme_data_append_percentstring_for_xml): Move to ...
2031         * conversion.c (_gpgme_data_append_percentstring_for_xml): ... here.
2032
2033         * ops.h (_gpgme_data_get_mode, _gpgme_data_set_mode): Prototype
2034         removed.
2035         * types.h (GpgmeDataMode): Type removed.
2036
2037         * decrypt.c (_gpgme_decrypt_start): Don't check data type or mode.
2038         * edit.c (_gpgme_op_edit_start): Likewise.
2039         * encrypt.c (_gpgme_op_encrypt_start): Likewise.
2040         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
2041         * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
2042         * export.c (_gpgme_op_export_start): Likewise.
2043         * genkey.c (_gpgme_op_genkey_start): Likewise.
2044         * import.c (_gpgme_op_import_start): Likewise.
2045         * sign.c (_gpgme_op_sign_start): Likewise.
2046         * verify.c (_gpgme_op_verify_start): Likewise.
2047         
2048         * encrypt.c (gpgme_op_encrypt): Remove hack that returns invalid
2049         no recipient if no data was returned.
2050         * encrypt-sign.c (gpgme_op_encrypt_sign): Remove hack that returns
2051         no recipient if no data was returned.
2052         * encrypt-sign.c (gpgme_op_encrypt_sign): Remove hack that returns
2053         no recipient if no data was returned.
2054
2055         * engine.c (_gpgme_engine_op_verify): Add new argument to
2056         differentiate detached from normal signatures.
2057         * engine.h (_gpgme_engine_op_verify): Likewise for prototype.
2058         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.  Don't check
2059         mode of data argument.
2060         * engine-gpgsm.h (_gpgme_gpgsm_op_verify): Likewise for prototype.
2061         * gpgme.h (gpgme_op_verify_start): Likewise for prototype.
2062         (gpgme_op_verify): Likewise for prototype.
2063         * rungpg.c (_gpgme_gpg_op_verify): Likewise.
2064         * rungpg.h (_gpgme_gpg_op_verify): Likewise for prototype.
2065         * verify.c (_gpgme_op_verify_start): Likewise.
2066         (gpgme_op_verify_start): Likewise.
2067         (gpgme_op_verify): Likewise.
2068
2069         * rungpg.c (struct arg_and_data_s): New member INBOUND to hold
2070         direction of data object.
2071         (_gpgme_gpg_add_data): Add new argument INBOUND.  Use it to
2072         determine direction of data object.
2073         (_gpgme_gpg_add_pm_data, _gpgme_gpg_set_command_handler,
2074         _gpgme_gpg_op_decrypt, _gpgme_gpg_op_edit, _gpgme_gpg_op_encrypt,
2075         _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
2076         _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_sign,
2077         _gpgme_gpg_op_verify): Add new argument to _gpgme_gpg_add_data
2078         invocation.
2079         (build_argv): Use new member INBOUND to determine direction of
2080         file descriptor.  Don't check the data type.
2081         * rungpg.h (_gpgme_gpg_add_data): Add new argument to prototype.
2082         
2083         * gpgme.c (gpgme_get_op_info): Don't call
2084         _gpgme_data_get_as_string if CTX->op_info is NULL.
2085
2086         * version.c (gpgme_check_engine): Function removed.
2087
2088 2002-09-30  Werner Koch  <wk@gnupg.org>
2089
2090         * keylist.c (keylist_colon_handler): Take care when printing a
2091         NULL with the DEBUG.
2092
2093         * engine-gpgsm.c (struct gpgsm_object_s): New member ANY.
2094         (gpgsm_status_handler): Run the colon function to indicate EOF.
2095         (_gpgme_gpgsm_set_colon_line_handler): Better reset ANY here.
2096
2097 2002-09-28  Marcus Brinkmann  <marcus@g10code.de>
2098
2099         * conversion.c (_gpgme_hextobyte): Prevent superfluous
2100         multiplication with base.  Reported by Stéphane Corthésy.
2101
2102         * keylist.c (gpgme_op_keylist_ext_start): Use private asynchronous
2103         operation type in invocation of _gpgme_op_reset.
2104
2105 2002-09-20  Werner Koch  <wk@gnupg.org>
2106
2107         * ath.c: Include sys/time.h if sys/select.h is not available.
2108
2109 2002-09-13  Marcus Brinkmann  <marcus@g10code.de>
2110
2111         * keylist.c (keylist_status_handler): Do not call finish_key() here.
2112         (gpgme_op_keylist_ext_start): Set CTX->tmp_key to NULL.
2113
2114 2002-09-03  Marcus Brinkmann  <marcus@g10code.de>
2115
2116         * Makefile.am (assuan_libobjs): Remove @LTLIBOBJS@ as we link them
2117         into gpgme unconditionally.
2118         (libgpgme_la_LIBADD): Change @LIBOBJS@ into @LTLIBOBJS@.
2119
2120 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
2121
2122         * Makefile.am (assuan_libobjs): Use @LTLIBOBJS@ instead @LIBOBJS@.
2123
2124 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
2125
2126         * debug.c (_gpgme_debug_add): Test *LINE, not LINE.
2127         (_gpgme_debug_end): Likewise.
2128         Reported by Dr. Stefan Dalibor <Dr.Stefan.Dalibor@bfa.de>.
2129
2130 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
2131
2132         * posix-io.c (_gpgme_io_select): Don't use a non-constant struct
2133         initializer.
2134         * version.c (_gpgme_get_program_version): Likewise.
2135         Reported by Dr. Stefan Dalibor <Dr.Stefan.Dalibor@bfa.de>.
2136
2137 2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
2138
2139         * conversion.c (_gpgme_decode_c_string): Set DESTP before
2140         modifying DEST.
2141
2142         * conversion.c (_gpgme_decode_c_string): Fix off by one error in
2143         last change.
2144         * rungpg.c (_gpgme_append_gpg_args_from_signers): Move before
2145         _gpgme_op_edit so its prototype is known early on.
2146
2147         * conversion.c: New file.
2148         * util.h: Add prototypes for _gpgme_decode_c_string and
2149         _gpgme_hextobyte.
2150         * keylist.c (keylist_colon_handler): Call _gpgme_decode_c_string
2151         on issuer name.
2152         * Makefile.am (libgpgme_la_SOURCES): Add conversion.c
2153         * key.c (_gpgme_key_append_name): Replace calls to hextobyte by
2154         calls to _gpgme_hextobyte.
2155         (hash_key): Likewise.
2156
2157 2002-09-01  Marcus Brinkmann  <marcus@g10code.de>
2158
2159         * op-support.c (_gpgme_op_reset): Set CTX->pending after calling
2160         _gpgme_engine_release, as this will reset pending to zero in the
2161         event done callback on cancelled operations.
2162
2163 2002-08-30  Marcus Brinkmann  <marcus@g10code.de>
2164
2165         * rungpg.c (_gpgme_gpg_op_edit): Add args from signers.
2166         Suggested by Miguel Coca <e970095@zipi.fi.upm.es>.
2167
2168         * rungpg.c (_gpgme_gpg_op_edit): Add bogus ctx argument.
2169         * rungpg.h: Also to prototype.
2170         * engine.c (_gpgme_engine_op_edit): Likewise.
2171         * engine.h: Likewise.
2172         * edit.c (_gpgme_op_edit_start): Likewise.
2173
2174 2002-08-29  Werner Koch  <wk@gnupg.org>
2175
2176         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement signer
2177         selection.
2178         * vasprintf.c (va_copy): Define macro if not yet defined.
2179
2180 2002-08-29  Marcus Brinkmann  <marcus@g10code.de>
2181
2182         * passphrase.c (_gpgme_passphrase_status_handler): Reset
2183         CTX->result.passphrase->no_passphrase if passphrase is given (good
2184         or bad).  Submitted by Jean DIRAISON <jean.diraison@free.fr>.
2185
2186 2002-08-28  Marcus Brinkmann  <marcus@g10code.de>
2187
2188         * posix-io.c (_gpgme_io_spawn): Use a double-fork approach.
2189         Return 0 on success, -1 on error.
2190         * version.c (_gpgme_get_program_version): Don't wait for the child.
2191         * engine.c (_gpgme_engine_housecleaning): Function removed.
2192         (do_reaping): Likewise.
2193         (_gpgme_engine_add_child_to_reap_list): Likewise.
2194         (struct reap_s): Removed.
2195         (reap_list): Likewise.
2196         (reap_list_lock): Likewise.
2197         * engine.h (_gpgme_engine_io_event): Remove prototypes for
2198         _gpgme_engine_housecleaning and
2199         _gpgme_engine_add_child_to_reap_list.
2200         * rungpg.c (_gpgme_gpg_release): Don't add child to reap list.
2201         (struct gpg_object_s): Remove PID member.
2202         (_gpgme_gpg_new): Don't initialize GPG->pid.
2203         (_gpgme_gpg_spawn): Don't set GPG->pid.
2204         * wait.c (run_idle): Removed.
2205         (gpgme_wait): Run idle_function directly.
2206
2207 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
2208
2209         * encrypt-sign.c (encrypt_sign_status_handler): Remove dead
2210         variables encrypt_info and encrypt_info_len.
2211         * trustlist.c (gpgme_op_trustlist_start): Set colon line handler.
2212         * posix-sema.c (sema_fatal): Remove function.
2213         All these reported by Stéphane Corthésy.
2214
2215 2002-08-23  Werner Koch  <wk@gnupg.org>
2216
2217         * gpgme-config.in: Made --prefix work for --libs. 
2218
2219 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
2220
2221         * ath.h: Update list of symbols that get a prefix: Rename the
2222         ath_mutex_*_available symbols to ath_*_available.
2223
2224 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
2225
2226         * stpcpy.c: New file from gnulib.
2227         * Makefile.am (assuan_libobjs): Remove jnlib.
2228
2229 2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
2230
2231         * gpgme.h: Add prototype for gpgme_op_import_ext.
2232         * import.c (struct import_result_s): New member `nr_considered'.
2233         Rename `any_imported' to `nr_imported'.
2234         (import_status_handler): Increment nr_imported.  Set nr_considered
2235         if appropriate.
2236         (gpgme_op_import_ext): New function.
2237         (gpgme_op_import): Implement in terms of gpgme_op_import_ext.
2238
2239 2002-08-20  Werner Koch  <wk@gnupg.org>
2240
2241         * gpgme.m4: Replaced with a new and faster version.  This does not
2242         anymore try to build test programs.  If we really need test
2243         programs, we should add an option to gpgme-config to do so. 
2244
2245         * vasprintf.c (int_vasprintf): Hack to handle NULL passed for %s.
2246
2247 2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
2248
2249         * gpgme.c (_gpgme_set_op_info): Append data on subsequent calls.
2250         * encrypt-sign.c (encrypt_sign_status_handler): Remove op_info
2251         handling.
2252
2253 2002-08-19  Werner Koch  <wk@gnupg.org>
2254
2255         * decrypt.c (is_token,skip_token): Duplicated from verify.c
2256         (gpgme_op_decrypt): Hack to properly return Decryption_Failed..
2257         (_gpgme_decrypt_status_handler): Create an operation info.
2258
2259 2002-08-14  Werner Koch  <wk@gnupg.org>
2260
2261         * key.h (struct certsig_s): New.  Use it in gpgme_key_s.
2262         * key.c (gpgme_key_release): Release it. We need to add more code
2263         of course.
2264         (_gpgme_key_append_name): Use memset to intialize the struct.
2265         * gpgme.h (GPGME_KEYLIST_MODE_SIGS): New.
2266         * rungpg.c (_gpgme_gpg_op_keylist): Include sigs in listing depending
2267         non the list mode.
2268         
2269         * key.c (gpgme_key_get_string_attr): Use GPGME_ATTR_TYPE to return
2270         information about the key type (PGP or X.509).
2271         (gpgme_key_get_ulong_attr): Likewise.
2272
2273         * keylist.c (keylist_colon_handler): Include 1 in the check for
2274         valid algorithms so that RSA is usable.  Store the issuer name and
2275         serial number also for "crs" records.  Parse the expire date for
2276         subkeys.
2277         (set_userid_flags): Put them onto the last appended key.
2278
2279 2002-07-29  Marcus Brinkmann  <marcus@g10code.de>
2280
2281         * rungpg.c (_gpgme_gpg_op_edit): Use --with-colons.
2282
2283 2002-07-28  Marcus Brinkmann  <marcus@g10code.de>
2284
2285         * data.c (gpgme_data_read): For GPGME_DATA_TYPE_NONE, return EOF
2286         instead an error.
2287
2288         The following changes make it possible to flush an inbound data
2289         pipe before invoking a command handler:
2290
2291         * posix-io.c (_gpgme_io_select): Accept new argument NONBLOCK to
2292         _gpgme_io_select.  Set timeout of 0 if this is set.
2293         * w32-io.c (_gpgme_io_select): Likewise.
2294         * io.h: Add new argument NONBLOCK to _gpgme_io_select prototype.
2295         * wait.c (do_select): Add new argument to _gpgme_io_select
2296         invocation.
2297         * rungpg.h (_gpgme_gpg_set_command_handler): Add new argument
2298         linked_data to prototype.
2299         * engine.h (_gpgme_engine_set_command_handler): Likewise.
2300         * engine.c (_gpgme_engine_set_command_handler): Likewise.
2301         * passphrase.c (_gpgme_passphrase_start): Pass NULL as linked_data
2302         argument to _gpgme_engine_set_command_handler.
2303         * rungpg.c (struct gpg_object_s): New members linked_data and
2304         linked_idx in CMD.
2305         (_gpgme_gpg_new): Initialize those new members.
2306         (_gpgme_gpg_set_command_handler): Accept new argument linked_data.
2307         (build_argv): Handle linked_data in the same hack as cb_data.
2308         (read_status): If linked_data is in use, flush the pipe before
2309         activating the command handler.
2310         * gpgme.h: Add prototypes for gpgme_op_edit_start and
2311         gpgme_op_edit.
2312
2313         The next changes export the status codes to the user:
2314
2315         * decrypt.c (_gpgme_decrypt_status_handler): Likewise, also prefix
2316         all STATUS_ with GPGME_.
2317         * delete.c (delete_status_handler): Likewise.
2318         * decrypt-verify.c (decrypt_verify_status_handler): Likewise.
2319         * encrypt.c (_gpgme_encrypt_status_handler): Likewise.
2320         (_gpgme_encrypt_sym_status_handler): Likewise.
2321         * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
2322         * engine-gpgsm.c (parse_status): Likewise.
2323         (gpgsm_status_handler): Likewise.
2324         (gpgsm_set_recipients): Likewise.
2325         * export.c (export_status_handler): Likewise.
2326         * genkey.c (genkey_status_handler): Likewise.
2327         * import.c (append_xml_impinfo): Likewise.
2328         (import_status_handler): Likewise.
2329         * keylist.c (keylist_status_handler): Likewise.
2330         * passphrase.c (_gpgme_passphrase_status_handler): Likewise.
2331         (command_handler): Likewise.
2332         * progress.c (_gpgme_progress_status_handler): Likewise.
2333         * sign.c (_gpgme_sign_status_handler): Likewise.
2334         * trustlist.c (trustlist_status_handler): Likewise.
2335         * verify.c (_gpgme_verify_status_handler): Likewise.
2336         * gpgme.h (GpgmeEditCb): New type.
2337         * rungpg.h (GpgStatusCode): Rename and move to ...
2338         * gpgme.h (GpgmeStatusCode): ... this and here.
2339         * Makefile.am (status-table.h): Run mkstatus on gpgme.h, not rungpg.h.
2340         * mkstatus: Prefix STATUS with GPGME_.
2341         * rungpg.h (GpgStatusHandler, GpgCommandHandler): Change type
2342         accordingly.
2343         * ops.h (_gpgme_verify_status_handler,
2344         _gpgme_decrypt_status_handler, _gpgme_sign_status_handler,
2345         _gpgme_encrypt_status_handler, _gpgme_passphrase_status_handler,
2346         _gpgme_progress_status_handler): Likewise.
2347         * rungpg.c (struct gpg_object_s): Likewise for CMD.code.
2348
2349         These changes add an edit operation to GPGME:
2350         
2351         * context.h (struct gpgme_context_s): New member RESULT.edit.  *
2352         ops.h: Add prototype for _gpgme_release_edit_result and
2353         _gpgme_passphrase_command_handler.
2354         * passphrase.c (command_handler): Make non-static and rename to ...
2355         (_gpgme_passphrase_command_handler): ... this.
2356         (_gpgme_passphrase_start): Use new name for command handler.
2357         * types.h: Add EditResult type.
2358         * gpgme.c (_gpgme_release_result): Release EDIT result.
2359         * edit.c: New file.
2360         * Makefile.am (libgpgme_la_SOURCES): Add edit.c.
2361         (libgpgme_la_LDADD): Rename to libgpgme_la_LIBADD, and include
2362         assuan_libobjs.
2363         (assuan_libobjs): New variable, set this instead
2364         libgpgme_la_LIBADD.
2365         * engine.h (_gpgme_engine_op_edit): New prototype.
2366         * engine.c (_gpgme_engine_op_edit): New function.
2367         * rungpg.h (_gpgme_gpg_op_edit): New prototype.
2368         * rungpg.c (_gpgme_gpg_op_edit): New function.
2369
2370 2002-07-27  Marcus Brinkmann  <marcus@g10code.de>
2371
2372         * delete.c (delete_problem): New case ambigious specification.
2373         (delete_status_handler): Handle new case (poorly).
2374
2375 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
2376
2377         * engine-gpgsm.c (_gpgme_gpgsm_op_delete): Implement this.
2378
2379 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
2380
2381         * Makefile.am (libgpgme_la_LDADD): Add @LIBOBJS@ for vasprintf and
2382         fopencookie.
2383         * vasprintf.c: Update to more recent libiberty version.
2384         * debug.h: Replace #elsif with #elif.
2385
2386         Submitted by Stéphane Corthésy:
2387         * util.h (vasprintf): Correct prototype.
2388         * encrypt-sign.c: Include <stddef.h>.
2389         (encrypt_sign_status_handler): Change type of ENCRYPT_INFO_LEN to
2390         size_t.
2391         * ath-pthread.c: Include <stdlib.h>, not <malloc.h>.
2392         * ath-pth.c: Likewise.
2393
2394 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
2395
2396         * wait.c (fdt_global): Make static.  Reported by Stéphane
2397         Corthésy.
2398
2399         * rungpg.c (_gpgme_gpg_op_keylist_ext): Skip empty string
2400         patterns.  Reported by Stéphane Corthésy.
2401
2402         * key.c (gpgme_key_get_as_xml): Add OTRUST attribute.  Requested
2403         by Stéphane Corthésy.
2404         (gpgme_key_get_string_attr): Add GPGME_ATTR_SIG_SUMMARY case to
2405         silence gcc warning.
2406
2407         * rungpg.c (_gpgme_gpg_new): Always set utf8 as charset.
2408
2409 2002-07-03  Marcus Brinkmann  <marcus@g10code.de>
2410
2411         * gpgme.c (gpgme_set_io_cbs): Deal with CTX being NULL.
2412
2413         * gpgme.c (_gpgme_op_event_cb_user): New function.
2414         * op-support.c (_gpgme_op_reset): Support a new mode of operation
2415         for private or user event loop.  Use new user event callback
2416         wrapper.
2417         * trustlist.c (gpgme_op_trustlist_start): Use this new mode.
2418         * keylist.c (gpgme_op_keylist_start): Likewise.
2419
2420         * rungpg.c (_gpgme_gpg_io_event): New function.
2421         * rungpg.h (_gpgme_gpg_io_event): New prototype.
2422         * engine-gpgsm.c (_gpgme_gpg_io_event): New function.
2423         * engine-gpgsm.h (_gpgme_gpgsm_io_event): New prototype.
2424         * engine.c (_gpgme_engine_io_event): New function.
2425         * engine.h (_gpgme_engine_io_event): New prototype.
2426         * keylist.c (finish_key): Call _gpgme_engine_io_event, and move
2427         the real work for the default IO callback routines to ...
2428         (_gpgme_op_keylist_event_cb): ... here.  New function.
2429         * trustlist.c (trustlist_colon_handler): Signal
2430         GPGME_EVENT_NEXT_TRUSTITEM.  Move queue manipulation to ...
2431         (_gpgme_op_trustlist_event_cb): ... here.  New function.
2432         * gpgme.c (_gpgme_op_event_cb): Call _gpgme_op_keylist_event_cb
2433         and _gpgme_op_trustlist_event_cb when appropriate.
2434         * ops.h (_gpgme_op_keylist_event_cb): New prototype.
2435         (_gpgme_op_trustlist_event_cb): Likewise.
2436         * op-support.c (_gpgme_op_reset): Add comment why we don't use the
2437         user provided event handler directly.
2438         * gpgme.h (GpgmeRegisterIOCb): Return GpgmeError value, and TAG in
2439         a pointer argument.
2440         * wait.c (_gpgme_add_io_cb): Likewise.
2441         * wait.h (_gpgme_add_io_cb): Likewise for prototype.
2442         * rungpg.c (_gpgme_gpg_add_io_cb): Call IO_CBS->add with new
2443         argument.  Fix up error handling.
2444         * engine-gpgsm.c (_gpgme_gpgsm_add_io_cb): Call IO_CBS->add with
2445         new argument, fix up error handling.
2446
2447 2002-07-03  Werner Koch  <wk@gnupg.org>
2448
2449         * encrypt.c (status_handler_finish): New.
2450         (_gpgme_encrypt_status_handler): Moved some code out to the new
2451         function and call this function also in case we get into the
2452         status handler with an error which might happen due to a kludge in
2453         engine-gpgsm.c
2454
2455 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
2456
2457         * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
2458         table (eg use synchronous mode).
2459
2460 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
2461
2462         * ops.h (_gpgme_wait_on_condition): Remove HANG argument from
2463         prototype and change return type to GpgmeError.
2464         (_gpgme_wait_one): New prototype.
2465         * wait.c (gpgme_wait): Replace with the meat from
2466         _gpgme_wait_on_condition here, and remove the support for
2467         conditions.
2468         (_gpgme_wait_on_condition): Remove HANG argument from prototype
2469         and change return type to GpgmeError.  Replace with meat from
2470         _gpgme_wait_one and add support for conditions.
2471         (_gpgme_wait_one): Just call _gpgme_wait_on_condition without
2472         condition.
2473         * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
2474         table (eg use synchronous mode).
2475         (gpgme_op_keylist_next): Remove HANG argument from
2476         _gpgme_wait_on_condition.  Check its return value.
2477         * trustlist.c (gpgme_op_trustlist_start): Always use our own FD
2478         table (eg use synchronous mode).
2479         (gpgme_op_trustlist_next): Remove HANG argument from
2480         _gpgme_wait_on_condition.  Check its return value.
2481         
2482 2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
2483
2484         * gpgme.h: Fix documentation of key attribute retrieval functions.
2485
2486 2002-06-26  Werner Koch  <wk@gnupg.org>
2487
2488         * engine-gpgsm.c (map_assuan_error): Map No_Data_Available to EOF.
2489
2490         * import.c (append_xml_impinfo): Kludge to print fingerprint
2491         instead of keyid for use with gpgsm.
2492         (import_status_handler): Set a flag to know whether any import
2493         occured.
2494         (gpgme_op_import): Reurn -1 if no certificate ewas imported.
2495
2496 2002-06-25  Werner Koch  <wk@gnupg.org>
2497
2498         * engine-gpgsm.c (_gpgme_gpgsm_set_io_cbs) [ENABLE_GPGSM]: Fixed
2499         function arguments.
2500
2501 2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
2502
2503         * engine-gpgsm.c (_gpgme_gpgsm_op_export): Only export the keys
2504         listed in RECP.
2505         * export.c (gpgme_op_export): If no data was returned, return
2506         GPGME_No_Recipients.
2507
2508 2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
2509
2510         * engine-gpgsm.c (_gpgme_gpgsm_op_export): Implement.
2511
2512 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
2513
2514         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return ERR.
2515         (parse_status): New function.
2516         (gpgsm_status_handler): Use parse_status.
2517         (gpgsm_assuan_simple_command): Accept new arguments STATUS_FNC and
2518         STATUS_FNC_VALUE and process status messages.
2519         (gpgsm_set_recipients): Pass new arugments to gpgsm_assuan_simple_command.
2520         (gpgsm_set_fd): Likewise.
2521         (_gpgme_gpgsm_op_keylist): Likewise.
2522         (_gpgme_gpgsm_op_keylist_ext): Likewise.
2523         (_gpgme_gpgsm_op_sign): Likewise.
2524
2525 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
2526
2527         * wait.c (_gpgme_remove_io_cb): Unlock FDT->lock.
2528
2529 2002-06-20  Werner Koch  <wk@gnupg.org>
2530
2531         * rungpg.c (build_argv): Ignore GPG_AGENT_INFO if set but empty.
2532
2533         * verify.c (calc_sig_summary): Set bad policy for wrong key usage.
2534         (skip_token): New.
2535         (_gpgme_verify_status_handler): Watch out for wrong key usage.
2536         (gpgme_get_sig_string_attr): Hack to return info on the key
2537         usage.  Does now make use of the former RESERVED argument which
2538         has been renamed to WHATIDX.
2539         (gpgme_get_sig_ulong_attr): Renamed RESERVED to WHATIDX.
2540
2541 2002-06-14  Marcus Brinkmann  <marcus@g10code.de>
2542
2543         * wait.c (do_select): Return -1 on error, and 0 if nothing to run.
2544         (_gpgme_wait_one): Only set HANG to zero if do_select returned an
2545         error, or there are no more file descriptors to wait on.
2546         (_gpgme_wait_on_condition): Ignore return value from do_select for
2547         now.
2548
2549 2002-06-13  Werner Koch  <wk@gnupg.org>
2550
2551         * verify.c (gpgme_op_verify): Make sure that we never access an
2552         unitialized result structure.
2553
2554 2002-06-12  Werner Koch  <wk@gnupg.org>
2555
2556         * keylist.c (struct keylist_result_s): New.
2557         (_gpgme_release_keylist_result): Release it here 
2558         (keylist_status_handler): Handle truncated.
2559         (append_xml_keylistinfo): New.
2560         * gpgme.c (_gpgme_release_result): and use it here.
2561         * types.h: Declare the new type here.
2562         * context.h (struct gpgme_context_s): Use it here.
2563
2564 2002-06-11  Marcus Brinkmann  <marcus@g10code.de>
2565
2566         * engine-gpgsm.c (_gpgme_gpgsm_release): Close status_cb.fd.
2567         (_gpgme_gpgsm_new): Duplicate status file descriptor, so we can
2568         use our own close notification mechanism without interfering with
2569         assuan.
2570
2571 2002-06-11  Werner Koch  <wk@gnupg.org>
2572
2573         * gpgme.h: Add GPGME_ATTR_SIG_SUMMARY and the GPGME_SIGSUM_
2574         constants.
2575         * verify.c (calc_sig_summary): New.
2576         (gpgme_get_sig_ulong_attr): And use it here.
2577
2578 2002-06-10  Werner Koch  <wk@gnupg.org>
2579
2580         * rungpg.h: Add new status codes TRUNCATED and ERROR.
2581         * verify.c (is_token, copy_token): New.
2582         (_gpgme_verify_status_handler): Use copy_token, handle the new
2583         ERROR status and store the errorcode used withgpgsm and trust
2584         status codes.
2585         * gpgme.h: New attribute ERRTOK.
2586         * key.c (gpgme_key_get_string_attr): Add dummy case for it.
2587         (gpgme_get_sig_string_attr): Use it here to return the last error.
2588
2589 2002-06-10  Marcus Brinkmann  <marcus@g10code.de>
2590
2591         * engine-gpgsm.c (_gpgme_gpgsm_start): Move the code that sets the
2592         close notification for the status fd to ...
2593         (_gpgme_gpgsm_new): ... here.
2594         * wait.h: Include "sema.h".  Remove prototypes of
2595         _gpgme_remove_proc_from_wait_queue and
2596         _gpgme_register_pipe_handler.  Add prototypes of
2597         _gpgme_fd_table_init, _gpgme_fd_table_deinit, _gpgme_fd_table_put,
2598         _gpgme_add_io_cb, _gpgme_remove_io_cb, _gpgme_wait_event_cb and
2599         _gpgme_wait_one..
2600         * wait.c: Remove global variables PROC_QUEUE, PROC_QUEUE_LOCK,
2601         FD_TABLE_SIZE, FD_TABLE, FD_TABLE_LOCK.  New global variables
2602         FDT_GLOBAL, CTX_DONE_LIST, CTX_DONE_LIST_SIZE,
2603         CTX_DONE_LIST_LENGTH and CTX_DONE_LIST_LOCK.  Remove struct
2604         proc_s.  Replace struct wait_item_s.
2605         (_gpgme_fd_table_init): New function.
2606         (_gpgme_fd_table_deinit): Likewise.
2607         (_gpgme_fd_table_put): Likewise.
2608         (set_process_done): Remove function.
2609         (do_select): Take argument FDT.  Use that to decide which fds to
2610         select on.
2611         (_gpgme_remove_proc_from_wait_queue): Remove function.
2612         (_gpgme_wait_event_cb): New function.
2613         (_gpgme_wait_one): Likewise.
2614         (_gpgme_register_pipe_hanldler): Remove function.
2615         (_gpgme_add_io_cb): New function.
2616         (_gpgme_remove_io_cb): Likewise.
2617         (_gpgme_freeze_fd): Remove function.
2618         (_gpgme_thaw_fd): Remove function.
2619         * rungpg.c (struct fd_data_map_s): Add new member TAG.
2620         (struct gpg_object_s): Likewise for STATUS and COLON.  Add member
2621         IDX to CMD.  Add new member IO_CBS.
2622         (close_notify_handler): New variables POSSIBLY_DONE and NOT_DONE.
2623         For each I/O callback, check if it should be unregistered.  If all
2624         callbacks have been unregistered, trigger GPGME_EVENT_DONE.
2625         Remove member RUNNING.
2626         (_gpgme_gpg_new): Initialize new members.
2627         (_gpgme_gpg_release): Check PID not RUNNING.  Don't call
2628         _gpgme_remove_proc_from_wait_queue.  Close GPG->CMD.FD if set.
2629         (build_argv): Store away the index instead the file descriptor for
2630         CMD.
2631         (_gpgme_gpg_add_io_cb): New function.
2632         (_gpgme_gpg_spawn): Use _gpgme_gpg_add_io_cb to register IO
2633         callbacks.
2634         (gpg_status_handler): Change return type to void, remove PID
2635         argument, close filedescriptor if EOF or error occurs.
2636         (read_status): Use _gpgme_gpg_add_io_cb instead _gpgme_thaw_fd.
2637         Use IO_CBS->remove instead _gpgme_freeze_fd.
2638         (gpg_colon_line_handler): Change return type to void, remove PID
2639         argument, close filedescriptor if EOF or error occurs.
2640         (command_cb): Use IO_CBS->remove instead _gpgme_freeze_fd.
2641         (_gpgme_gpg_set_io_cbs): New function.
2642         * rungpg.h (_gpgme_gpg_set_io_cbs): Prototype for
2643         _gpgme_gpg_set_io_cbs.
2644         * gpgme.h (GpgmeIOCb): New type.
2645         (GpgmeRegisterIOCb): Likewise.
2646         (GpgmeRemoveIOCb): Likewise.
2647         (GpgmeEventIO): Likewise.
2648         (GpgmeEventIOCb): Likewise.
2649         (struct GpgmeIOCbs): New structure to hold I/O callbacks.
2650         (gpgme_set_op_io_cbs): New prototype.
2651         (gpgme_get_op_io_cbs): Likewise.
2652         * ops.h: New prototype for _gpgme_op_event_cb.  Remove prototypes
2653         for _gpgme_freeze_fd and _gpgme_thaw_fd.  Remove PID argument from
2654         _gpgme_data_inbound_handler and _gpgme_data_outbound_handler
2655         prototype.  Add prototype for _gpgme_op_reset.
2656         Add synchronous argument to _gpgme_decrypt_start prototype.
2657         * io.h: Beautification.
2658         * gpgme.c: Include "wait.h".
2659         (gpgme_new): Initialize FDT.
2660         (gpgme_set_io_cbs): New function.
2661         (gpgme_get_io_cbs): Likewise.
2662         (_gpgme_op_event_cb): Likewise.
2663         * data.c (_gpgme_data_inbound_handler): Change return type to
2664         void.  Drop PID argument.  Close FD on error and EOF.
2665         (write_mem_data): Don't close FD here ...
2666         (write_cb_data): ... or here ...
2667         (_gpgme_data_outbound_handler): ... but here.  Change return type
2668         to void.  Drop PID argument.
2669         * context.h: Include "wait.h".
2670         (struct gpgme_context_s): New members FDT and IO_CBS.
2671         * op-support.c: New file.
2672         * Makefile.am (libgpgme_la_SOURCES): Add op-support.c.
2673         * ops.h: Add prototype for _gpgme_op_reset().
2674         * decrypt.c (_gpgme_decrypt_start): New argument SYNCHRONOUS.  Use
2675         _gpgme_op_reset.
2676         (gpgme_op_decrypt_start): Add synchronous argument.
2677         (gpgme_op_decrypt): Likewise.  Use _gpgme_wait_one instead
2678         gpgme_wait.
2679         * delete.c (gpgme_op_delete_start): Rename to ...
2680         (_gpgme_op_delete_start): ... this.  New argument SYNCHRONOUS.
2681         Use _gpgme_op_reset.  Make function static.
2682         (gpgme_op_delete_start): Just a wrapper around
2683         _gpgme_op_delete_start now.
2684         (gpgme_op_delete): Add synchronous argument.  Use _gpgme_wait_one
2685         instead gpgme_wait.
2686         * encrypt.c: Include "wait.h".
2687         (ggpgme_op_encrypt_start): Rename to ...
2688         (_gpgme_op_encrypt_start): ... this.  New argument SYNCHRONOUS.
2689         Use _gpgme_op_reset.  Make function static.
2690         (gpgme_op_encrypt_start): Just a wrapper around
2691         _gpgme_op_encrypt_start now.
2692         (gpgme_op_encrypt): Add synchronous argument.  Use _gpgme_wait_one
2693         instead gpgme_wait.
2694         * encrypt_sign.c (gpgme_op_encrypt_sign_start): Rename to ...
2695         (_gpgme_op_encrypt_sign_start): ... this.  New argument
2696         SYNCHRONOUS.  Use _gpgme_op_reset.  Make function static.
2697         (gpgme_op_encrypt_sign_start): Just a wrapper around
2698         _gpgme_op_encrypt_sign_start now.
2699         (gpgme_op_encrypt_sign): Add synchronous argument.  Use
2700         _gpgme_wait_one instead gpgme_wait.
2701         * export.c (gpgme_op_export_start): Rename to ...
2702         (_gpgme_op_export_start): ... this.  New argument SYNCHRONOUS.
2703         Use _gpgme_op_reset.  Make function static.
2704         (gpgme_op_export_start): Just a wrapper around
2705         _gpgme_op_export_start now.
2706         (gpgme_op_export): Add synchronous argument.  Use _gpgme_wait_one
2707         instead gpgme_wait.
2708         * genkey.c (gpgme_op_genkey_start): Rename to ...
2709         (_gpgme_op_genkey_start): ... this.  New argument SYNCHRONOUS.
2710         Use _gpgme_op_reset.  Make function static.
2711         (gpgme_op_genkey_start): Just a wrapper around
2712         _gpgme_op_genkey_start now.
2713         (gpgme_op_genkey): Add synchronous argument.  Use _gpgme_wait_one
2714         instead gpgme_wait.
2715         * import.c (gpgme_op_import_start): Rename to ...
2716         (_gpgme_op_import_start): ... this.  New argument SYNCHRONOUS.
2717         Use _gpgme_op_reset.  Make function static.
2718         (gpgme_op_import_start): Just a wrapper around
2719         _gpgme_op_import_start now.
2720         (gpgme_op_import): Add synchronous argument.  Use _gpgme_wait_one
2721         instead gpgme_wait.
2722         * keylist.c (gpgme_op_keylist_start): Use _gpgme_op_reset.
2723         (gpgme_op_keylist_ext_start): Likewise.
2724         * sign.c (gpgme_op_sign_start): Rename to ...
2725         (_gpgme_op_sign_start): ... this.  New argument SYNCHRONOUS.  Use
2726         _gpgme_op_reset.  Make function static.
2727         (gpgme_op_sign_start): Just a wrapper around _gpgme_op_sign_start
2728         now.
2729         (gpgme_op_sign): Add synchronous argument.  Use _gpgme_wait_one
2730         instead gpgme_wait.
2731         * trustlist.c (gpgme_op_trustlist_start): Use _gpgme_op_reset.
2732         * verify.c (gpgme_op_verify_start): Rename to ...
2733         (_gpgme_op_verify_start): ... this.  New argument SYNCHRONOUS.
2734         Use _gpgme_op_reset.  Make function static.
2735         (gpgme_op_verify_start): Just a wrapper around
2736         _gpgme_op_verify_start now.
2737         (gpgme_op_verify): Add synchronous argument.  Use _gpgme_wait_one
2738         instead gpgme_wait.
2739         * engine-gpgsm.c (iocb_data_t): New type.
2740         (struct gpgsm_object_s): New member status_cb.  Replace input_fd
2741         and input_data with input_cb.  Replace output_fd and output_data
2742         with output_cb.  Replace message_fd and message_data with
2743         message_cb.  New member io_cbs.
2744         (_gpgme_gpgsm_new): Initialize all new members (and drop the old
2745         ones).
2746         (close_notify_handler): New variable POSSIBLY_DONE.  For each I/O
2747         callback, check if it should be unregistered.  If all callbacks
2748         have been unregistered, trigger GPGME_EVENT_DONE.
2749         (_gpgme_gpgsm_release): Remove variable PID.  Use new variable
2750         names to close the file descriptors.
2751         (_gpgme_gpgsm_op_decrypt): Use new variable names,
2752         (_gpgme_gpgsm_op_encrypt): Likewise.
2753         (_gpgme_gpgsm_op_genkey): Likewise.
2754         (_gpgme_gpgsm_op_import): Likewise.
2755         (_gpgme_gpgsm_op_keylist): Likewise.
2756         (_gpgme_gpgsm_op_keylist_ext): Likewise.
2757         (_gpgme_gpgsm_op_sign): Likewise.
2758         (_gpgme_gpgsm_op_verify): Likewise.
2759         (gpgsm_status_handler): Drop argument PID.  Change return type to
2760         void.  Close status pipe before returning because of EOF or error.
2761         (_gpgme_gpgsm_add_io_cb): New function.
2762         (_gpgme_gpgsm_start): Use _gpgme_gpgsm_add_io_cb to register
2763         callback function.
2764         (_gpgme_gpgsm_set_io_cbs): New function.
2765         * engine-gpgsm.h: New prototype for _gpgme_gpgsm_set_io_cbs.
2766         * engine.c (_gpgme_engine_set_io_cbs): New function.
2767         * engine.h: New prototype for _gpgme_engine_set_io_cbs.
2768
2769 2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
2770
2771         * Makefile.am (libgpgme_la_SOURCES): Remove mutex.h.
2772
2773 2002-06-03  Marcus Brinkmann  <marcus@g10code.de>
2774
2775         * key.c: Include <ctype.h>.
2776         (_gpgme_key_append_name): Skip one more char when
2777         processing escaped char.  Submitted by Marc Mutz <mutz@kde.org>.
2778         Handle hexadecimal encodings.  Also reported by Marc.  Thanks!
2779
2780 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
2781
2782         * ath.h: Enable the _gpgme_ prefix.  Fix all those prefix macros.
2783         * posix-sema.c: Use that prefix here.
2784         * posix-io.c: Include "ath.h".
2785         (_gpgme_io_read): Use _gpgme_ath_read instead read.
2786         (_gpgme_io_write): Use _gpgme_ath_write instead write.
2787         (_gpgme_io_waitpid): Use _gpgme_ath_waitpid instead waitpid.
2788         (_gpgme_io_select): Use _gpgme_ath_select instead select.
2789
2790 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
2791
2792         * Makefile.am (ath_components): New variable.
2793         (ath_components_pthread): Likewise.
2794         (ath_components_pth): Likewise.
2795         (system_components): Add ath_componentes.
2796
2797         * ath.h: New file.
2798         * ath.c: Likewise.
2799         * ath-pthread.c: Likewise.
2800         * ath-pth.c: Likewise.
2801         * posix-sema.c (_gpgme_sema_cs_enter): Rework to use the ATH
2802         interface.
2803         * mutex.h: Remove file.
2804
2805 2002-05-30  Werner Koch  <wk@gnupg.org>
2806
2807         * key.c (gpgme_key_get_string_attr): Return NULL when asking for
2808         an issuer with IDX > 0.  We don't support altIssuerNames for now.
2809
2810 2002-05-22  Werner Koch  <wk@gnupg.org>
2811
2812         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Aehmm, added
2813         missing variable definition.  Oohh - Marcus was faster.
2814
2815 2002-05-22  Marcus Brinkmann  <marcus@gnu.org>
2816
2817         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Fix last change.
2818
2819 2002-05-21  Werner Koch  <wk@gnupg.org>
2820
2821         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist)
2822         (_gpgme_gpgsm_op_keylist_ext):  Pass the keylist mode to gpgsm.
2823
2824 2002-05-10  Werner Koch  <wk@gnupg.org>
2825
2826         * key.h (gpgme_key_s): Add OTRUST.
2827         * keylist.c (set_ownertrust): New.
2828         (keylist_colon_handler): Get the ownertrust value
2829         * key.c (gpgme_key_get_string_attr,gpgme_key_get_ulong_attr):
2830         Return that value.
2831
2832 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
2833
2834         * w32-util.c: New static variable GET_PATH_LOCK.
2835         (_gpgme_get_gpg_path): Remove superfluous NULL initializer.
2836         Take lock while determining path.
2837         (_gpgme_get_gpgsm_path): Likewise.
2838         * version.c (do_subsystem_inits): Set DONE to 1 after
2839         initialization.
2840         (gpgme_get_engine_info): New variable ENGINE_INFO_LOCK.  Take lock
2841         while determining engine info.
2842         * rungpg.c (_gpgme_gpg_get_version): New variable
2843         GPG_VERSION_LOCK.  Take the lock while determining the program
2844         version.
2845         * posix-io.c: Include "sema.h".
2846         (_gpgme_io_spawn): New variable FIXED_SIGNALS_LOCK.  Take the lock
2847         while fixing the signals.
2848         (_gpgme_io_select): Make READFDS and WRITEFDS non-static.
2849         * key.c: Include "sema.h".  New globals KEY_CACHE_LOCK and
2850         KEY_REF_LOCK.
2851         (capabilities_to_string): Make STRINGS very const.
2852         (_gpgme_key_cache_add): Lock the key cache.
2853         (_gpgme_key_cache_get): Likewise.
2854         (gpgme_key_ref, gpgme_key_release): Lock the key_ref_lock.
2855         * import.c (append_xml_impinfo): Make IMPORTED_FIELDS and
2856         IMPORT_RES_FIELDS very const.  Make FIELD and FIELD_NAME a litle
2857         const.
2858         * engine.c (_gpgme_engine_get_info): New variable
2859         ENGINE_INFO_LOCK.  Take lock while determining engine info.
2860         * engine-gpgsm.c: Include "sema.h".
2861         (_gpgme_gpgsm_get_version): New variable GPGSM_VERSION_LOCK.  Take
2862         lock while getting program version.
2863
2864 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
2865
2866         * debug.h: New file.
2867         * Makefile.am (libgpgme_la_SOURCES): Add debug.h.
2868         * util.h: Removed all prototypes and declarations related to
2869         debugging.  Include "debug.h".
2870
2871         * debug.c (debug_level): Comment variable and remove superfluous
2872         zero initializer.
2873         (errfp): Likewise.
2874         (_gpgme_debug_enabled): Function removed.
2875         (struct debug_control_s): Definition removed.
2876         (_gpgme_debug_level): Function removed.
2877         (_gpgme_debug_begin): Rewritten to use vasprintf.  Accept a
2878         pritnf-style format specification and a variable number of
2879         arguments.
2880         (_gpgme_debug_add): Rewritten using vasprintf.  Expect that format
2881         starts out with "%s" for simplicity.
2882         (_gpgme_debug_end): Rewritten using vasprintf.  Do not accept a
2883         TEXT argument anymore.
2884
2885         * posix-io.c (_gpgme_io_select): Use new level argument for
2886         DEBUG_BEGIN instead explicit if construct.
2887
2888         * debug.c (debug_init): Remove superfluous zero initializer,
2889         remove volatile flag of INITIALIZED.  Do not use the
2890         double-checked locking algorithm, it is fundamentally flawed and
2891         will empty your fridge (on a more serious note, despite the
2892         volatile flag it doesn't give you the guarantee you would expect,
2893         for example on a DEC Alpha or an SMP machine.  The volatile only
2894         serializes accesses to the volatile variable, but not to the other
2895         variables).
2896
2897 2002-05-03  Werner Koch  <wk@gnupg.org>
2898
2899         * engine-gpgsm.c (_gpgme_gpgsm_new): Redirect any gpgsm error
2900         output to /dev/null.
2901
2902         * verify.c (gpgme_get_sig_key): Set the protocol of the listctx.
2903         * gpgme.c (gpgme_get_protocol): New.
2904
2905         * data.c (gpgme_data_write): Changed type of BUFFER to void*.
2906         (gpgme_data_read): Ditto.
2907
2908         * verify.c (_gpgme_verify_status_handler): Handle TRUST_* status
2909         lines so that a claim can be made without looking up the key.
2910         (gpgme_get_sig_string_attr): New. 
2911         (gpgme_get_sig_ulong_attr): New.
2912
2913         * gpgme.h (GpgmeAttr): Added GPGME_ATTR_SIG_STATUS.
2914
2915         * rungpg.h: Add new status codes from gpg 1.0.7 and formatted the
2916         list to align with the status.h file from gnupg.
2917
2918         * gpgme.h (GpgmeSigStat): Add _GOOD_EXP and _GOOD_EXPKEY.
2919         * verify.c (_gpgme_verify_status_handler, finish_sig): Handle
2920         these new status codes.  Store the expiration time 
2921
2922 2002-04-27  Werner Koch  <wk@gnupg.org>
2923
2924         * gpgme.h (GpgmeData_Encoding): New.
2925         * data.c (gpgme_data_get_encoding,gpgme_data_set_encoding): New.
2926         * engine-gpgsm.c (map_input_enc): New. Use it in all local
2927         functions where the INPUT command gets send.
2928
2929 2002-04-27  Marcus Brinkmann  <marcus@g10code.de>
2930
2931         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Close the output
2932         descriptor only when we don't need it anymore.  Close the message
2933         descriptor if we don't need it.
2934
2935 2002-04-26  Werner Koch  <wk@gnupg.org>
2936
2937         * Makefile.am (libgpgme_la_LIBADD): Use libtool libraries.
2938
2939 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
2940
2941         * rungpg.c (_gpgme_gpg_release): Call gpgme_data_release on
2942         GPG->cmd.cb_data, not xfree.
2943
2944 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
2945
2946         * engine-gpgsm.c (_gpgme_gpgsm_new): Set the display, ttyname,
2947         ttytype, lc_ctype and lc_messages options in the server.
2948
2949 2002-04-24  Marcus Brinkmann  <marcus@g10code.de>
2950
2951         * engine-gpgsm.c (map_assuan_error): Add new error codes.
2952
2953 2002-04-23  Werner Koch  <wk@gnupg.org>
2954
2955         * key.c (gpgme_key_get_ulong_attr): Swapped use of can_encrypt and
2956         can_certify to return the requested values.
2957
2958 2002-04-23  Marcus Brinkmann  <marcus@g10code.de>
2959
2960         * gpgme.c (gpgme_get_progress_cb): Allow either return parameter
2961         to be NULL.
2962         (gpgme_get_passphrase_cb): Likewise.
2963
2964 2002-04-22  Marcus Brinkmann  <marcus@g10code.de>
2965
2966         * gpgme.c (gpgme_get_passphrase_cb): New function.
2967         (gpgme_get_progress_cb): New function.
2968         * gpgme.h: Add new prototypes for gpgme_get_passphrase_cb and
2969         gpgme_get_progress_cb.
2970
2971 2002-03-28  Werner Koch  <wk@gnupg.org>
2972
2973         * gpgme.h (GpgmeAttr): Add values for issuer and chaining.
2974         * key.h (gpgme_key_s): Add issuer and chaining elements for X509.
2975         * keylist.c (keylist_colon_handler): Store them.
2976         * key.c (gpgme_key_release): Free them.
2977         (gpgme_key_get_as_xml,gpgme_key_get_string_attr): Print them.
2978
2979 2002-03-26  Werner Koch  <wk@gnupg.org>
2980
2981         * Makefile.am (libgpgme_la_SOURCES): Add mutex.h
2982
2983 2002-03-21  Werner Koch  <wk@gnupg.org>
2984
2985         * util.h [!HAVE_FOPENCOOKIE]: Make sure off_t and ssize_t are
2986         defined.
2987
2988 2002-03-18  Marcus Brinkmann  <marcus@g10code.de>
2989
2990         * Makefile.am (system_components): New variable, set depending on
2991         HAVE_DOSISH_SYSTEM.
2992         (libgpgme_la_SOURCES): Use system_components.  Remove `syshdr.h'.
2993         * syshdr.h: File removed.
2994
2995         * posix-io.c: Remove !HAVE_DOSISH_SYSTEM safeguard.  Clean up source.
2996         * posix-sema.c: Likewise.
2997         * posix-util.c: Likewise.
2998
2999         * w32-io.c: Remove HAVE_DOSISH_SYSTEM safeguard.
3000         * w32-sema.c: Likewise.
3001         * w32-util.c: Likewise.
3002
3003         * posix-io.c: Include `unistd.h', do not include `syshdr.h'.
3004         * posix-sema.c: Likewise.
3005         * w32-io.c: Include `io.h', do not include `syshdr.h'
3006         * w32-sema.c: Likewise.
3007         * w32-util.c: Likewise.
3008         * data.c: Do not include `syshdr.h'.
3009         * wait.c: Likewise.
3010         * wait.h: Code cleanup.
3011
3012         * mutex.h: New file.
3013         * posix-sema.c: Implement.
3014
3015 2002-03-08  Werner Koch  <wk@gnupg.org>
3016
3017         * util.h [!HAVE_FOPENCOOKIE]: Fixed type.  Thanks to Frank Heckenbach.
3018
3019 2002-03-07  Werner Koch  <wk@gnupg.org>
3020
3021         * gpgme.h (gpgme_op_keylist_ext_start): Add prototype.
3022
3023 2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
3024
3025         * encrypt.c (_gpgme_encrypt_sym_status_handler): New function.
3026         (gpgme_op_encrypt_start): New variable SYMMETRIC, set it if RECP
3027         is null, and if it is set, use _gpgme_encrypt_sym_status_handler
3028         as status handler and run _gpgme_passphrase_start.
3029         * rungpg.c (_gpgme_gpg_op_encrypt): If RECP is zero, do symmetric
3030         encryption.
3031         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): If RECP is zero,
3032         return error value.
3033
3034         * rungpg.c (_gpgme_gpg_op_verify): Add "--" argument.
3035
3036 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
3037
3038         * passphrase.c (_gpgme_passphrase_status_handler): Also set the
3039         error No_Passphrase if only a bad passphrase was provided.
3040
3041 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
3042
3043         * rungpg.c (_gpgme_gpg_op_verify): If TEXT is of mode
3044         GPGME_DATA_MODE_IN, construct a command line that stores the
3045         plaintext in TEXT.
3046         * verify.c (gpgme_op_verify_start): Accept TEXT being
3047         uninitialized, and in this case interpret SIG as a normal or
3048         cleartext signature and TEXT as a return data object.
3049         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.
3050
3051 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
3052
3053         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext) [!ENABLE_GPGSM]:
3054         Add stub function.
3055
3056 2002-02-28  Werner Koch  <wk@gnupg.org>
3057
3058         * key.h (subkey_s): New member expires_at.
3059         * keylist.c (keylist_colon_handler): Set it here
3060         * key.c (gpgme_key_get_as_xml,gpgme_key_get_ulong_attr): Return it.
3061
3062 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
3063
3064         * rungpg.h (_gpgme_gpg_op_keylist_ext): New prototype.
3065         * rungpg.c (_gpgme_gpg_op_keylist_ext): New function.
3066         * engine-gpgsm.h (_gpgme_gpgsm_op_keylist_ext): New prototype.
3067         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): New function.
3068         * engine.h (_gpgme_engine_op_keylist_ext): New prototype.
3069         * engine.c (_gpgme_engine_op_keylist_ext): New function.
3070         * keylist.c (gpgme_op_keylist_ext_start): New function.
3071
3072 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
3073
3074         * gpgme.h: Add new error code GPGME_Invalid_Recipient.
3075         * encrypt.c (struct encrypt_result_s): New member invalid_recipients,
3076         rename no_recipients to no_valid_recipients.
3077         (_gpgme_encrypt_status_handler): Include error for invalid
3078         recipients.
3079         * engine-gpgsm.c (gpgsm_set_recipients): Change type of first
3080         argument to GpgsmObject.  Use that to report back the status about
3081         the recipients.
3082
3083 2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
3084
3085         * verify.c (_gpgme_verify_status_handler): Fix the last change.
3086
3087 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
3088
3089         * engine.c (_gpgme_engine_op_encrypt_sign): New function.
3090         * engine.h (_gpgme_engine_op_encrypt_sign): New prototype.
3091         * rungpg.c (_gpgme_append_gpg_args_from_signers): New function.
3092         (_gpgme_gpg_op_sign): Use that new function.
3093         (_gpgme_gpg_op_encrypt_sign): New function.
3094         * rungpg.h (_gpgme_gpg_op_encrypt_sign): New prototype. 
3095         * gpgme.h (gpgme_op_encrypt_sign_start): New prototype.
3096         (gpgme_op_encrypt_sign): Likewise.
3097         * Makefile.am (libgpgme_la_SOURCES): Add encrypt-sign.c.
3098         * ops.h (_gpgme_encrypt_status_handler): Add prototype.
3099         (_gpgme_sign_status_handler): Add prototype.
3100         * sign.c (sign_status_handler): Rename to ...
3101         (_gpgme_sign_status_handler): ... this and make non-static.
3102         * encrypt.c (encrypt_status_handler): Rename to ...
3103         (_gpgme_encrypt_status_handler): ... this and make non-static.
3104         * encrypt.c (gpgme_op_encrypt_start): Use new status handler name.
3105         * sign.c (gpgme_op_sign_start): Likewise.
3106         
3107 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
3108
3109         * verify.c (_gpgme_verify_status_handler): Parse the args line to
3110         see if the problem is due to a missing key, and report that back
3111         to the user.
3112
3113 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
3114
3115         * context.h (struct gpgme_context_s): New member include_certs.
3116         * gpgme.h (gpgme_set_include_certs): Add prototype.
3117         (gpgme_get_include_certs): Likewise.
3118         * gpgme.c (gpgme_set_include_certs): New function.
3119         (gpgme_get_include_certs): Likewise.
3120         (gpgme_new): Set include_certs to 1 (the default).
3121         * engine.c (_gpgme_engine_op_sign): Accept new argument include_certs,
3122         and pass it to _gpgme_gpgsm_op_sign.
3123         * engine.h (_gpgme_engine_op_sign): Likewise for prototype.
3124         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Accept new argument
3125         include_certs and handle it.
3126         * engine-gpgsm.h (_gpgme_gpgsm_start): Add new argument include_certs.
3127         * sign.c (gpgme_op_sign_start): Add new argument to
3128         _gpgme_engine_op_sign call.
3129
3130 2002-02-14  Werner Koch  <wk@gnupg.org>
3131
3132         * keylist.c (gpgme_op_keylist_start): Do not use a verbose listing.
3133
3134 2002-02-13  Werner Koch  <wk@gnupg.org>
3135
3136         * vasprintf.c, fopencookie.c: Add replacement functions.
3137         * util.h: Add prototypes for them.
3138
3139 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
3140
3141         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return 0 if we
3142         reach the end of the function.
3143
3144 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
3145
3146         * genkey.c (gpgme_op_genkey_start): Fix logic in validity check.
3147         (gpgme_op_genkey_start): Skip newlines after opening tag.
3148
3149         * engine-gpgsm.c (_gpgme_gpgsm_start): Remove cruft.
3150
3151 2002-02-08  Marcus Brinkmann  <marcus@g10code.de>
3152
3153         * genkey.c (gpgme_op_genkey_start): Allow PUBKEY and SECKEY to be
3154         set, and pass them down to the crypto engine.
3155         * engine-gpgsm.h (_gpgme_gpgsm_start): New arguments PUBKEY and SECKEY.
3156         * engine.h: Likewise.
3157         * rungpg.h (_gpgme_gpg_spawn): Likewise.
3158         * engine.c (_gpgme_engine_op_genkey): Likewise.  Use those
3159         arguments.
3160         * rungpg.c (_gpgme_gpg_op_genkey): Likewise.  Complain if those
3161         arguments are set.
3162         * engine-gpgsm.c (_gpgme_gpgsm_op_genkey): Likewise.  Implement
3163         function.
3164
3165         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Beautify comment.
3166
3167 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
3168
3169         * rungpg.c (_gpgme_gpg_op_keylist): Remove handling of keylist
3170         mode (for now).
3171
3172 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
3173
3174         * wait.c (gpgme_wait): Add new argument STATUS, in which the
3175         status of the returned context is returned.
3176         (_gpgme_wait_on_condition): Rework the function a bit, to make it
3177         aware of cancelled processes, and to allow to use gpgme_wait with
3178         CTX being NULL (as documented in the source).
3179         (struct proc_s): New member REPORTED.
3180         * gpgme.h: Fix prototype.
3181         * verify.c (gpgme_op_verify): Fix use of gpgme_wait.
3182         * sign.c (gpgme_op_sign): Likewise.
3183         * import.c (gpgme_op_import): Likewise.
3184         * genkey.c (gpgme_op_genkey): Likewise.
3185         * export.c (gpgme_op_export): Likewise.
3186         * encrypt.c (gpgme_op_encrypt): Likewise.
3187         * delete.c (gpgme_op_delete): Likewise.
3188         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
3189
3190 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
3191
3192         * gpgme.c (gpgme_set_keylist_mode): Possibly return an error
3193         value.
3194         (gpgme_get_keylist_mode): New function.
3195         (gpgme_new): Set the default for keylist_mode member of CTX.
3196
3197         * gpgme.h (gpgme_set_keylist_mode): Fix prototype.
3198         (gpgme_get_keylist_mode): New prototype.
3199         (GPGME_KEYLIST_MODE_LOCAL): New macro.
3200         (GPGME_KEYLIST_MODE_EXTERN): Likewise..
3201
3202 2002-02-02  Marcus Brinkmann  <marcus@g10code.de>
3203
3204         This patch has gotten a bit large... mmh.  The main thing that
3205         happens here is that error values are now not determined in the
3206         operation function after gpgme_wait completed, but in the status
3207         handler when EOF is received.  It should always be the case that
3208         either an error is flagged or EOF is received, so that after a
3209         gpgme_wait you should never have the situation that no error is
3210         flagged and EOF is not received.  One problem is that the engine
3211         status handlers don't have access to the context, a horrible
3212         kludge works around this for now.  All errors that happen during a
3213         pending operation should be catched and reported in ctx->error,
3214         including out-of-core and cancellation.  This rounds up neatly a
3215         couple of loose ends, and makes it possible to pass up any errors
3216         in the communication with the backend as well.  As a bonus, there
3217         will be a function to access gpgme->wait, so that the operations
3218         can truly be implemented with their _start function.
3219
3220         * engine-gpgsm.c (gpgsm_status_handler): Horrible kludge to report
3221         error back to the context.
3222         * rungpg.c (gpg_status_handler): Same horrible kludge applied here.
3223
3224         * engine-gpgsm.c (gpgsm_assuan_simple_command): Add error checking.
3225
3226         * wait.c (_gpgme_wait_on_condition): If canceled, set CTX->error
3227         to a value indication that.
3228
3229         * verify.c (add_notation): Set error, not out_of_core.
3230         (finish_sig): Likewise.
3231         (gpgme_op_verify_start): Don't clear out_of_core.
3232         (_gpgme_verify_status_handler): At EOF, clean up the notation data.
3233         (gpgme_op_verify): And don't do it here.
3234
3235         * trustlist.c (trustlist_status_handler): Check error, not out_of_core.
3236         (gpgme_op_trustlist_start): Don't clear out_of_core.
3237         (gpgme_op_trustlist_next): Check error, not out_of_core.
3238         (gpgme_op_trustlist_end): Likewise.
3239
3240         * ops.h (test_and_allocate_result): New macro.
3241         (_gpgme_passphrase_result): Remove prototype.
3242         * delete.c (gpgme_op_delete): Return error from context.
3243         (delete_status_handler): Use macro test_and_allocate_result.
3244         Perform error checking at EOF.
3245         (gpgme_op_delete_start): Release result.
3246         * passphrase.c (_gpgme_passphrase_status_handler): Use macro
3247         test_and_allocate_result, and perform error checking here.
3248         (_gpgme_passphrase_result): Function removed.
3249         * sign.c (gpgme_op_sign_start): Do not set out_of_core to zero.
3250         (gpgme_op_sign): Just return the error value from the context.
3251         (sign_status_handler): Only progress if no error is set yet.  If
3252         we process an EOF, set the resulting error value (if any).
3253         * decrypt.c (_gpgme_decrypt_result): Function removed.
3254         (create_result_struct): Function removed.
3255         (_gpgme_decrypt_status_handler): Use macro test_and_allocate_result,
3256         caclulate error on EOF, do not progress with errors.
3257         (_gpgme_decrypt_start): Do not set out_of_core to zero.
3258         (gpgme_op_decrypt): Just return the error value from the context.
3259         * encrypt.c (encrypt_status_handler): Perform the error checking
3260         here.
3261         (gpgme_op_encrypt_start): Do not clear out_of_core.
3262         * export.c (export_status_handler): Return if error is set in context.
3263         (gpgme_op_export_start): Release result.
3264         (gpgme_op_export): Return error from context.
3265         * decrypt-verify.c (gpgme_op_decrypt_verify): Return the error in
3266         the context.
3267         * genkey.c (genkey_status_handler): Use macro
3268         test_and_allocate_result.  Perform error checking at EOF.
3269         (gpgme_op_genkey): Just return the error from context.
3270         * import.c (gpgme_op_import): Return the error from context.
3271         (import_status_handler): Use macro test_and_allocate_result.
3272         * keylist.c (gpgme_op_keylist_start): Do not clear out_of_core.
3273         (gpgme_op_keylist_next): Return error of context.
3274         (keylist_colon_handler): Set error instead out_of_code.
3275         (finish_key): Likewise.
3276
3277         * context.h: Remove member out_of_core, add member error.
3278         * gpgme.c (_gpgme_release_result): Clear error flag.
3279
3280         * engine.h (_gpgme_engine_get_error): New prototype.
3281         * engine.c (_gpgme_engine_get_error): New function.
3282         * engine-gpgsm.c (_gpgme_gpgsm_get_error): New function.
3283
3284         * engine-gpgsm.c (map_assuan_error): New function.
3285         (gpgsm_assuan_simple_command): Change return type to GpgmeError,
3286         use the new function to map error values.
3287         (gpgsm_set_fd): Change return type tp GpgmeError.
3288         (_gpgme_gpgsm_op_decrypt): Change type of ERR to GpgmeError.
3289         (gpgsm_set_recipients): Likewise.  Change type of return value
3290         equivalently.  Adjust error values.
3291         (_gpgme_gpgsm_op_import): Likewise.
3292         (_gpgme_gpgsm_op_sign): Likewise.
3293         (struct gpgsm_object_s): New member error.
3294         (gpgsm_status_handler): Set error if error occurs.  Determine
3295         error number from ERR line received.  If assuan_read_line fails,
3296         terminate the connection.
3297
3298 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
3299
3300         * Makefile.am (MOSTLYCLEANFILES): New variable.
3301
3302 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
3303
3304         * engine-gpgsm.c (gpgsm_status_handler): At error, terminate the
3305         connection to the server.
3306
3307 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
3308
3309         * rungpg.h: Add STATUS_KEY_CREATED.
3310
3311         * progress.c: New file.
3312         * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
3313
3314         * genkey.c (genkey_status_handler): Use
3315         _gpgme_progress_status_handler.  Add check for status.
3316         (struct genkey_result_s): New structure.
3317         (_gpgme_release_genkey_result): New function.
3318         (gpgme_op_genkey): Check for error.
3319         * gpgme.c (_gpgme_release_result): Call
3320         _gpgme_release_genkey_result.
3321         * ops.h (_gpgme_release_genkey_result): Add prototype.
3322         * types.h (GenKeyResult): New type.
3323         * context.h (gpgme_context_s): Add GenKeyResult to member result.
3324
3325 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
3326
3327         * gpgme.c (_gpgme_release_result): Call
3328         _gpgme_release_delete_result.
3329         * ops.h (_gpgme_release_delete_result): Add prototype.
3330         * types.h (DeleteResult): New type.