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