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