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