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