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