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