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