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