Changed default algo and size.
[gnupg.git] / jnlib / ChangeLog
blob8c12f5fc55f88d48eb75e34b4024bd771c15a520
1 2009-03-25  Werner Koch  <wk@g10code.com>
3         * logging.c (fun_closer): Never close fd 2.
4         (set_file_fd): Close logstream early.
6 2009-02-25  Werner Koch  <wk@g10code.com>
8         * logging.c (get_tid_callback): New.
9         (do_logv): Use it.
10         (log_set_get_tid_callback): New.
12 2009-01-22  Werner Koch  <wk@g10code.com>
14         * t-support.c (gpg_err_code_from_errno) 
15         (gpg_err_code_from_syserror): New.
17 2008-11-20  Werner Koch  <wk@g10code.com>
19         * argparse.c (arg_parse): Fix last change.
21 2008-11-11  Werner Koch  <wk@g10code.com>
23         * argparse.h: Add a bunch of macros and constants.
24         * argparse.c: Use the new macros.  Re-indent the code.  Change
25         license back to LGPL 2.1.
27 2008-11-04  Werner Koch  <wk@g10code.com>
29         * w32-gettext.c: Merged with code from libgpg-error and rewrote
30         most parts.
32         * Makefile.am (AM_CFLAGS): Add -DJNLIB_IN_JNLIB.
34 2008-10-29  Werner Koch  <wk@g10code.com>
36         * stringhelp.c (make_filename): Implement using macros. Factor some
37         code out to ..
38         (change_slashes): New.
39         (make_filename_try): New.
41         * w32-gettext.c (gettext): Return if no domain is loaded.
42         Reported by Tom Pegios.
44 2008-10-28  Werner Koch  <wk@g10code.com>
46         * w32-gettext.c (gettext): Try the binary search if the string was
47         not found in the hash table.
49 2008-10-20  Werner Koch  <wk@g10code.com>
51         * w32-afunix.c (_w32_sock_connect): Mark ADDRLEN as unused.
53         * dotlock.c (release_dotlock): Do not mix declaration and code.
55         * stringhelp.c (make_basename): Silent gcc warning about unused arg.
56         * argparse.c (store_alias): Ditto.
57         (find_long_option): 
59 2008-10-15  Werner Koch  <wk@g10code.com>
61         * logging.c (do_logv) [W32]: Flush the log stream.
63 2008-09-29  Werner Koch  <wk@g10code.com>
65         * argparse.c (ARGERR_): Use constants for error values.
66         (optfile_parse): Prettify.  Replace xmalloc and xrealloc by malloc
67         and realloc.
68         * libjnlib-config.h (jnlib_strdup, jnlib_realloc): New.
70 2008-06-26  Werner Koch  <wk@g10code.com>
72         * stringhelp.c (print_sanitized_buffer2): Loose check for control
73         characters to better cope with utf-8.  The range 0x80..0x9f is
74         nowadays not anymore accidently used for control charaters.
76 2008-06-13  Werner Koch  <wk@g10code.com>
78         * dotlock.c: Reformat code and implement locking for W32.
79         (create_dotlock): Use snprintf.
81 2008-06-11  Werner Koch  <wk@g10code.com>
83         * utf8conv.c: Remove useless variable ACTIVE_CHARSET.  Suggested
84         by Petr Uzel.
86 2008-05-26  Werner Koch  <wk@g10code.com>
88         * argparse.c (usage): Make sure to print a trailing LF for usage(1).
90 2008-04-08  Werner Koch  <wk@g10code.com>
92         * w32-gettext.c (gettext_select_utf8): New.
93         (get_string): Support switching encodings.
94         (load_domain): Allocate space for DATA_NATIVE.
96 2008-03-25  Werner Koch  <wk@g10code.com>
98         * w32-gettext.c (_nl_locale_name): New.  Taken from
99         ../common/localename and GNU gettext's localename.c.
100         (set_gettext_file): Rewritten.
101         (gettext_localename): New.
103 2008-03-17  Werner Koch  <wk@g10code.com>
105         * logging.c (my_funopen_hook_size_t): New.
106         (fun_writer): Use it to cope with fopencookie/funopen differences.
107         * dotlock.c (read_lockfile): Initialize PID.  Reported by Stéphane
108         Corthésy.
110 2008-02-22  Werner Koch  <wk@g10code.com>
112         * argparse.c (strusage): Set copyright year to 2008.
114 2007-11-19  Werner Koch  <wk@g10code.com>
116         * stringhelp.c (percent_escape): Factor code out to
117         (do_percent_escape): .. new.
118         (try_percent_escape): New.
120 2007-10-01  Werner Koch  <wk@g10code.com>
122         * w32-afunix.c: Only keep the client related code.
123         (read_port_and_nonce): New.  Taken from Assuan.
124         (_w32_sock_connect): Rewritten.
126 2007-08-29  Werner Koch  <wk@g10code.com>
128         * argparse.c (initialize): Make strings translatable and remove
129         extra LF.
131 2007-08-24  Werner Koch  <wk@g10code.com>
133         * mischelp.c (same_file_p): New.
134         (libjnlib_dummy_mischelp_func): Remove as we now always have one
135         function.
137 2007-08-09  Werner Koch  <wk@g10code.com>
139         * argparse.c (show_help): Expand the @EMAIL@ macro in the package
140         bug reporting address.
142 2007-08-02  Werner Koch  <wk@g10code.com>
144         * t-stringhelp.c (test_compare_filenames): New.
146         * stringhelp.c (compare_filenames) [HAVE_DRIVE_LETTERS]: Fixed
147         comparison to take slash and backslash in account.
148         (make_filename): Avoid mixing / and \.
150 2007-07-04  Werner Koch  <wk@g10code.com>
152         * utf8conv.c (load_libiconv): Remove URL from translatble string.
154         Switched JNLIB from LGPLv2.1 to LGPLv3.
156 2007-07-01  Werner Koch  <wk@g10code.com>
158         * argparse.c (strusage): Use id 10 for the license string;
159         default to GPL3+.  Change long note to version 3 or later.
160         (show_version): Print the license info.
162 2007-06-19  Werner Koch  <wk@g10code.com>
164         * Makefile.am: Add support for regression tests.
165         * t-support.h, t-support.c: New.
166         * t-stringhelp.c: New.
168         * stringhelp.c (percent_escape): Add arg EXTRA to make it a more
169         general function.  Changed all callers.
171 2007-06-18  Werner Koch  <wk@g10code.com>
173         * w32-afunix.c (_w32_sock_bind): Changed to properly detect an
174         already used socket.
176 2007-06-18  Marcus Brinkmann  <marcus@g10code.de>
178         * stringhelp.h (percent_escape): New prototype.
179         * stringhelp.c (percent_escape): New function.
181 2007-06-11  Werner Koch  <wk@g10code.com>
183         * utf8conv.c (jnlib_iconv_open, jnlib_iconv, jnlib_iconv_close): New.
185 2007-06-06  Werner Koch  <wk@g10code.com>
187         * w32help.h: New.
188         * w32-gettext.c: New.  Taken from gnupg 1.4, added ngettext,
189         changed to use jnlib malloc functions and put under the LGPL.
190         * w32-reg.c: New.  Taken from../common/w32reg.c and changed to
191         LGPL.  Changed API to use the jnlib malloc functions.
192         * Makefile.am (libjnlib_a_SOURCES) [!W32]: Do not build the w32
193         specific modules.
195         * dotlock.c: Include stringhelp.h for stpcpy prototype.
197 2007-06-04  Werner Koch  <wk@g10code.com>
199         * dynload.h: New.  Taken from ../common and changed to LGPL.
201         * utf8conv.c (load_libiconv): New.  Taken from GnuPG 1.4
203 2007-05-30  Werner Koch  <wk@g10code.com>
205         * w32-pth.h, w32-pth.c: Remove.
207 2007-04-25  Werner Koch  <wk@g10code.com>
209         * argparse.c (long_opt_strlen): Fixed for utf-8.
211 2007-03-07  Werner Koch  <wk@g10code.com>
213         * argparse.c (strusage): Set copyright year to 2007.
215 2007-01-25  Werner Koch  <wk@g10code.com>
217         * stringhelp.c (utf8_charcount): New.
219 2006-11-29  Werner Koch  <wk@g10code.com>
221         * utf8conv.c (set_native_charset) [HAVE_W32_SYSTEM]: Fixed typo in
222         macro name.
224 2006-11-15  Werner Koch  <wk@g10code.com>
226         * logging.c (my_funopen_hook_ret_t): New.
227         (fun_writer): Use it.
229 2006-10-19  Werner Koch  <wk@g10code.com>
231         * stringhelp.c (memrchr) [!HAVE_MEMRCHR]: Provide a replacement.
233 2006-09-27  Werner Koch  <wk@g10code.com>
235         * mischelp.c: New.
236         (timegm): Copied from gnupg 1.4, changed from GPL to LGPL.  Fixed
237         a memory leak.
239         * stringhelp.h (isascii): New.
241         * stringhelp.c (strsep): New. Copied from gnupg 1.4.5
242         util/strgutil.c.
244         * strlist.h (STRLIST): Removed deprecated typedef. 
246         * types.h: Made cpp commands work with old compilers.  Also shows
247         up nicer with Emacs' font locking.
249         * w32-afunix.c (_w32_sock_connect): Set ERRNO for an invalid port.
251         Changed license from GPL to LGPL.  Note that all code has either
252         been written by me, David, employees of g10 Code or taken from
253         glibc.
254         
255         * libjnlib-config.h, stringhelp.c, stringhelp.h:
256         * strlist.c, strlist.h, utf8conv.c, utf8conv.h:
257         * argparse.c, argparse.h, logging.c, logging.h:
258         * dotlock.c, dotlock.h, types.h, mischelp.h:
259         * xmalloc.c, xmalloc.h, w32-pth.c, w32-pth.h:
260         * w32-afunix.c, w32-afunix.h: Tagged them to be long to jnlib
261         which is a part of GnuPG but also used by other projetcs. 
263 2006-09-22  Werner Koch  <wk@g10code.com>
265         * utf8conv.c: Reworked to match the gnupg 1.4.5 code.  This now
266         requires iconv support but this is reasonable for all modern
267         systems.
269 2006-08-29  Werner Koch  <wk@g10code.com>
271         * logging.c (do_logv): Emit a missing LF for fatal errors.
273 2006-06-28  Werner Koch  <wk@g10code.com>
275         * dotlock.c (make_dotlock, release_dotlock, read_lockfile)
276         (maybe_deadlock, destroy_dotlock, create_dotlock): Re-indented.
277         (create_dotlock): Repalces some log_fatal by log_error as it was
278         not intended that they should terminate.  Write the nodename to
279         the locking file. Code cleanups.
280         (read_lockfile): Reworked to read the node name.
281         (make_dotlock): Test for identical node name and delete lock stale
282         file.
283         (release_dotlock): Likewise.
285 2006-05-23  Werner Koch  <wk@g10code.com>
287         * libjnlib-config.h (JNLIB_NEED_UTF8CONV): Fixed typo in name.
289         * dotlock.c (release_dotlock): Don't act if we don't have any
290         locks at all.
291         (destroy_dotlock): New.  From 1.4.3.
292         (dotlock_remove_lockfiles): Make use of destroy function.
294 2006-05-19  Werner Koch  <wk@g10code.com>
296         * strlist.c (append_to_strlist2): Enabled.
298         * stringhelp.c (print_sanitized_buffer2): New.  Changed the rules
299         to match the behaviour of print_string2 from gnupg 1.4.3.
300         (print_sanitized_buffer): Use the new function.
301         (print_sanitized_string2): New.
302         (hextobyte): New.  Taken from gpg 1.4.3.
304 2006-04-28  Werner Koch  <wk@g10code.com>
306         * stringhelp.c (print_sanitized_buffer): Fix bug where the count
307         got wrong for the \xNN representation.
308         (sanitize_buffer): Fix bug where some control characters lose part
309         of their \xNN representation.
311 2006-04-20  Werner Koch  <wk@g10code.com>
313         * stringhelp.c (make_basename): New arg INPUTPATH for future
314         riscos compatibility.
316 2006-04-18  Werner Koch  <wk@g10code.com>
318         * libjnlib-config.h (JNLIB_NEED_UTF8CONF): Defined.
319         * strlist.c (add_to_strlist2) [JNLIB_NEED_UTF8CONV]: Enabled.
321 2005-06-15  Werner Koch  <wk@g10code.com>
323         * stringhelp.c (sanitize_buffer): Make P a void*.
324         (ascii_memistr, memistr): Ditto.
325         (ascii_memcasecmp): Ditto.
326         * logging.c (writen): Use void * for arg BUFFER.
327         * stringhelp.c (memistr): Fixed unsigned/signed pointer conflict.
328         (ascii_memistr): Ditto.
329         (ascii_memcasemem): Ditto.
330         * utf8conv.c (utf8_to_native): Ditto.
331         (utf8_to_native): Ditto.
332         * argparse.c (show_version): Removed non-required cast.
334 2005-01-19  Werner Koch  <wk@g10code.com>
336         * logging.c (fun_writer): Don't fallback to stderr. Print to
337         stderr only if connected to a tty.
339 2004-12-20  Werner Koch  <wk@g10code.com>
341         * w32-pth.c (do_pth_event_free): The events are hold in a ring
342         buffer.  Adjust for that.
343         (do_pth_event_body): Ditto.
344         (pth_event_isolate): Ditto.
345         (do_pth_wait): Ditto.
346         (_pth_event_count): Renamed to ..
347         (event_count): .. and adjusted as above.
348         (pth_init): Define 3 debug levels and change all debug calls to
349         make use of them.  This makes the moule now silent.
351 2004-12-19  Werner Koch  <wk@g10code.com>
353         * w32-pth.c (pth_init): Enable debugging depending on env var.
354         (pth_self): New.
355         (pth_mutex_release, pth_mutex_acquire): Implemented directly using
356         the W32 API.
358 2004-12-18  Werner Koch  <wk@g10code.com>
360         * w32-pth.c (pth_init): Reverse return values.  Use TRUE and FALSE
361         constants.
362         (pth_kill, pth_mutex_acquire, pth_attr_set, pth_join, pth_cancel):
363         Ditto.
365 2004-12-15  Werner Koch  <wk@g10code.com>
367         * logging.c [W32]: Don't include unavailable headers.
369 2004-12-14  Werner Koch  <wk@g10code.com>
371         * w32-pth.c (_pth_strerror): Renamed to ...
372         (w32_strerror): .. this. And let callers provide a buffer.
373         (spawn_helper_thread): Removed HD arg and hardwire the stack size
374         to 32k.
375         (do_pth_wait): Removed use of ATTR; not needed for the helper
376         threads.
377         (helper_thread): Renamed to ..
378         (launch_thread): .. this.  Release handle if not joinable.
379         (struct pth_priv_hd_s): Renamed to ...
380         (struct thread_info_s): .. this.  Add member JOINABLE and TH.
382 2004-12-14  Timo Schulz  <twoaday@g10code.com>
384         * w32-pth.c (pth_kill): Just release the crit section if
385         pth_init was really called. And set all handles to NULL.
386         (_pth_strerror): New.
387         (do_pth_wait): Before we enter the loop we check if there
388         are too much events in the ring.
389         
390 2004-12-14  Werner Koch  <wk@g10code.com>
392         * w32-pth.h (pth_event_occured): Removed macro. 
393         * w32-pth.c: Fixed license statement; its under the LGPL.
394         (enter_pth, leave_pth): Use them to bracket almost all public
395         functions.
397 2004-12-13  Timo Schulz  <twoaday@g10code.com>
399         * w32-pth.c (enter_pth, leave_pth): New.
400         (pth_init): Initialize global mutex section.
401         (pth_kill): Release global mutex section.
402         (helper_thread): New.
403         (pth_spawn): Make sure only one thread is running.
404         
405 2004-12-13  Werner Koch  <wk@g10code.com>
407         * stringhelp.c (w32_strerror) [W32]: New.
409         * w32-pth.c, w32-pth.h: Added real code written by Timo Schulz.
410         Not finished, though.
412 2004-12-07  Werner Koch  <wk@g10code.com>
414         * w32-pth.c, w32-pth.h: New.
416 2004-11-26  Werner Koch  <wk@g10code.com>
418         * logging.c [_WIN32]: Don't include socket headers.
420 2004-11-30  Timo Schulz  <ts@g10code.com>
422         * w32-afunix.c: New. AF_UNIX emulation for W32.
423         * w32-afunix.h: Likewise.
424         
425 2004-11-22  Werner Koch  <wk@g10code.com>
427         * logging.c (log_test_fd): Add test on LOGSTREAM.  Reported by
428         Barry Schwartz.
430 2004-11-18  Werner Koch  <wk@g10code.com>
432         * logging.c: Explicitly include sys/stat.h for the S_I* constants.
434 2004-10-21  Werner Koch  <wk@g10code.com>
436         * logging.c (do_logv): Use set_log_stream to setup a default.
437         (log_set_file): Factored code out to ..
438         (set_file_fd): .. New function to allow using a file descriptor.
439         (log_set_fd): Make use of new fucntion.
440         (fun_writer): Reworked.
442 2004-08-18  Werner Koch  <wk@g10code.de>
444         * stringhelp.c (print_sanitized_utf8_string): Actually implement
445         it.
447 2004-06-21  Werner Koch  <wk@g10code.com>
449         * logging.c (log_set_file): Do not close an old logstream if it
450         used to be stderr or stdout.
452 2004-05-05  Werner Koch  <wk@gnupg.org>
454         * logging.c (log_set_file): Oops, don't close if LOGSTREAM is NULL.
456 2004-04-30  Werner Koch  <wk@gnupg.org>
458         * logging.c (log_set_file): Make sure the log stream will be
459         closed even if the stderr fileno will be assigned to a new socket.
461 2004-04-16  Werner Koch  <wk@gnupg.org>
463         * logging.h (JNLIB_LOG_WITH_PREFIX): Add constants for the flag
464         values.
465         * logging.c (log_set_prefix): New flag DETACHED.
466         (fun_writer): Take care of this flag.
467         (log_test_fd): New.
469 2004-02-18  Werner Koch  <wk@gnupg.org>
471         * stringhelp.c (print_sanitized_buffer): Don't care about
472         non-ASCII characaters.
473         (sanitize_buffer): Ditto.
475 2004-02-12  Werner Koch  <wk@gnupg.org>
477         * Makefile.am: Replaced INCLUDES by AM_CPPFLAGS.
479 2004-01-05  Werner Koch  <wk@gnupg.org>
481         * argparse.c (strusage): Changed default copyright year to 2004.
483 2003-12-17  Werner Koch  <wk@gnupg.org>
485         * argparse.c (initialize): Replaced use of non-literal format
486         args.  Suggested by Florian Weimer.
488 2003-12-16  Werner Koch  <wk@gnupg.org>
490         * logging.c (writen, fun_writer, fun_closer): New.
491         (log_set_file): Add feature to log to a socket.
492         (log_set_file, do_logv): Force printing with prefix and pid.
494 2003-11-13  Werner Koch  <wk@gnupg.org>
496         * strlist.c (strlist_copy): New.
498         * dotlock.c: Define DIRSEP_C et al. if not defined.
500 2003-11-06  Werner Koch  <wk@gnupg.org>
502         * strlist.h (strlist_t): New. STRLIST is now deprecated.
504 2003-06-18  Werner Koch  <wk@gnupg.org>
506         * strlist.c (strlist_pop): New.
508         * dotlock.c (dotlock_remove_lockfiles): Prefixed with dotlock_ and
509         made global.
511 2003-06-17  Werner Koch  <wk@gnupg.org>
513         * stringhelp.c (length_sans_trailing_chars)
514         (length_sans_trailing_ws): New.
516         * logging.c (log_inc_errorcount): New.
518         * stringhelp.c (print_sanitized_utf8_buffer): Implement utf8
519         conversion.
520         (sanitize_buffer): New. Based on gnupg 1.3.2 make_printable_string.
522         * dotlock.c: Updated to match the version from 1.3.2
523         * utf8conv.c: New.  Code taken from strgutil.c of gnupg 1.3.2.
524         * utf8conv.h: New.
526 2003-06-16  Werner Koch  <wk@gnupg.org>
528         * logging.c (do_logv): Hack to optionally suppress a leading space.
530         * stringhelp.c (ascii_strncasecmp): New.  Taken from gnupg 1.3.
531         (ascii_memistr): New. Taken from gnupg 1.3
533 2003-06-13  Werner Koch  <wk@gnupg.org>
535         * mischelp.h (wipememory2,wipememory): New. Taken from GnuPG 1.3.2. 
537 2002-06-04  Werner Koch  <wk@gnupg.org>
539         * stringhelp.c (print_sanitized_utf8_string): New.  No real
540         implementation for now.
541         (print_sanitized_utf8_buffer): Ditto.
543 2002-04-04  Werner Koch  <wk@gnupg.org>
545         * logging.c (log_get_prefix): New.
547 2002-03-15  Werner Koch  <wk@gnupg.org>
549         * argparse.c (optfile_parse): Fixed missing argument handling.
551 2002-02-25  Werner Koch  <wk@gnupg.org>
553         * stringhelp.c (ascii_memcasemem): New.
555 2002-02-14  Werner Koch  <wk@gnupg.org>
557         * Makefile.am (INCLUDES): Add cflags for libgcrypt.
559 2002-02-07  Werner Koch  <wk@gnupg.org>
561         * logging.c (log_set_fd): New.
563         * stringhelp.c (print_sanitized_buffer): New.
564         (print_sanitized_string): New.
566 2002-01-24  Werner Koch  <wk@gnupg.org>
568         * argparse.c (strusage): Set default copyright notice year to 2002.
570         Fixed the copyright notice of this file, as it has always been
571         part of GnuPG and therefore belongs to the FSF.
573 2001-11-01  Marcus Brinkmann  <marcus@g10code.de>
575         * logging.c (log_printf): Do not initialize ARG_PTR with 0, we
576         don't know the correct type.  Instead, run va_start and va_end
577         unconditionally.
578         Reported by Jose Carlos Garcia Sogo <jsogo@debian.org>.
580 2002-01-19  Werner Koch  <wk@gnupg.org>
582         * logging.c (log_get_stream): New.
584 2001-12-05  Werner Koch  <wk@gnupg.org>
586         * logging.c (log_set_prefix): New.
587         (do_logv): Include prefix and pid only if enabled. Print time only
588         when explicitly enabled.
589         (log_logv): New.  
590         * logging.h: Include log_logv() only when requested.
592 2001-11-06  Werner Koch  <wk@gnupg.org>
594         * strlist.c, strlist.h: New. Taken from pgnupg/util/strgutil.c
596 2001-08-30  Werner Koch  <wk@gnupg.org>
598         * logging.c (log_printf): Don't pass NULL instead of arg_ptr.
600 2001-07-19  Werner Koch  <wk@gnupg.org>
602         * stringhelp.c (ascii_memistr,ascii_isupper,ascii_islower,
603         ascii_toupper,ascii_tolower, ascii_strcasecmp, ascii_memcasecmp): New.
605 2000-07-26 10:02:51  Werner Koch  (wk@habibti.openit.de)
607         * stringhelp.c.: Add stdarg.h
608         * argparse.h: s/ulong/unsigned long/ although this should be defined
609         by types.h.
611 2000-06-28 19:40:23  Werner Koch  (wk@habibti.openit.de)
613         * Makefile.am: Replaced second logging.c by .h
615 2000-05-24 08:58:15  Werner Koch  (wk@habibti.openit.de)
617         * logging.c (log_get_errorcount): New.
619 2000-05-24 08:44:47  Werner Koch  (wk@habibti.openit.de)
621         * stringhelp.c: Added a few filename related helper functions.
623 2000-05-11 18:04:43  Werner Koch  (wk@habibti.openit.de)
625         * xmalloc.c (xstrcat2): Replaced stpcpy to quickly address W32
626         problems.
628 2000-05-02 19:43:38  Werner Koch  (wk@habibti.openit.de)
630         * xmalloc.c (xstrcat2): New.
632 Mon Jan 24 13:04:28 CET 2000  Werner Koch  <wk@gnupg.de>
634         * README: New.
635         * Makefile.am: new.
636         * argparse.c, argparse.h, logging.c, logging.h:
637         * mischelp.h, stringhelp.c, stringhelp.h, xmalloc.c:
638         * xmalloc.h, dotlock.c: Moved from ../util to here.
639         * dotlock.h: New.
640         * libjnlib-config.h: New.
642         * logging.c (log_set_file): New.
643         (log_printf): New.
644         (do_logv): Add kludge to insert LFs.
647      ***********************************************************
648      * Please note that JNLIB is maintained as part of GnuPG.  *
649      * You may find it source-copied in other packages.        *
650      ***********************************************************        
651         
652  Copyright 2000, 2001, 2002, 2003, 2004,
653            2005, 2006, 2007, 2008 Free Software Foundation, Inc.
655  This file is free software; as a special exception the author gives
656  unlimited permission to copy and/or distribute it, with or without
657  modifications, as long as this notice is preserved.
659  This file is distributed in the hope that it will be useful, but
660  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
661  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.