22c5189b7ea3f2cf7a1cf876805cba6742eb88fa
[gpgme.git] / assuan / ChangeLog
1 2005-08-09  Werner Koch  <wk@g10code.com>
2
3         * README.1st: Adjusted to cope with changes done in upstream Assuan.
4
5         Merged changes for W32 support from libassuan.
6         
7         * assuan.h [_ASSUAN_EXT_SYM_PREFIX]: New.
8         * assuan-io.c [_ASSUAN_NO_PTH]: New.
9         * assuan-pipe-connect.c (fix_signals) [_ASSUAN_NO_FIXED_SIGNALS]: New.
10         (assuan_pipe_connect2) [_ASSUAN_USE_DOUBLE_FORK]: Use double fork.
11         (fix_signals) [_ASSUAN_USE_DOUBLE_FORK]: Do not wait..
12         * assuan-logging.c, assuan-io.c: Include config.h
13         Replaced all usages of _WIN32 by the new HAVE_W32_SYSTEM because
14         there is nothing winning in this API.
15         * assuan-pipe-connect.c (assuan_pipe_connect2) [_WIN32]: Return
16         error Not Imlemented.
17         * assuan-logging.c (_assuan_w32_strerror): New. 
18         * assuan-defs.h (w32_strerror): new.
19         * assuan-pipe-connect.c (assuan_pipe_connect2, fix_signals):
20         Factored signal code out to new function.
21         (build_w32_commandline, create_inheritable_pipe): New.  Taken
22         from gnupg 1.9.
23         (assuan_pipe_connect2) [W32]: Implemented for W32.
24         * assuan-pipe-server.c (assuan_init_pipe_server) [W32]: Map file
25         descriptors using _get_osfhandle.
26         * assuan-socket-connect.c (assuan_socket_connect) [W32]: Allow for
27         a drive letter in the path.
28         * assuan-client.c (assuan_transact): Handle empty and comment
29         commands correctly.
30         * assuan-util.c (_assuan_calloc): Avoid integer overflow.
31         * assuan-util.c (assuan_set_flag, assuan_get_flag): New.
32         * assuan-defs.h (struct assuan_context_s): New field flags.
33         * assuan.h (assuan_flag_t): New with one flag value
34         ASSUAN_NO_WAITPID for now.
35         * assuan-pipe-connect.c (do_finish): Take care of the no_waitpid
36         flag.
37         * mkerrors: Include config.h into assuan-errors.c.  This is
38         required so that assuan.h knows about the W32 macro.
39
40 2005-08-09 Timo Schulz  <twoaday@g10code.com> (ported from libassuan by wk)
41         
42         * assuan-io.c (_assuan_simple_read, _assuan_simple_write): W32
43         support.
44         * assuan-socket.c (_assuan_close): New.
45         (_assuan_sock_new): New.
46         (_assuan_sock_bind): New.
47
48 2005-03-22  Werner Koch  <wk@g10code.com>
49
50         * assuan-defs.h (struct assuan_io): Renamed elements READ and
51         WRITE to READFNC and WRITEFNC to avoid problems with read defined
52         as macro.  Changed callers.  Noted by Ville Skytt√§.
53
54 2004-12-16  Marcus Brinkmann  <marcus@g10code.de>
55
56         * assuan-pipe-connect.c (do_finish): Do not wait for child to finish.
57         (assuan_pipe_connect): Use double-fork approach.
58         * assuan-connect.c (assuan_disconnect): Do not write BYE to the
59         status line.
60
61 2004-12-07  Marcus Brinkmann  <marcus@g10code.de>
62
63         * README.1st: Add copyright notice.
64
65 2004-06-23  Marcus Brinkmann  <marcus@g10code.de>
66
67         * assuan-domain-connect.c [HAVE_SYS_UIO_H]: Include <sys/uio.h>.
68
69         * assuan-handler.c: Include <errno.h>.
70
71 2004-06-08  Marcus Brinkmann  <marcus@g10code.de>
72
73         * assuan-buffer.c (assuan_write_line): If the line is longer than
74         the maximum line length, bail out early.
75
76 2004-04-19  Werner Koch  <wk@gnupg.org>
77
78         * assuan-socket-connect.c: Include sys/types.h
79         * assuan-socket-server.c: Ditto
80         * assuan-domain-connect.c: Ditto.
81
82 2004-02-18  Werner Koch  <wk@gnupg.org>
83
84         * assuan-handler.c (assuan_get_data_fp): Fail with ENOSYS if we
85         can't implement this.
86
87 2004-02-13  Werner Koch  <wk@gnupg.org>
88
89         * assuan-domain-connect.c: Removed the unneeded alloca.h
90
91 2003-08-13  Werner Koch  <wk@gnupg.org>
92
93         * assuan-inquire.c (assuan_inquire): Increase length of cmdbuf to
94         the Assuan limit.
95
96 2003-06-24  Werner Koch  <wk@gnupg.org>
97
98         * mkerrors: Kludge to print libgpg-error values in an easier
99         readable way.
100
101 2003-04-29  Werner Koch  <wk@gnupg.org>
102
103         * libassuan.m4: New. Based on libgrypt.m4.
104         * Makefile.am (m4data_DATA): New.
105
106         * assuan.h (AssuanCommand): Removed.
107
108         * assuan-handler.c: Remove the cmd_id element,
109         (assuan_register_command): Likewise.  Note that semantics changed.
110         (_assuan_register_std_commands): Adjusted.
111
112 2003-02-22  Neal H. Walfield  <neal@g10code.de>
113
114         * Makefile.am (bin_SCRIPTS): Renamed from bin_PROGRAMS.
115
116 2003-02-18  Neal H. Walfield  <neal@g10code.de>
117
118         * Makefile.am (libassuan_a_LIBADD): New variable.
119         * funopen.c: Move from ../common.
120         * isascii.c: Likewise.
121         * memrchr.c: Likewise.
122         * putc_unlocked.c: Likewise.
123         
124 2003-02-18  Neal H. Walfield  <neal@g10code.de>
125
126         * assuan-handler.c (_IO_cookie_io_functions_t): Remove.
127         (cookie_io_functions_t): Remove.
128         (fopencookie): Remove prototype.
129         (assuan_get_data_fp): Use funopen, not fopencookie.
130
131 2003-02-18  Neal H. Walfield  <neal@g10code.de>
132
133         * libassuan-config.in: New file.
134         * Makefile.am (bin_PROGRAMS): New variable.
135
136 2003-02-17  Neal H. Walfield  <neal@g10code.de>
137
138         * .cvsignore: New file.
139
140 2003-02-17  Neal H. Walfield  <neal@g10code.de>
141
142         * Makefile.am (lib_LIBRARIES): Use this instead of . . .
143         (noinst_LIBRARIES): . . . this.
144         (include_HEADERS): New variable.
145         (libassuan_a_SOURCES): Remove assuan.h, add assuan-logging.c.
146
147         * assuan.h (assuan_set_assuan_log_stream): New prototype.
148         (assuan_get_assuan_log_stream): Likewise.
149         (assuan_get_assuan_log_prefix): Likewise.
150         * assuan-logging.c: New file.
151
152         * assuan-buffer.c [HAVE_JNLIB_LOGGIN]: Do not include
153         "../jnlib/logging.h".
154         (my_log_prefix): Remove function.
155         (_assuan_read_line): Use assuan_get_assuan_log_prefix in lieu of
156         my_log_prefix.
157         (assuan_write_line): Likewise.
158         (_assuan_cookie_write_data): Likewise.
159         (_assuan_cookie_write_flush): Likewise.
160         * assuan-domain-connect.c (LOGERROR, LOGERROR1, LOGERROR2,
161         LOGERRORX):  Remove.
162         (LOG): New macro.
163         (domain_reader): Use it.
164         (domain_writer): Likewise.
165         (domain_sendfd): Likewise.
166         (domain_receivefd): Likewise.
167         (_assuan_domain_init): Likewise.
168         (assuan_domain_connect): Likewise.
169         * assuan-pipe-connect.c [HAVE_JNLIB_LOGGIN]: Do not include
170         "../jnlib/logging.h".
171         (LOGERROR, LOGERROR1, LOGERROR2, LOGERRORX):  Remove.
172         (LOG): New macro.
173         (assuan_pipe_connect): Use it.
174         * assuan-socket-connect.c [HAVE_JNLIB_LOGGIN]: Do not include
175         "../jnlib/logging.h".
176         (LOGERROR, LOGERROR1, LOGERROR2, LOGERRORX):  Remove.
177         (LOG): New macro.
178         (assuan_socket_connect): Use it.
179         (socket_reader): Remove dead code.
180         (socket_writer): Likewise.
181         * assuan-util.c [HAVE_JNLIB_LOGGIN]: Do not include
182         "../jnlib/logging.h".
183         (_assuan_log_sanitized_string): Use assuan_get_assuan_log_stream,
184         not jnlib.
185
186 2002-11-24  Neal H. Walfield  <neal@g10code.de>
187
188         * assuan.h (assuan_command_parse_fd): New prototype.
189         * assuan-handler.c (assuan_command_parse_fd): Rename from
190         parse_cmd_input_output.  Export.
191         (std_handler_input): Update to use assuan_command_parse_fd.
192         (std_handler_output): Likewise.
193
194 2002-11-24  Neal H. Walfield  <neal@g10code.de>
195
196         * assuan.h (assuan_sendfd): New prototype.
197         (assuan_receivefd): New prototype.
198         * assuan-buffer.c (assuan_sendfd): New function.
199         (assuan_receivefd): New function.
200         * assuan-handler.c (parse_cmd_input_output): Recognize incoming
201         file descriptors and act appropriately.
202         * assuan-defs.h (struct assuan_io): Add fields sendfd and
203         receivefd.
204         (struct assuan_context_s): Add fields pendingfds and
205         pendingfdscount.
206         * assuan-pipe-server.c (_assuan_new_context): Update IO to reflect
207         new features.
208         * assuan-domain-connect.c (do_deinit): Cleanup any unreceived file
209         descriptors.
210         (domain_reader): Receive file descriptors.
211         (domain_sendfd): New function.
212         (domain_receivefd): New function.
213         (_assuan_domain_init): Update initialization code to reflect new
214         features.
215
216 2002-11-24  Neal H. Walfield  <neal@g10code.de>
217
218         * assuan-domain-connect.c (do_finish): Remove.
219         (_assuan_domain_init): Use default handlers where possible.
220         Add an assert and update comments.
221         * assuan-domain-server.c (accept_connection): Remove.
222         (assuan_init_domain_server): Use default handlers where possible.
223         Put the server in pipe mode: it can only be used by a single
224         client.
225
226 2002-11-24  Neal H. Walfield  <neal@g10code.de>
227
228         * assuan.h: Add prototype for assuan_domain_connect and
229         assuan_init_domain_server.
230         * assuan-defs.h: Include <unistd.h>.
231         Add prototype for _assuan_domain_init.
232         * assuan-domain-connect.c: New file.
233         * assuan-domain-server.c: New file.
234         * Makefile.am (libassuan_a_SOURCES): Add assuan-domain-connect.c
235         and assuan-domain-server.c
236
237 2002-11-23  Neal H. Walfield  <neal@g10code.de>
238
239         * Makefile.am (libassuan_a_SOURCES): Add assuan-io.c.
240         * assuan-io.c: Restore.
241         (_assuan_simple_read): Rename from _assuan_read.
242         (_assuan_simple_write): Rename from _assuan_write.
243         * assuan-defs.h (_assuan_simple_read): New prototype.
244         (_assuan_simple_write): Likewise.
245         * assuan-pipe-server.c (pipe_reader): Remove.
246         (pipe_writer): Remove.
247         (_assuan_new_context): Initialize IO is with _assuan_simple_read
248         and _assuan_simple_write.
249         * assuan-socket-connect.c (socket_reader): Remove.
250         (socket_writer): Remove.
251         (assuan_socket_connect): Initialize IO is with _assuan_simple_read
252         and _assuan_simple_write.
253         * assuan-socket-server.c (io): New local variable.
254         (assuan_init_socket_server): Initialize CTX->io.
255         (assuan_init_connected_socket_server): Likewise.
256
257 2002-11-23  Neal H. Walfield  <neal@g10code.de>
258
259         * assuan-buffer.c (readline): Use memrchr.
260         (_assuan_read_line): Rewritten to use the string functions.
261
262 2002-11-20  Neal H. Walfield  <neal@g10code.de>
263
264         * assuan-socket-connect.c (assuan_socket_connect): Pass PF_LOCAL
265         to socket(), not AF_UNIX: it expects a PF_* macro and the former
266         is more portable.
267         (assuan_socket_connect): Use AF_LOCAL, not AF_UNIX which is more
268         POSIXy.
269
270 2002-11-20  Neal H. Walfield  <neal@g10code.de>
271
272         * assuan-defs.h (struct assuan_io): New structure.
273         (struct assuan_context_s): New field, io.
274         (_assuan_read): Depreciated.
275         (_assuan_write): Likewise.
276         * assuan-pipe-server.c: Include <unistd.h>.
277         (pipe_reader): New function.
278         (pipe_writer): Likewise.
279         (_assuan_new_context.IO): New local static.  Set to pipe_reader
280         and pipe_writer.  Use it to initialize new context.
281         * assuan-socket-connect.c (socket_reader): New function.
282         (socket_writer): New function.
283         (assuan_socket_connect.IO): New local static.  Set to socket_reader
284         and socket_writer.  Use it to initialize new context.
285         * assuan-buffer.c (writen): Take an ASSUAN_CONTEXT rather than a
286         file descriptor.  Do not use _assuan_write but the write method
287         in the supplied context.
288         (readline): Likewise for _assuan_read.
289         (assuan_write_line): When calling writen, pass CTX; not the file
290         descriptor directly.
291         (_assuan_cookie_write_data): Likewise.
292         (_assuan_cookie_write_flush): Likewise.
293         (_assuan_read_line): Likewise for readline.
294         * Makefile.am (libassuan_a_SOURCES): Remove assuan-io.c.
295         * assuan-io.c: Removed.
296
297 2002-11-10  Werner Koch  <wk@gnupg.org>
298
299         * assuan-pipe-connect.c (assuan_pipe_connect): Changed the order
300         of the dups to handle cases where we have already used fd 2 for
301         other things.
302
303 2002-10-31  Neal H. Walfield  <neal@g10code.de>
304
305         * assuan-util.c: Include <ctype.h>.
306         (_assuan_log_print_buffer): Elide the magic numbers preferring the
307         standard isfoo functions.  Use putc_unlocked where possible.
308         (_assuan_log_sanitized_string): Rewrite to use putc_unlocked and
309         the isfoo functions.
310
311 2002-09-05  Neal H. Walfield  <neal@g10code.de>
312
313         * assuan-defs.h (_assuan_read_wrapper): Depreciated.
314         * assuan-util.c (_assuan_read_wrapper): Removed.
315         * assuan-defs.h (_assuan_write_wrapper): Depreciated.
316         * assuan-util.c (_assuan_write_wrapper): Removed.
317         * assuan.h (assuan_set_io_fun): Depreciated.
318         * assuan-util.c (assuan_set_io_fun): Removed.
319
320         * assuan-defs.h (_assuan_read): New function.
321         (_assuan_write): Likewise.
322         * assuan-io.c: New file.
323
324         * assuan-buffer.c (writen): Use _assuan_write rather than doing
325         the work here.
326         (readline): Likewise for _assuan_read.
327
328         * Makefile.am (libassuan_a_SOURCES): Add assuan-io.c.
329
330 2002-08-16  Werner Koch  <wk@gnupg.org>
331
332         * assuan.h: Renamed Bad_Certificate_Path to Bad_Certificate_Chain.
333
334 2002-07-30  Werner Koch  <wk@gnupg.org>
335
336         Changed the license from GPL to LGPL.
337
338 2002-07-23  Werner Koch  <wk@gnupg.org>
339
340         * assuan-handler.c (_IO_cookie_io_functions_t): Define it here if
341         it does not exists.
342
343 2002-06-27  Werner Koch  <wk@gnupg.org>
344
345         * assuan-pipe-connect.c (assuan_pipe_connect): No special handling
346         for the log_fd and stderr.  Connect stderr to /dev/null if it
347         should not be retained.
348
349 2002-06-26  Werner Koch  <wk@gnupg.org>
350
351         * assuan-buffer.c (assuan_write_line): Make sure we never
352         accidently print an extra LF.
353
354 2002-05-23  Werner Koch  <wk@gnupg.org>
355
356         * assuan-util.c (assuan_set_io_func): New.
357         * assuan-buffer.c (writen, readline): Use the new functions
358         instead of pth.
359         * assuan-socket-server.c (accept_connection): Don't use the
360         pth_accept - using the assuan included accept code would be a bad
361         idea within Pth so we don't need a replacement function.
362
363 2002-05-22  Werner Koch  <wk@gnupg.org>
364
365         * assuan-socket-server.c (assuan_init_connected_socket_server): New.
366         (accept_connection): Factored most code out to..
367         (accept_connection_bottom): .. new function.
368
369 2002-04-04  Werner Koch  <wk@gnupg.org>
370
371         * assuan-buffer.c (my_log_prefix): New.  Use it for all i/o debug
372         output.
373
374 2002-03-06  Werner Koch  <wk@gnupg.org>
375
376         * assuan-client.c (_assuan_read_from_server): Detect END.
377         (assuan_transact): Pass it to the data callback.
378
379 2002-02-27  Werner Koch  <wk@gnupg.org>
380
381         * assuan-client.c (assuan_transact): Add 2 more arguments to
382         support status lines. Passing NULL yields the old behaviour.
383
384         * assuan-handler.c (process_request): Flush data lines send
385         without using the data fp.
386
387 2002-02-14  Werner Koch  <wk@gnupg.org>
388
389         * assuan-inquire.c (assuan_inquire): Check for a cancel command
390         and return ASSUAN_Canceled.  Allow for non-data inquiry.
391
392         * assuan.h: Add a few token specific error codes.
393
394 2002-02-13  Werner Koch  <wk@gnupg.org>
395
396         * assuan-defs.h (assuan_context_s): New var CLIENT_PID.
397         * assuan-pipe-server.c (_assuan_new_context): set default value.
398         * assuan-socket-server.c (accept_connection): get the actual pid.
399
400 2002-02-12  Werner Koch  <wk@gnupg.org>
401
402         * assuan-buffer.c (writen,readline) [USE_GNU_PT]: Use pth_read/write.
403         * assuan-socket-server.c (accept_connection) [USE_GNU_PTH]: Ditto.
404
405 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
406
407         * Makefile.am (MOSTLYCLEANFILES): New variable.
408
409 2002-01-23  Werner Koch  <wk@gnupg.org>
410
411         * assuan-socket-connect.c (LOGERRORX): and removed typo.
412
413 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
414
415         * assuan-socket-connect.c (LOGERRORX): Reverse arguments to fputs.
416
417 2002-01-21  Werner Koch  <wk@gnupg.org>
418
419         * assuan-connect.c: Move all except assuan_get_pid to...
420         * assuan-pipe-connect.c: this.
421         (assuan_pipe_disconnect): Removed.
422         (do_finish, do_deinit): New 
423         (assuan_pipe_connect): and set them into the context.
424         * assuan-socket-connect.c: New.
425         
426         * assuan-util.c (_assuan_log_sanitized_string): New.
427
428         * assuan-pipe-server.c (assuan_init_pipe_server): Factored most
429         code out to ...
430         (_assuan_new_context): new func.
431         (_assuan_release_context): New
432         * assuan-connect.c (assuan_pipe_connect): Use the new functions.
433
434 2002-01-20  Werner Koch  <wk@gnupg.org>
435
436         * assuan.h: Added Invalid Option error code.
437
438         * assuan-handler.c (std_handler_option): New.
439         (std_cmd_tbl): Add OPTION as standard command.
440         (assuan_register_option_handler): New.
441         (dispatch_command): Use case insensitive matching as a fallback.
442         (my_strcasecmp): New.
443
444 2002-01-19  Werner Koch  <wk@gnupg.org>
445
446         * assuan-buffer.c (_assuan_read_line): Add output logging.
447         (assuan_write_line): Ditto.
448         (_assuan_cookie_write_data): Ditto.
449         (_assuan_cookie_write_flush): Ditto.
450         * assuan-util.c (_assuan_log_print_buffer): New.
451         (assuan_set_log_stream): New.
452         (assuan_begin_confidential): New.
453         (assuan_end_confidential): New.
454
455         * assuan-defs.h: Add a few handler variables.
456         * assuan-pipe-server.c (assuan_deinit_pipe_server): Removed.
457         (deinit_pipe_server): New.
458         (assuan_deinit_server): New.  Changed all callers to use this.
459         * assuan-listen.c (assuan_accept): Use the accept handler.
460         * assuan-handler.c (process_request): Use the close Handler.
461         * assuan-socket-server.c: New.
462
463 2002-01-14  Werner Koch  <wk@gnupg.org>
464
465         * assuan-client.c (_assuan_read_from_server): Skip spaces after
466         the keyword.
467
468 2002-01-03  Werner Koch  <wk@gnupg.org>
469
470         * assuan-handler.c (assuan_set_okay_line): New.
471         (process_request): And use it here.
472
473 2002-01-02  Werner Koch  <wk@gnupg.org>
474
475         * assuan-inquire.c (init_membuf,put_membuf,get_membuf): Apply a
476         hidden 0 behind the buffer so that the buffer can be used as a
477         string in certain contexts.
478
479 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
480
481         * assuan-connect.c (assuan_pipe_connect): New argument
482         FD_CHILD_LIST.  Don't close those fds.
483         * assuan.h: Likewise for prototype.
484
485 2001-12-14  Werner Koch  <wk@gnupg.org>
486
487         * assuan-listen.c (assuan_close_input_fd): New.
488         (assuan_close_output_fd): New.
489         * assuan-handler.c (std_handler_reset): Always close them after a
490         reset command.
491         (std_handler_bye): Likewise.
492
493 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
494
495         * assuan-buffer.c (_assuan_read_line): New variable ATTICLEN, use
496         it to save the length of the attic line.
497         Rediddle the code a bit to make it more clear what happens.
498
499 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
500
501         * assuan-defs.h (LINELENGTH): Define as ASSUAN_LINELENGTH.
502         assuan.h: Define ASSUAN_LINELENGTH.
503
504 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
505
506         * assuan-buffer.c (assuan_read_line): Fix order of execution to
507         get correct return values.
508
509 2001-12-13  Werner Koch  <wk@gnupg.org>
510
511         * assuan-handler.c (assuan_get_active_fds): Fixed silly bug,
512         pretty obvious that nobody ever tested this function.
513
514 2001-12-12  Werner Koch  <wk@gnupg.org>
515
516         * assuan-connect.c (assuan_pipe_connect): Implemented the inital
517         handshake.
518         * assuan-client.c (read_from_server): Renamed to  
519         (_assuan_read_from_server): this and made external.
520
521         * assuan-listen.c (assuan_set_hello_line): New.
522         (assuan_accept): Use a custom hello line is available.
523
524         * assuan-buffer.c (assuan_read_line): New.
525         (assuan_pending_line): New.
526         (_assuan_write_line): Renamed to ..
527         (assuan_write_line): this, made public and changed all callers.
528
529 2001-12-04  Werner Koch  <wk@gnupg.org>
530
531         * assuan-connect.c (assuan_pipe_connect): Add more error reporting.
532         * assuan-client.c: New.
533
534         * assuan-inquire.c: New.
535         * assuan-handler.c (process_request): Check for nested invocations.
536
537 2001-11-27  Werner Koch  <wk@gnupg.org>
538
539         * assuan-handler.c (assuan_register_input_notify): New.
540         (assuan_register_output_notify): New.
541
542 2001-11-26  Werner Koch  <wk@gnupg.org>
543
544         * assuan.h: Added more status codes.
545
546 2001-11-25  Werner Koch  <wk@gnupg.org>
547
548         * assuan-handler.c (assuan_register_bye_notify)
549         (assuan_register_reset_notify)
550         (assuan_register_cancel_notify): New and call them from the
551         standard handlers.
552         (assuan_process): Moved bulk of function to ..
553         (process_request): .. new.
554         (assuan_process_next): One shot version of above.
555         (assuan_get_active_fds): New.
556
557 2001-11-24  Werner Koch  <wk@gnupg.org>
558
559         * assuan-connect.c (assuan_get_pid): New.
560
561         * assuan-buffer.c (_assuan_read_line): Deal with reads of more
562         than a line.
563         * assuan-defs.h: Add space in the context for this.
564
565         
566  Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
567
568  This file is free software; as a special exception the author gives
569  unlimited permission to copy and/or distribute it, with or without
570  modifications, as long as this notice is preserved.
571
572  This file is distributed in the hope that it will be useful, but
573  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
574  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.