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