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