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