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