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