1 2004-12-07 Marcus Brinkmann <marcus@g10code.de>
3 * lesser.texi (Library Copying): Change from @appendixsec to
5 * gpgme.texi (Features): Change reference to GPL to one to LGPL.
7 * Makefile.am: Change license to LGPL.
8 (gpgme_TEXINFOS): Replace gpl.texi with lesser.texi.
10 * gpgme.texi: Change license to LGPL (also for documentation of
12 * lesser.texi: New file.
13 * gpl.texi: File removed.
15 * gpgme.texi (Creating Contexts): Fix cut&paste error. Reported
16 by Noel Torres <envite@rolamasao.org>.
18 2004-09-30 Marcus Brinkmann <marcus@g10code.de>
20 * Makefile.am (gpgme_TEXINFOS): Remove fdl.texi.
21 * gpgme.texi: Do not include fdl.texi. Change license to GPL.
22 * fdl.texi: File removed.
24 2004-09-29 Marcus Brinkmann <marcus@g10code.de>
26 * gpgme.texi (Key Management): Change type of keylist_mode in
27 gpgme_key_t to gpgme_keylist_mode_t.
29 2004-09-28 Marcus Brinkmann <marcus@g10code.de>
31 * gpgme.texi (Passphrase Callback): Fix last change.
33 2004-09-27 Marcus Brinkmann <marcus@g10code.de>
35 * gpgme.texi (Passphrase Callback): Document
36 GPG_ERR_NOT_IMPLEMENTED.
38 * gpgme.texi: Update copyright year for tex version.
40 2004-07-29 Moritz Schulte <moritz@g10code.com>
42 * gpgme.texi (Verify): Fix gpgme_get_key example (ancient
43 force_update argument was still there).
45 2004-06-08 Marcus Brinkmann <marcus@g10code.de>
47 * gpgme.texi (Listing Keys): Elaborate on the length restrictions
50 * gpgme.texi (Decrypt and Verify): Document the NO_DATA error
52 (Verify): Document the relationship between gpgme_op_verify_result
53 and the decrypt and verify operations.
55 2004-05-21 Marcus Brinkmann <marcus@g10code.de>
57 * gpgme.text (Verify): Document GPG_ERR_CERT_REVOKED status.
59 * gpgme.texi (Decrypt): Add note about new field wrong_key_usage
60 of gpgme_decrypt_result_t.
62 * gpgme.texi (Key Management): Add note about new field
63 keylist_mode of gpgme_key_t.
65 2004-04-29 Marcus Brinkmann <marcus@g10code.de>
67 * gpgme.texi (Verify): Correct type of member wrong_key_usage.
69 2004-03-29 Moritz Schulte <moritz@duesseldorf.ccc.de>
71 * gpgme.texi (Verify): Fix type of gpgme_op_verify_result.
72 * gpgme.texi (Key Listing Mode): Typo fix.
74 2004-03-23 Marcus Brinkmann <marcus@g10code.de>
76 * gpgme.texi (Library Version Check): Fix the instruction when to
79 2004-03-03 Marcus Brinkmann <marcus@g10code.de>
81 * gpgme.texi (I/O Callback Example Qt): New section by Marc Mutz.
83 2004-02-24 Marcus Brinkmann <marcus@g10code.de>
85 * gpgme.texi (cancellation): New section.
87 2004-02-17 Werner Koch <wk@gnupg.org>
89 * gpgme.texi (Key Listing Mode): Doc KEYLIST_MODE_VALIDATE.
91 2004-02-06 Moritz Schulte <mo@g10code.com>
93 * gpgme.texi: A couple of small fixes regarding the Largfile
96 2004-02-01 Marcus Brinkmann <marcus@g10code.de>
98 * gpgme.texi (Largefile Support): New section.
100 2004-01-13 Marcus Brinkmann <marcus@g10code.de>
102 * gpgme.texi (Key Management): Fix exportable field.
104 2003-12-25 Marcus Brinkmann <marcus@g10code.de>
106 * gpgme.texi (Key Management): Rename member class in
107 gpgme_key_sig_t to sig_class.
108 (Creating a Signature): Likewise for gpgme_signature_t.
110 2003-12-23 Moritz Schulte <mo@g10code.com>
112 * gpgme.texi (Listing Keys): Minor clarification for
115 2003-10-06 Marcus Brinkmann <marcus@g10code.de>
117 * gpgme.texi (Signal Handling): New section.
119 2003-09-14 Marcus Brinkmann <marcus@g10code.de>
121 * gpgme.texi (Multi Threading): Correct documentation on memory
122 synchronization requirement.
124 * gpgme.texi (Locale): New section.
125 (Multi Threading): Set locale in example.
127 2003-09-13 Marcus Brinkmann <marcus@g10code.de>
129 * gpgme.texi (Error Strings): Add gpgme_strerror_r.
131 2003-09-13 Marcus Brinkmann <marcus@g10code.de>
133 * gpgme.texi (Multi Threading): Update documentation.
135 2003-09-03 Marcus Brinkmann <marcus@g10code.de>
137 * gpgme.texi (Header): We don't use the assuan namespace anymore.
138 Document new thread options.
140 2003-08-14 Marcus Brinkmann <marcus@g10code.de>
142 * gpgme.texi (Creating a Signature): Change type of member class
145 2003-08-04 Marcus Brinkmann <marcus@g10code.de>
147 * gpgme.texi (Verify): Get error code from SIG->status in the code
148 for gpgme_get_sig_status.
150 2003-07-31 Marcus Brinkmann <marcus@g10code.de>
152 * gpgme.texi (Key Management): Add can_authenticate flag.
154 * gpgme.texi (Listing Keys): Document GPG_ERR_AMBIGUOUS_NAME for
157 2003-07-29 Marcus Brinkmann <marcus@g10code.de>
159 * Makefile.am (EXTRA_DIST): Remove variable.
161 * gpgme.texi (Encrypting a Plaintext): Bad passphrase is only
162 possible with symmetric encryption, change the wording to reflect
165 * gpgme.texi (Creating a Signature): Document
166 GPG_ERR_UNUSABLE_SECKEY.
168 * gpgme.texi (Encrypting a Plaintext): Mention encrypt and sign
169 operations in result function.
170 (Creating a Signature): Likewise.
172 2003-07-23 Marcus Brinkmann <marcus@g10code.de>
174 * gpgme.texi (Key Listing Mode): Remove word duplication.
175 (Listing Keys): Remove mentioning of force argument.
176 (Verify): Don't mention r_stat. Fix some typos.
177 (Decrypt and Verify): Correct info how to get the result. Don't
179 (Manipulating Data Buffers): Fix documentation of return value.
180 (Listing Keys): Update examples.
181 (Decrypt): Result might also be available when operation failed.
182 (Verify): Result might also be available when operation failed.
183 All spotted by Stéphane Corthésy.
185 2003-07-22 Marcus Brinkmann <marcus@g10code.de>
187 * gpgme.texi (Error Sources): Fix cut and paste error.
189 2003-07-09 Marcus Brinkmann <marcus@g10code.de>
191 * gpgme.texi (Key Management): Clarify difference between can_sign
193 (Information About Keys): Likewise for GPGME_ATTR_CAN_SIGN and
194 GPGME_ATTR_CAN_CERTIFY.
196 2003-07-08 Marcus Brinkmann <marcus@g10code.de>
198 * gpgme.texi (Progress Meter Callback): Change return type of
199 gpgme_progress_cb_t to void.
201 2003-06-22 Marcus Brinkmann <marcus@g10code.de>
203 * gpgme.texi: Add 2003 to copyright notice.
205 * gpgme.texi (Header): Fix name space documentation on
208 2003-06-22 Marcus Brinkmann <marcus@g10code.de>
210 * gpgme.texi (Multi Threading): Remove reference to
213 2003-06-06 Marcus Brinkmann <marcus@g10code.de>
215 * gpgme.texi (Crypto Operations): Rename gpgme_invalid_user_id_t
216 to gpgme_invalid_key_t.
218 2003-06-06 Marcus Brinkmann <marcus@g10code.de>
220 * gpgme.texi: Change error codes to GPG_ERR_* variants.
221 (Error Handling): Rewritten.
223 2003-05-29 Marcus Brinkmann <marcus@g10code.de>
225 * gpgme.texi (Exporting Keys): Change and document prototypes.
226 Add new gpgme_op_export_ext and gpgme_op_export_ext_start
228 (Selecting Recipients): Section removed.
229 (Encrypting a Plaintext): Change prototypes and document the
232 2003-05-28 Marcus Brinkmann <marcus@g10code.de>
234 * gpgme.texi (Exporting Keys): Change argument type from
235 gpgme_recipient_t to gpgme_user_id_t.
236 (Encrypting a Plaintext): Likewise.
237 (Selecting Recipients): Rewritten.
239 2003-05-27 Marcus Brinkmann <marcus@g10code.de>
241 * gpgme.texi (Protocol Selection): Do not use @acronym in @node
242 because that breaks texi2dvi.
244 * gpgme.texi (Passphrase Callback): Document new prototype.
246 2003-05-18 Marcus Brinkmann <marcus@g10code.de>
248 * gpgme.texi (Header): Remove Gpgme as namespace prefix. Add
249 _GPGME to namespace prefix.
250 * gpgme.texi (Multi Threading): Add note about link order.
252 2003-05-04 Marcus Brinkmann <marcus@g10code.de>
254 * gpgme.texi (Listing Keys): Document what happens if key is not
257 * gpgme.texi (Importing Keys): Fix cut and paste error.
259 2003-04-30 Marcus Brinkmann <marcus@g10code.de>
261 * gpgme.texi (Encrypting a Plaintext): Remove reference to
263 (Detailed Results): Subsection removed.
265 * gpgme.texi (Key Listing Mode): Add GPGME_KEYLIST_MODE_SIGS.
266 (Manipulating Keys): Add obsoleteness note.
267 (Key Signatures): Likewise.
268 (Information About Keys): Likewise.
269 (Key Management): Add new data types GpgmeSubkey, GpgmeKeySig,
270 GpgmeUserID, and all the information about GpgmeKey.
272 2003-04-29 Marcus Brinkmann <marcus@g10code.de>
274 * gpgme.texi (Listing Keys): Remove force_update argument from
277 * gpgme.texi (Trust Item Management): Add data members of
279 (Information About Trust Items): Add note about obsoleteness.
280 (Manipulating Trust Items): Add gpgme_trust_item_ref and
281 gpgme_trust_item_unref.
283 2003-04-28 Marcus Brinkmann <marcus@g10code.de>
285 * gpgme.texi (Verify): Rewritten to take into account new and
286 deprecated functions and data types.
288 * gpgme.texi (Decrypt): Descript gpgme_op_decrypt_result and
291 2003-04-27 Marcus Brinkmann <marcus@g10code.de>
293 * gpgme.texi (Encrypting a Plaintext): Add info about
294 GpgmeEncryptResult and gpgme_op_encrypt_result.
296 * gpgme.texi (Creating a Signature): Add info about
297 GpgmeNewSignature, GpgmeSignResult and gpgme_op_sign_result.
298 (Crypto Operations): Add GpgmeInvalidUserID.
299 (Algorithms): New chapter.
301 * gpgme.texi (Deleting Keys): Document
302 GPGME_Ambiguous_Specification.
303 (Error Values): Remove GPGME_Invalid_Type and GPGME_Invalid_Mode.
304 Add GPGME_Unknown_Reason, GPGME_Not_Found,
305 GPGME_Ambiguous_Specification, GPGME_Wrong_Key_Usage,
306 GPGME_Key_Revoked, GPGME_Key_Expired, GPGME_No_CRL_Known,
307 GPGME_CRL_Too_Old, GPGME_Policy_Mismatch, GPGME_No_Secret_Key,
308 GPGME_Key_Not_Trusted, GPGME_Issuer_Missing, GPGME_Chain_Too_Long,
309 GPGME_Unsupported_Algorithm, GPGME_Sig_Expired,
310 GPGME_Bad_Signature, GPGME_No_Public_Key.
312 2003-04-25 Marcus Brinkmann <marcus@g10code.de>
314 * gpgme.texi (Importing Keys): Change GPGME_IMPORT_PRIVATE to
317 * gpgme.texi (Importing Keys): Remove note about gpgme_get_op_info.
318 (Detailed Results): Remove note about import.
320 * gpgme.texi (Importing Keys): Add documentation for
321 GpgmeImportStatus, GpgmeImportResult and gpgme_op_import_result.
323 * gpgme.texi (Generating Keys): Fix documentation of public and
326 2003-04-24 Marcus Brinkmann <marcus@g10code.de>
328 * gpgme.texi (Generating Keys): Document changed gpgme_op_genkey
329 and new gpgme_op_genkey_result function. Document
330 GpgmeGenKeyResult data type.
332 * gpgme.texi (Error Values): Rename GPGME_No_Passphrase to
333 GPGME_Bad_Passphrase.
334 * gpgme.texi (Decrypt): Likewise.
335 (Decrypt and Verify): Likewise.
336 (Creating a Signature): Likewise.
337 (Encrypting a Plaintext): Likewise.
339 * gpgme.texi (Error Values): Rename GPGME_No_Recipients to
340 GPGME_No_UserID and GPGME_Invalid_Recipient to
341 GPGME_Invalid_UserID.
342 (Encrypting a Plaintext): Likewise.
344 * gpgme.texi (Error Values): Remove GPGME_Busy and GPGME_No_Request.
345 (Listing Keys): Likewise.
346 (Listing Trust Items): Likewise.
348 2003-02-06 Marcus Brinkmann <marcus@g10code.de>
350 * gpgme.texi (Cancelling an Operation): Removed.
351 (Passphrase Callback): Document new type for GpgmePassphraseCb.
353 2003-01-30 Marcus Brinkmann <marcus@g10code.de>
355 * gpgme.texi (Engine Information): Rename member part to
358 * gpgme.texi (Protocols and Engines): Document
359 gpgme_get_protocol_name.
361 * gpgme.texi (Engine Information): Rewritten.
363 2003-01-29 Marcus Brinkmann <marcus@g10code.de>
365 * gpgme.texi (I/O Callback Interface): Document new even
367 (Waiting For Completion): Document new possible return values.
368 (I/O Callback Interface): Document return type of GpgmeIOCb.
370 2003-01-29 Marcus Brinkmann <marcus@g10code.de>
372 * gpgme.texi (Hooking Up Into Idle Time): Section removed.
374 2002-12-24 Marcus Brinkmann <marcus@g10code.de>
376 * gpgme.texi (Verify): Drop R_STAT argument in gpgme_op_verify.
377 * gpgme.texi (Decrypt and Verify): Likewise for
378 gpgme_op_decrypt_verify.
380 2002-12-23 Marcus Brinkmann <marcus@g10code.de>
382 * gpgme.texi (Information About Keys): Document that
383 GPGME_ATTR_IS_SECRET is not representable as a string anymore.
385 2002-12-22 Marcus Brinkmann <marcus@g10code.de>
387 * gpgme.texi (Key Signatures): New section.
388 (Listing Keys): Add gpgme_get_key.
390 2002-12-06 Marcus Brinkmann <marcus@g10code.de>
392 * gpgme.texi (Memory Based Data Buffers): New subsection.
393 (File Based Data Buffers): Likewise.
394 (Callback Based Data Buffers): Likewise.
395 (Manipulating Data Buffers): Update interfaces. Add
397 * gpgme.texi (Engine Version Check): Remove gpgme_check_engine.
399 2002-11-21 Marcus Brinkmann <marcus@g10code.de>
401 * gpgme.texi (Verify): Document the new interface.
403 2002-11-19 Marcus Brinkmann <marcus@g10code.de>
405 * gpgme.texi (Generating Keys): Document new argument to
408 2002-11-05 Marcus Brinkmann <marcus@g10code.de>
410 * gpgme.texi (Verify): Fix prototype of gpgme_get_sig_key.
411 Reported by Miguel Coca <e970095@zipi.fi.upm.es>.
413 2002-08-30 Marcus Brinkmann <marcus@g10code.de>
415 * gpgme.texi (Selecting Signers): Fix reference count.
417 2002-08-21 Marcus Brinkmann <marcus@g10code.de>
419 * gpgme.texi (Header): Document name space.
421 2002-08-20 Marcus Brinkmann <marcus@g10code.de>
423 * gpgme.texi (Importing Keys): Document gpgme_op_import_ext.
425 * gpgme.texi (Importing Keys): Undocument EOF.
427 2002-08-14 Werner Koch <wk@gnupg.org>
429 * gpgme.texi (Information About Keys): Changed GPGME_ATTR_TYPE.
431 2002-07-25 Marcus Brinkmann <marcus@g10code.de>
433 * gpgme.texi (Deleting Keys): Say that secret keys might not be
436 2002-07-25 Marcus Brinkmann <marcus@g10code.de>
438 * gpgme.texi (Information About Keys): Document (badly) the new
441 * gpgme.texi (Manipulating Data Buffers): Mention that backend
442 tries to detect encoding automatically.
444 2002-07-03 Marcus Brinkmann <marcus@g10code.de>
446 * gpgme.texi (Run Control): Update this section.
447 (Waiting For Completion): Likewise for this subsection.
448 (Cancelling an Operation): Likewise for this subsection.
449 (Using External Event Loops): New subsection with several
452 2002-06-28 Marcus Brinkmann <marcus@g10code.de>
454 * gpgme.texi (Multi Threading): Remove item about the need to
455 synchronize anything against gpgme_wait (except gpgme_wait
458 2002-06-27 Marcus Brinkmann <marcus@g10code.de>
460 * gpgme.texi (Information About Keys): Fix documentation for IDX.
461 (Information About Trust Items): Likewise.
463 2002-06-26 Werner Koch <wk@gnupg.org>
465 * gpgme.texi (Importing Keys): Document the return value -1 of
468 2002-06-20 Werner Koch <wk@gnupg.org>
470 * gpgme.texi (Verify): Explain the new whatidx variable.
472 2002-06-10 Werner Koch <wk@gnupg.org>
474 * gpgme.texi (Verify): Document attribute GPGME_ATTR_ERRTOK.
476 2002-06-04 Marcus Brinkmann <marcus@g10code.de>
478 * gpgme.texi (Multi Threading): Document new autodetection.
480 2002-06-04 Marcus Brinkmann <marcus@g10code.de>
482 * Makefile.am (DISTCLEANFILES): New variable.
484 2002-05-26 Marcus Brinkmann <marcus@g10code.de>
486 * gpgme.texi: Some typographical correctons throughout.
488 2002-05-09 Marcus Brinkmann <marcus@g10code.de>
490 * gpgme.texi (Using Automake): New section.
492 2002-05-09 Marcus Brinkmann <marcus@g10code.de>
494 * gpgme.texi (Multi Threading): Escape { and }.
496 2002-05-09 Marcus Brinkmann <marcus@g10code.de>
498 * gpgme.texi (Overview): Replace note about thread-safeness.
499 (Multi Threading): New section.
501 2002-05-03 Werner Koch <wk@gnupg.org>
503 * gpgme.texi (Manipulating Data Buffers): Changed some data types
505 (Protocol Selection): Added gpgme_get_protocol.
506 (Verify): Updated to include the new attribute fucntions and
509 2002-04-27 Werner Koch <wk@gnupg.org>
511 * gpgme.texi (Manipulating Data Buffers): New type GpgmeDataEncoding.
513 2002-04-23 Marcus Brinkmann <marcus@g10code.de>
515 * gpgme.texi (Passphrase Callback): Document that either return
516 argument can be NULL.
517 (Progress Meter Callback): Likewise.
519 2002-04-22 Marcus Brinkmann <marcus@g10code.de>
521 * gpgme.texi (Passphrase Callback): Fix small typo. Document the
522 new function gpgme_get_passphrase_cb.
523 (Progress Meter Callback): Document the new function
524 gpgme_get_progress_cb.
526 2002-04-16 Marcus Brinkmann <marcus@g10code.de>
528 * gpgme.texi (Creating a Signature): Fix function name. Reported
529 by Wichert Ackerman <wichert@debian.org>.
531 2002-03-29 Marcus Brinkmann <marcus@g10code.de>
533 * gpgme.texi (direntry): End index entry with a full stop.
534 Patch submitted by Jose Carlos Garcia Sogo <jsogo@debian.org>.
536 2002-03-17 Marcus Brinkmann <marcus@g10code.de>
538 * gpgme.texi (Detailed Results): Fix syntax error in last change.
540 2002-03-08 Werner Koch <wk@gnupg.org>
542 * gpgme.texi (Detailed Results): Import does also return info.
544 2002-03-06 Marcus Brinkmann <marcus@g10code.de>
546 * gpgme.texi (Encrypting a Plaintext): Document symmetric
549 2002-03-06 Marcus Brinkmann <marcus@g10code.de>
551 * gpgme.texi (Error Strings): Add example.
552 * gpgme.texi (Listing Keys): Likewise.
554 2002-03-03 Marcus Brinkmann <marcus@g10code.de>
556 * gpgme.texi (Information About Keys): Document GPGME_ATTR_EXPIRE.
558 2002-03-03 Marcus Brinkmann <marcus@g10code.de>
560 * gpgme.texi (Verify): Document verification of normal and
561 cleartext signatures.
563 2002-02-27 Marcus Brinkmann <marcus@g10code.de>
565 * gpgme.texi (Listing Keys): Document gpgme_op_keylist_ext_start.
567 2002-02-27 Marcus Brinkmann <marcus@g10code.de>
569 * gpgme.texi (Encrypting a Plaintext): Document
570 GPGME_Invalid_Recipients.
571 (Error Values): Likewise.
573 2002-02-26 Marcus Brinkmann <marcus@g10code.de>
575 * gpgme.texi (Encrypting a Plaintext): Document
576 gpgme_op_encrypt_sign and gpgme_op_encrypt_sign_start.
578 2002-02-25 Marcus Brinkmann <marcus@g10code.de>
580 * gpgme.texi (Creating a Signature): Add a note about
581 certificates to include.
582 (Included Certificates): New section.
584 2002-02-09 Marcus Brinkmann <marcus@g10code.de>
586 * gpgme.texi (Detailed Results): Remove literal tags.
587 (Generating Keys): Update documentation.
589 * gpgme.texi (Generating Keys): Fix syntax error.
591 2002-02-06 Marcus Brinkmann <marcus@g10code.de>
593 * gpgme.texi (Waiting For Completion): Adjust doc to changes in
596 2002-02-06 Marcus Brinkmann <marcus@g10code.de>
598 * gpgme.texi (Key Listing Mode): Update documentation.
600 2002-01-31 Marcus Brinkmann <marcus@g10code.de>
602 * gpgme.texi (Generating Keys): Document error at creation
605 2002-01-30 Marcus Brinkmann <marcus@g10code.de>
607 * gpgme.texi (Deleting Keys): Document new error values.
609 2002-01-30 Marcus Brinkmann <marcus@g10code.de>
611 * gpgme.texi (Importing Keys): Add reference to gpgme_get_op_info.
613 2002-01-30 Marcus Brinkmann <marcus@g10code.de>
615 * gpgme.texi: Some spell checking.
617 2002-01-30 Marcus Brinkmann <marcus@g10code.de>
619 * gpgme.texi: Add all the gpgme_op_*_start functions.
620 Fill the concept index with many, many entries.
622 2002-01-29 Marcus Brinkmann <marcus@g10code.de>
624 * gpgme.texi (Run Control): New section.
625 (Verify): Docuent gpgme_get_notation.
626 (More Information): New section describing gpgme_get_op_info.
628 2002-01-22 Marcus Brinkmann <marcus@g10code.de>
630 * gpgme.texi (Passphrase callback): Change GpgmePassphraseCb's
631 R_HD type from void* to void**.
633 2002-01-22 Marcus Brinkmann <marcus@g10code.de>
635 * gpgme.texi (Creating data buffers): Change
636 gpgme_data_new_from_filepart's LENGTH type from off_t to size_t.
638 2002-01-22 Marcus Brinkmann <marcus@g10code.de>
640 * gpgme.texi (Generating keys): New subsection.
641 (Exporting keys): Likewise.
642 (Importing keys): Likewise.
643 (Deleting keys): Likewise.
645 2002-01-16 Marcus Brinkmann <marcus@g10code.de>
647 * gpgme.texi: g10Code -> g10 Code
649 * gpgme.texi (Top): Complete detailmenu.
651 * gpgme.texi: Convert embarassing cruft to the real thing.
653 2002-01-16 Marcus Brinkmann <marcus@g10code.de>
655 * ChangeLog: New file.
656 * gpgme.texi: Likewise.
657 * gpl.texi: Likewise.
658 * fdl.texi: Likewise.
659 * Makefile.am (info_TEXINFOS): New variable.
660 (gpgme_TEXINFOS): Likewise.
662 Copyright 2002, 2003, 2004 g10 Code GmbH
664 This file is free software; as a special exception the author gives
665 unlimited permission to copy and/or distribute it, with or without
666 modifications, as long as this notice is preserved.
668 This file is distributed in the hope that it will be useful, but
669 WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
670 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.