* srv.c: OSX 10.2.8/Darwin 6.8 seems to have some #include ordering
[gnupg.git] / util / ChangeLog
1 2003-10-12  David Shaw  <dshaw@jabberwocky.com>
2
3         * srv.c: OSX 10.2.8/Darwin 6.8 seems to have some #include
4         ordering issues?  Move sys/types.h up higher to work around.
5
6 2003-10-08  Werner Koch  <wk@gnupg.org>
7
8         * ttyio.c (tty_print_string, tty_print_utf8_string2)
9         (tty_print_utf8_string): Made string arg const.
10
11 2003-09-28  Timo Schulz  <twoaday@freakmail.de>
12
13         * strgutil.c [WIN32] (asprintf): New.
14         
15 2003-09-28  Werner Koch  <wk@gnupg.org>
16
17         * ttyio.c (tty_fprintf): New.
18
19 2003-09-21  Timo Schulz  <twoaday@freakmail.de>
20
21         * http.c [WIN32]: Define MB_CUR_MAX.
22         (connect_server): use unsigned long since W32 does not have in_addr_t.
23         
24 2003-08-28  David Shaw  <dshaw@jabberwocky.com>
25
26         * dotlock.c, http.c, iobuf.c, simple-gettext.c, srv.c, srv.h,
27         strgutil.c, ttyio.c, w32reg.c: s/__MINGW32__/_WIN32/ to help
28         building on native Windows compilers.  Requested by Brian Gladman.
29         From Werner on stable branch.
30         
31         * http.c (connect_server): Oops - forgot to freeaddrinfo().
32
33 2003-08-24  David Shaw  <dshaw@jabberwocky.com>
34
35         * http.c (connect_server): Try and use getaddrinfo if it is
36         available.  Try for IPv6 via getaddrinfo() or a IPv6-ized
37         gethostbyname().  Suggested by Jun-ichiro itojun Hagino.
38
39 2003-07-10  David Shaw  <dshaw@jabberwocky.com> (from Werner on stable branch)
40
41         * iobuf.c (check_special_filename): Replaced is isdigit by digitp
42         to avoid passing negative values and potential locale problems.
43         Problem noted by Christian Biere.
44         * strgutil.c (strlwr,strcasecmp,strncasecmp): Make sure we don't
45         pass a negative value.
46         * miscutil.c (scan_isodatestr): Ditto.
47
48 2003-05-30  David Shaw  <dshaw@jabberwocky.com>
49
50         * srv.h, srv.c: Include windows.h with MINGW32.
51
52 2003-05-24  David Shaw  <dshaw@jabberwocky.com>
53
54         * argparse.c, dotlock.c, fileutil.c, iobuf.c, miscutil.c,
55         simple-gettext.c, errors.c, http.c, memory.c, secmem.c, ttyio.c:
56         Edit all preprocessor instructions to remove whitespace before the
57         '#'.  This is not required by C89, but there are some compilers
58         out there that don't like it.
59
60 2003-05-21  Werner Koch  <wk@gnupg.org>
61
62         * fileutil.c (is_file_compressed): Fixed checking for "-" filename.
63
64 2003-04-13  David Shaw  <dshaw@jabberwocky.com>
65
66         * srv.c (main): Test against wwwkeys.pgp.net.
67
68         * srv.h: Grr. The RH7.3 Linux man page defines the fourth arg of
69         dn_expand as unsigned char*, but it is really char* according to
70         resolv.h.
71
72 2003-03-23  David Shaw  <dshaw@jabberwocky.com>
73
74         * argparse.c (default_strusage): Change copyright date.
75
76 2003-03-14  David Shaw  <dshaw@jabberwocky.com>
77
78         * srv.h, srv.c (getsrv): Use unsigned char rather than char.
79         Noted by Stefan Bellon.
80
81 2003-03-11  David Shaw  <dshaw@jabberwocky.com>
82
83         * http.c (connect_server): Use DNS SRV to get a server list.  Fail
84         over to A records if necessary.
85
86         * Makefile.am, srv.h, srv.c: New DNS SRV handling code.
87
88 2003-02-22  David Shaw  <dshaw@jabberwocky.com>
89
90         * ttyio.c (tty_print_utf8_string, tty_print_utf8_string2): Use 0
91         to indicate a string with no maximum size.  This prevents early
92         truncation of strings that contain control chars which are
93         expanded into \xXX form.
94
95 2002-12-26  David Shaw  <dshaw@jabberwocky.com>
96
97         * iobuf.c (iobuf_flush): Only print debug info if debugging is on.
98
99 2002-11-13  David Shaw  <dshaw@jabberwocky.com>
100
101         * secmem.c (lock_pool) [__CYGWIN__]: Don't print secmem warning.
102         From Werner on stable branch.
103
104 2002-11-09  Werner Koch  <wk@gnupg.org>
105
106         * ttyio.c (TERMDEVICE): Removed.
107         (tty_get_ttyname): New.
108         (init_ttyfp): Use it here instead of the TERMDEVICE macro.
109
110 2002-11-06  David Shaw  <dshaw@jabberwocky.com>
111
112         * w32reg.c (read_w32_registry_string): Fixed expanding of the
113         environment buffer; didn't worked at all.  Reported by Thijmen
114         Klok.  From Werner on stable branch.
115
116         * secmem.c (secmem_free, secmem_term): Use wipememory2() instead
117         of memset() to overwrite secure memory
118
119         * iobuf.c (direct_open): Handle mode 'b' if O_BINARY is available.
120         From Werner on stable branch.
121
122         * fileutil.c: Comment from stable branch.
123
124 2002-10-31  Stefan Bellon  <sbellon@sbellon.de>
125
126         * riscos.c (riscos_load_module, riscos_check_regexp): New.
127         (riscos_set_filetype_by_mimetype, riscos_dump_fdlist)
128         (riscos_fdopenfile, riscos_close_fds, riscos_renamefile)
129         (riscos_gstrans, riscos_list_openfiles, riscos_not_implemented):
130         Renamed functions to contain riscos prefix.
131         * dotlock.c [__riscos__]: Renames due to changes in riscos.c.
132         * fileutil.c [__riscos__]: Likewise.
133
134 2002-10-29  Stefan Bellon  <sbellon@sbellon.de>
135
136         * fileutil.c: Removed unnecessary left-over includes for RISC OS.
137         (make_filename): Tidied up RISC OS stuff.
138         (compare_filenames) [__riscos__]: Compare with ascii_strcasecmp().
139         (make_basename) [__riscos__]: Branch to own RISC OS routine from
140         here.
141
142         * riscos.c (riscos_make_basename): New.
143
144 2002-10-28  Stefan Bellon  <sbellon@sbellon.de>
145
146         * fileutil.c (make_basename) [__riscos__]: Cut off RISC OS' filing
147         systems from filepath.
148
149         * riscos.c (riscos_get_filetype_from_string, riscos_get_filetype):
150         Added.
151         (riscos_set_filetype_by_number): Made public.
152
153 2002-10-19  David Shaw  <dshaw@jabberwocky.com>
154
155         * Makefile.am, regcomp.c, regex.c, regex_internal.c,
156         regex_internal.h, regexec.c: Add new regex files from glibc 2.3.1.
157
158 2002-10-17  David Shaw  <dshaw@jabberwocky.com>
159
160         * http.c (connect_server): Try all A records for names with
161         multiple addresses until one answers for both MINGW32 and not
162         MINGW32.
163
164 2002-10-10  David Shaw  <dshaw@jabberwocky.com>
165
166         * http.c (connect_server): Properly handle a single A record that
167         fails connect().
168
169 2002-10-03  David Shaw  <dshaw@jabberwocky.com>
170
171         * logger.c (g10_log_warning, log_set_strict): Add new log_warning
172         logger command which can be switched between log_info and
173         log_error via log_set_strict.
174
175 2002-09-24  David Shaw  <dshaw@jabberwocky.com>
176
177         * http.c (connect_server): Try all A records for names with
178         multiple addresses until one answers (not MINGW32).
179
180 2002-09-16  Werner Koch  <wk@gnupg.org>
181
182         * w32reg.c (read_w32_registry_string): Fallback to HLM.
183
184 2002-09-12  Stefan Bellon  <sbellon@sbellon.de>
185
186         * fileutil.c (make_filename): Removed variable for RISC OS to
187         avoid compiler warning.
188
189         * secmem.c: Removed static variable for RISC OS to avoid
190         compiler warning.
191
192 2002-09-11  Werner Koch  <wk@gnupg.org>
193
194         * simple-gettext.c: Disable charset mappings.  We do it now when
195         installing the files.
196
197 2002-09-09  Werner Koch  <wk@gnupg.org>
198
199         * w32reg.c (read_w32_registry_string): Handle REG_EXPAND_SZ.
200         Suggested by Ryan Malayter.
201
202         * strgutil.c (ascii_strcasecmp): Replaced by code from gnulib.
203         (ascii_strncasecmp): New.
204
205 2002-09-02  Werner Koch  <wk@gnupg.org>
206
207         * simple-gettext.c (set_gettext_file): Make sure that we only use
208         backslashes.
209
210         * strgutil.c (set_native_charset): Allow NULL as argument to use
211         nl_langinfo for selection.  Mapped latin-15 to latin-1.
212
213 2002-08-30  Werner Koch  <wk@gnupg.org>
214
215         * iobuf.c (block_filter): Removed the assert, so that one can pass
216         the first character of a message and use the block filter for
217         non partial length encoded packets.
218
219 2002-08-06  Stefan Bellon  <sbellon@sbellon.de>
220
221         * ttyio.c [__riscos__]: Moved low-level RISC OS stuff to riscos.c.
222         * riscos.c: Use new SWI calling mechanism of UnixLib.
223
224 2002-08-03  Stefan Bellon  <sbellon@sbellon.de>
225
226         * secmem.c (init_pool, secmem_term): Changed #if to #ifdef in
227         order to avoid warning with RISC OS' Norcroft C.
228
229 2002-07-25  David Shaw  <dshaw@jabberwocky.com>
230
231         * secmem.c: "Warning" -> "WARNING"
232
233 2002-07-05  Werner Koch  <wk@gnupg.org>
234
235         * argparse.c (initialize): We better exit after a read error so
236         that we don't run into an endless loop when reading a directory.
237         Noted by Andrew Suffield.
238
239 2002-07-01  David Shaw  <dshaw@jabberwocky.com>
240
241         * argparse.c (optfile_parse): Fix variable typo - 'p2' should be
242         'p' :)
243
244 2002-06-29  Werner Koch  <wk@gnupg.org>
245
246         * argparse.c (optfile_parse): Renamed an auto I to P2 to avoid
247         shadowing warning.
248
249 2002-06-21  Stefan Bellon  <sbellon@sbellon.de>
250
251         * riscos.c (riscos_global_defaults): New.
252
253 2002-06-20  Stefan Bellon  <sbellon@sbellon.de>
254
255         * riscos.c (riscos_set_filetype_by_number, riscos_set_filetype):
256         New. Set RISC OS filetype according to MIME type.
257
258 2002-06-14  David Shaw  <dshaw@jabberwocky.com>
259
260         * strgutil.c (pop_strlist): New function to pop the head off of a
261         strlist.
262
263 2002-06-05  Timo Schulz  <ts@winpt.org>
264
265         * fileutil.c (is_file_compressed): Corrected the magic values
266         for bzip2 and gzip. Noted by David.
267         
268 2002-05-22  Werner Koch  <wk@gnupg.org>
269
270         * fileutil.c (compare_filenames): Replaced stricmp by strcasecmp.
271         * miscutil.c (answer_is_yes_no_quit,answer_is_yes_no_default): Ditto.
272
273         * strgutil.c (strncasecmp): New.
274         (memicmp): Removed.
275
276 2002-05-10  Stefan Bellon  <sbellon@sbellon.de>
277
278         * memory.c (add_entry) [M_DEBUG]: Added some missing EXTRA_ALIGN.
279         (free_entry) [M_DEBUG]: Free secure memory via secmem_free.
280         (alloc_secure): Malloc at least 1 byte.
281         (realloc) [M_GUARD]: Added missing FNAMEARG to function call.
282
283         * logger.c (g10_log_bug0) [__riscos__]: Make use of first
284         g10_log_bug0 function for later Norcroft compiler.
285
286         * riscos.c: Added stdlib.h include.
287
288 2002-05-04  Werner Koch  <wk@gnupg.org>
289
290         * http.c (write_server) [__MINGW32__]: Replaced WriteFile by send
291         because sockets don't work with WriteFile under NT anymore.
292
293 2002-05-03  David Shaw  <dshaw@jabberwocky.com>
294
295         * argparse.c (optfile_parse): Remove quotes only if they totally
296         enclose the string, and do not occur within the string.  This
297         makes specifying a program under Win32 easier when you need quotes
298         around part of a string, but not around the whole string.
299         
300 2002-05-02  Werner Koch  <wk@gnupg.org>
301
302         * memory.c (alloc): Malloc at least 1 byte.  Noted by Winona Brown. 
303
304 2002-04-23  David Shaw  <dshaw@jabberwocky.com>
305
306         * miscutil.c: New function answer_is_yes_no_default() to give a
307         default answer.
308
309 2002-04-22  Stefan Bellon  <sbellon@sbellon.de>
310
311         * riscos.c (riscos_open, riscos_fopen, riscos_fstat, set_filetype):
312         Removed as they're not needed anymore.
313
314         * iobuf.c (direct_open) [__riscos__]: Don't allow opening of
315         directories.
316
317 2002-04-08  Werner Koch  <wk@gnupg.org>
318
319         Fixed filename of last entry.
320
321 2002-03-29  David Shaw  <dshaw@jabberwocky.com>
322
323         * miscutil.c (print_string, utf8_to_native): If a delimiter is
324         used, then quote the backslash character as well.  Problem noted
325         by Rainer Perske.
326
327 2002-03-15  Werner Koch  <wk@gnupg.org>
328
329         * argparse.c (optfile_parse): Fixed missing argument handling.
330
331 2002-02-28  Timo Schulz  <ts@winpt.org>
332
333         * http.c (write_server): Convert integer to a HANDLE for W32.
334         
335 2002-01-27  David Shaw  <dshaw@jabberwocky.com>
336
337         * iobuf.c (iobuf_fdopen, iobuf_sockopen): Do not cache fdopened
338         fds on close.
339
340 2002-01-08  Werner Koch  <wk@gnupg.org>
341
342         * secmem.c (print_warn): Print a pointer to the FAQ.
343
344 2002-01-05  Werner Koch  <wk@gnupg.org>
345
346         * argparse.c (default_strusage): Set default copyright date to 2002.
347
348 2002-01-02  Stefan Bellon  <sbellon@sbellon.de>
349
350         * iobuf.c [__riscos__]: Updated include file name.
351
352         * fileutil.c [__riscos__]: Ditto.
353
354         * ttyio.d [__riscos__]: Ditto.
355
356         * riscos.c [__riscos__]: Ditto. Added debugging code and
357         unified error messages.
358
359 2001-12-27  David Shaw  <dshaw@jabberwocky.com>
360
361         * errors.c (g10_errstr): Added G10ERR_KEYSERVER
362
363 2001-12-27  Werner Koch  <wk@gnupg.org>
364
365         * simple-gettext.c [MINGW32]: Fixed last changed.
366
367 2001-12-22  Stefan Bellon  <sbellon@sbellon.de>
368
369         * memory.c (realloc): Fixed realloc not working when M_GUARD is
370         defined and first parameter is NULL.
371
372 2001-12-22  Timo Schulz <ts@winpt.org>
373
374         * fileutil.c (is_file_compressed): New.
375
376 2001-12-19  Werner Koch  <wk@gnupg.org>
377
378         * simple-gettext.c, w32reg.c [CYGWIN32]: Allow to use this file
379
380 2001-10-11  Werner Koch  <wk@gnupg.org>
381
382         * http.c (do_parse_uri): Changed initialization of the port number
383         so that it does also work with x-hkp.  By David Shaw.
384
385 2001-09-19  Werner Koch  <wk@gnupg.org>
386
387         * w32reg.c (get_root_key): New.
388         (read_w32_registry_string): Use it here.
389         (write_w32_registry_string): New.  Contributed by Timo.
390
391         * iobuf.c (iobuf_ioctl): New command to disable fd
392         caching. Implemented no_cache flag where needed.
393         (iobuf_sockopen): Always set no_cache flag.
394
395         * strgutil.c (utf8_to_native): Add a delim arg and changed all
396         callers. Make sure that quoting is done when translation is
397         disabled.
398         * miscutil.c (print_utf8_string2): New.
399
400 2001-09-17  Werner Koch  <wk@gnupg.org>
401
402         * miscutil.c (print_string): Use explicit ranges and not iscntrl().  
403         (make_printable_string): Ditto.
404
405 2001-09-07  Werner Koch  <wk@gnupg.org>
406
407         * strgutil.c (strsep): New, taken from glibc 2.2.1.
408
409 2001-09-03  Werner Koch  <wk@gnupg.org>
410
411         * miscutil.c (strtimestamp,asctimestamp): Avoid trigraphs.
412
413 2001-08-21  Stefan Bellon  <sbellon@sbellon.de>
414
415         * riscos.c [__riscos__] (close_fds): Fixed possible endless loop.
416
417 2001-08-20  Werner Koch  <wk@gnupg.org>
418
419         Applied patches from Stefan Bellon <sbellon@sbellon.de> to support
420         RISC OS.  Nearly all of these patches are identified by the
421         __riscos__ macro.
422         * secmem.c [__riscos__]: Disabled secure memory stuff.
423         * dotlock.c, ttyio.c [__riscos__]: Adapted for RISC OS
424         * fileutil.c, iobuf.c: Adapted for RISC OS;  mainly replaced
425         hardcoded path separators with EXTSEP_S like macros. 
426         * http.c (send_request): Use macros for the env-var name.
427         * logger.c [__riscos__]: Do an fflush at the end of each log
428         function. 
429         * memory.c [__riscos__]: Minor patches
430         * riscos.c (set_filetype): New.
431
432         * secmem.c (lock_pool): Under HPUX mlock is broken but we might
433         have plock, so we use this to lock the entire process.  By Albert
434         Chin.
435         
436 2001-07-03  Werner Koch  <wk@gnupg.org>
437
438         * strgutil.c (utf8_to_native): Fixed printing of invalid utf-8
439         characters.  Thomas Roessler reported that the escaping didn't work
440         correct.
441
442 2001-06-12  Werner Koch  <wk@gnupg.org>
443
444         * strgutil.c (ascii_memistr,ascii_isupper,ascii_islower,
445         ascii_toupper,ascii_tolower, ascii_strcasecmp, ascii_memcasecmp): New.
446         (set_native_charset): Use ascii_strcasecmp()
447         * fileutil.c (compare_filenames): Ditto
448         * miscutil.c (answer_is_yes): Ditto.
449         (answer_is_yes_no_quit): Ditto.
450
451 2001-06-06  Werner Koch  <wk@gnupg.org>
452
453         * strgutil.c (vasprintf) [__MINGW32__]: New. Taken from libiberty.
454         * ttyio.c (tty_printf) [__MINGW32__]:  Replaced the sprintf with
455         the new vasprintf. 
456
457 2001-06-05  Werner Koch  <wk@gnupg.org>
458
459         * dotlock.c (make_dotlock): Typo fixes. 
460
461 2001-05-25  Werner Koch  <wk@gnupg.org>
462
463         * ttyio.c (do_get): Fixed a serious format string bug.  Thanks to
464         fish stiqz.
465
466 2001-05-23  Werner Koch  <wk@gnupg.org>
467
468         * secmem.c (EPERM): Try to work around a Slackware problem.
469
470 2001-05-05  Werner Koch  <wk@gnupg.org>
471
472         * http.c (http_start_data): Flush before writing.
473         (http_wait_response): No need to flush here.
474
475 2001-04-27  Werner Koch  <wk@gnupg.org>
476
477         * memory.c (out_of_core): Print an explanation on reasons why
478         secret memory can get exhausted.
479
480 2001-04-23  Werner Koch  <wk@gnupg.org>
481
482         * http.c (http_wait_response): Implement new flag to inhibit the
483         TCP shutdown.
484
485 2001-04-20  Werner Koch  <wk@gnupg.org>
486
487         * http.c (http_start_data): Use write_server and not the iobuf
488         stuff.  I wonder why we are at all using write_server - shouldn't
489         it be handled by iobuf?
490
491         * strgutil.c (set_native_charset): Allow utf-8 by introducing the
492         new no_translation variable.
493         (native_to_utf8): Handle no_translation.
494         (utf8_to_native): Ditto.
495
496 2001-04-19  Werner Koch  <wk@gnupg.org>
497
498         * miscutil.c (asctimestamp): Handle negative times.  We must do
499         this because Windoze segvs on negative times passed to gmtime().
500         (strtimestamp): Ditto.
501
502 2001-04-14  Werner Koch  <wk@gnupg.org>
503
504         * strgutil.c (utf8_to_native): Fixed a segv.  Thanks to Keith Clayton.
505
506 2001-04-13  Werner Koch  <wk@gnupg.org>
507
508         * iobuf.c (iobuf_fopen): Removed because it is not used and
509         furthermore mode is ignored for an fname of "-".  Suggested by
510         Florian Weimer.
511
512 2001-04-02  Werner Koch  <wk@gnupg.org>
513
514         * iobuf.c (translate_file_handle): New. Use this function
515         everywhere in this file.
516         (iobuf_translate_file_handle): Always use the osfhandle stuff here
517         because callers don't know the implementation details of iobuf and
518         they expect that the handles are translated. 
519
520 2001-03-29  Werner Koch  <wk@gnupg.org>
521
522         * miscutil.c (answer_is_yes): An empty string does now return no.
523         (answer_is_yes_no_quit): Likewise.
524
525         * iobuf.c (iobuf_close): Burn the buffers.
526
527 2001-03-26  Werner Koch  <wk@gnupg.org>
528
529         * ttyio.c: Define TERMDEVICE depending on OS.
530
531         * http.c (http_start_data): send a CRLF and not just a LF.
532         Pointed out by Steven Murdoch.
533
534 2001-03-13  Werner Koch  <wk@gnupg.org>
535
536         * iobuf.c (iobuf_sockopen): New.
537         (sock_filter) [__MINGW32__]: New.
538         (iobuf_ioctl): New.
539         (file_filter): Implemented keep_open mode.
540         * http.c (http_open, http_wait_response): Replaced iobuf_fdopen by
541         iobuf_sockopen and use an iobuf_ioctl to avoid the dup().
542         (deinit_sockets, init_sockets) [__MINGW32__]: New.
543         (connect_server, write_server): Add code to work with W32 sockets.
544
545 2001-03-12  Werner Koch  <wk@gnupg.org>
546
547         * strgutil.c (check_trailing_chars,check_trailing_ws): New.
548
549 2001-03-08  Werner Koch  <wk@gnupg.org>
550
551         * argparse.c (default_strusage): Changed year of printed copyright
552         to 2001.
553
554         * iobuf.c (fd_cache_invalidate, fd_cache_close, fd_cache_open): New. 
555         (direct_open): Invalidate the fd_cache for read access.
556         (file_filter): Cache the close here.
557         (iobuf_open): Use new my_fopen_ro macro to try the cache first.
558
559 2001-03-07  Werner Koch  <wk@gnupg.org>
560
561         * iobuf.c: Made the old stdio file handling cpp conditional
562         controlled by FILE_FILTER_USES_STDIO and added a new
563         open/read/close based one.  We don't need the stdio buffering
564         becuase we are doing our own buffering anyway.  And it is a
565         prerequesite to allow the use of ReadFile et al for W32 which in
566         turn is needed to make the http stuff work there. The new W32
567         stuff has also been implemented. Minor changes to all open functions.
568         (direct_open): New.
569         (file_filter): Core of the new read/write handling.
570         (iobuf_get_filelength): Use W32 API function here. But it is
571         currently limited to 2GB files.
572         (iobuf_seek): Ditto.
573
574 2001-03-01  Werner Koch  <wk@gnupg.org>
575
576         * errors.c (g10_errstr): New codes UNU_SECKEY and UNU_PUBKEY.
577
578 2000-12-28  Werner Koch  <wk@gnupg.org>
579
580         * dotlock.c: Made all_lockfiles volatile.
581         (remove_lockfiles): Made public.
582
583 2000-11-30  Werner Koch  <wk@gnupg.org>
584
585         * iobuf.c (iobuf_translate_file_handle): New.
586         (iobuf_open, iobuf_create): Use it for special filenames
587
588 2000-11-11  Paul Eggert  <eggert@twinsun.com>
589
590         * iobuf.c (iobuf_get_filelength): Now returns off_t, not u32.
591         Remove kludges to worry about large files; the callers check
592         for files that are too large, and they should already be doing
593         the right thing in an implementation-independent way.
594         (fopen, fstat): Remove macros.
595
596         * iobuf.c (iobuf_set_limit, iobuf_tell, iobuf_seek): 
597         Use off_t, not ulong, for file offsets.
598         (<limits.h>): Include if needed.
599         (LONG_MAX, LONG_MIN): Define a substitute if needed.
600         (fseeko): Define a substitute if needed.
601
602         * iobuf.c (iobuf_seek):  Do not use %lu to report file
603
604 2000-11-09  Werner Koch  <wk@gnupg.org>
605
606         * iobuf.c (iobuf_enable_special_filenames): New.
607         (check_special_filename): New.
608         (iobuf_open): check for special filenames.
609         (iobuf_create): Ditto.
610
611 2000-10-23  Werner Koch  <wk@gnupg.org>
612
613         * secmem.c (lock_pool): Don't print warning for Windows.
614
615 2000-10-16  Werner Koch  <wk@gnupg.org>
616
617         * secmem.c (lock_pool): Fixed error checking for Linux.
618         By James Troup.
619
620 Thu Sep 14 14:20:38 CEST 2000  Werner Koch  <wk@openit.de>
621
622         * miscutil.c (answer_is_yes_no_quit): Swapped order of yes/no test
623         so that no is returned for an empty input. By David Champion.
624
625 Wed Sep  6 17:55:47 CEST 2000  Werner Koch  <wk@openit.de>
626
627         * iobuf.c: Use fopen64 insead of fopen when available.
628         (iobuf_get_filelength): Use fstat64 when available but return
629         2^32-1 if the file is larger than this value.
630
631 Wed Sep  6 14:59:09 CEST 2000  Werner Koch  <wk@openit.de>
632
633         * secmem.c (secmem_realloc): check for failed secmem_malloc.  By
634         Matt Kraai.
635
636         * strgutil.c (utf8_to_native): Fixed null ptr problem.  By
637         Giampaolo Tomassoni.
638
639 Thu Jul 27 10:02:38 CEST 2000  Werner Koch  <wk@openit.de>
640
641   * iobuf.c: Use setmode() at several places to set stdin and stdout
642   to binary mode for MSDOS based systems
643
644   * iobuf.c (underflow): Initialize dummy_len to keep memory checker happy.
645
646 Fri Jun  9 10:09:52 CEST 2000  Werner Koch  <wk@openit.de>
647
648   * ttyio.c: Simulate termios with termios.  By Dave Dykstra.
649
650 Thu Jun  8 20:22:00 CEST 2000  Werner Koch  <wk@openit.de>
651
652   * secmem.c (lock_pool,secmem_init): Additional check for dropped privs.
653
654 Tue May 30 16:37:55 CEST 2000  Werner Koch  <wk@openit.de>
655
656   * iobuf.c (iobuf_cancel): Fix for MSDOS.
657
658 Fri Apr 14 19:37:08 CEST 2000  Werner Koch  <wk@openit.de>
659
660         * dotlock.c (disable_dotlock): New.  Implmented this in the module.
661
662 2000-03-09 14:04:22  Werner Koch  (wk@habibti.openit.de)
663
664         * argparse.c (default_strusage): Changed year of default copyright.
665
666 Tue Mar  7 18:45:31 CET 2000  Werner Koch  <wk@gnupg.de>
667
668         * secmem.c (lock_pool): No more warning for QNX. By Sam Roberts.
669
670 2000-03-02 15:51:04  Werner Koch  (wk@habibti.gnupg.de)
671
672         * ttyio.c (tty_print_utf8_string): Oops.
673
674 Thu Mar  2 15:37:46 CET 2000  Werner Koch  <wk@gnupg.de>
675
676         * ttyio.c (tty_print_utf8_string2): New to allow a max output size.
677
678 Wed Feb 23 10:07:57 CET 2000  Werner Koch  <wk@gnupg.de>
679
680         * miscutil.c (asctimestamp): Fix for possible buffer overflow by
681         large system returned date format string.
682
683 Fri Dec 31 14:08:15 CET 1999  Werner Koch  <wk@gnupg.de>
684
685         * logger.c (log_inc_errorcount): New.
686
687 Sat Dec  4 12:30:28 CET 1999  Werner Koch  <wk@gnupg.de>
688
689         * iobuf.c (iobuf_cancel): Broadcast the new Cancel mesaage to all
690         filters.
691
692 Mon Nov 22 11:14:53 CET 1999  Werner Koch  <wk@gnupg.de>
693
694         * strgutil.c (strcasecmp): New.
695
696         * secmem.c (pool_is_mmapped): Made volatile.
697
698 Sat Oct  9 20:34:41 CEST 1999  Werner Koch  <wk@gnupg.de>
699
700         * Makefile.am:  Removed libtool.
701
702 Fri Oct  8 20:32:01 CEST 1999  Werner Koch  <wk@gnupg.de>
703
704         * w32reg.c: New.
705         * simple-gettext.c: Use the Registry to locate the mo file.
706
707         * http.c (send_request): Add support for proxys; suggested by
708         Walter Hofmann.
709         (http_open_document): Pass flags to http_open.
710
711 Fri Sep 17 12:56:42 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
712
713
714         * secmem.c (lock_pool): Check for ENOSYS return my mlock() on
715         old SCOs.
716
717         * ttyio.c (do_get): Replaced #if __MINGW32__ by #ifdef becuase
718         gcc 2.95.1 assigns a floating point value (0.2) to this macro,
719         which in turn can't be used in an expression.
720
721 Wed Sep 15 16:22:17 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
722
723
724         * simple-gettext.c: New.
725
726 Wed Sep  1 15:30:44 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
727
728
729         * argparse.c (arg_parse): Add standard options to the dump-options
730         output.
731
732 Tue Aug 31 17:20:44 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
733
734
735         * strgutil (utf8_to_native): Implemented.
736         (check_utf8_string): Removed.
737
738         * miscutil.c (make_printable_string): Fixed possible buffer overflow.
739         (print_utf8_string): New.
740
741         * ttyio.c (tty_print_utf8_string): New.
742
743 Mon Aug 30 20:38:33 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
744
745
746         * secmem.c (pool_okay): declared volatile.
747
748         * miscutil.c (answer_is_yes): Always check for plain "yes".
749         (answer_is_yes_no_quit): Likewise.
750
751         * dotlock.c (create_dotlock): Fixed segv during cleanup.
752
753 Mon Jul 12 14:55:34 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
754
755
756         * argparse.c (initialize): Init ret_xxx.
757         (optfile_parse): Remove quotes from arguments.
758
759 Wed Jul  7 13:08:40 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
760
761
762         * memory.c (membug): Use if either M_DEBUG or M_GUARD is used.
763
764         * miscutil.c (scan_isodatestr): New.
765
766         * logger.c (g10_log_mpidump): Moved to ../mpi/mpicoder.c
767         (g10_log_print_prefix): Renamed from print_prefix and made global.
768
769         * Makefile.am: Support for libtool.
770
771 Thu Jul  1 12:47:31 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
772
773
774         * miscutil.c (make_printable_string): New.
775
776         * strgutil.c (add_to_strlist2,append_to_strlist2): New.
777
778 Tue Jun 29 21:44:25 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
779
780
781         * secmem.c (USE_CAPABILITIES): Capabilities support (Remi).
782
783 Sat Jun 26 12:15:59 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
784
785
786         * dotlock.c (create_dotlock): s/uts/utsbuf/ cause there an Amdahl
787         system with the name UTS (Dave Dykstra).
788
789         * secmem.c (DEFAULT_POOLSIZE): Doubled the size.
790
791 Fri Jun 18 00:18:02 CEST 1999 Michael Roth <mroth@nessie.de>
792
793         * iobuf.c: file_filter() Detection of EOF on terminals
794           improved/fixed (see Bug #21).
795
796 Mon Jun 14 21:18:54 CEST 1999 Michael Roth <mroth@nessie.de>
797
798         * ttyio.c: tty_no_terminal() new.
799
800 Sat Jun  5 15:30:33 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
801
802         * strgutil.c (set_native_charset): Support Latin-2
803
804 Tue Jun  1 16:01:46 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
805
806         * iobuf.c (iobuf_get_real_fname): Made global and now keep a
807         copy of the name in the iobuf struct.
808
809 Mon May 31 19:41:10 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
810
811         * iobuf.c (file_filter,block_filter): Speed patches (Rémi).
812
813 Thu May 27 09:40:55 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
814
815         * miscutil.c (answer_is_yes_no_quit): New.
816
817 Sun May 23 14:20:22 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
818
819         * dotlock.c: Tweaked to make it compile under mingw32
820         * http.c: Disabled for mingw32.
821
822 Sat May 22 22:47:26 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
823
824         * logger.c (log_set_logfile): New.
825
826 Thu May 20 14:04:08 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
827
828         * memory.c (membug): Nanu, there was a const instead of a static.
829
830         * strgutil.c (trim_trailing_chars): New.
831
832 Mon May 17 21:54:43 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
833
834         * logger.c (g10_log_hexdump): Made 2nd arg a const.
835
836 Wed Apr 28 13:03:03 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
837
838         * miscutil.c (asctimestamp): Use nl_langinfo (Gaël Quéri).
839
840 Sun Apr 18 10:11:28 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
841
842         * argparse.c (store_alias): Disabled becuase it is not used.
843
844         * ttyio.c (tty_batchmode): New
845
846 Sat Mar 20 11:44:21 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
847
848         * http.c: Swapped to includes.
849
850 Tue Mar  2 16:44:57 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
851
852         * strgutil.c (get_native_charset): New.
853
854 Fri Feb 26 17:55:41 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
855
856         * secmem.c (memblock_struct): Force align (Rémi Guyomarch)
857
858 Wed Feb 24 11:07:27 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
859
860         * iobuf.c (block_filter): Fixed the oscillating partial packet chunks.
861
862 Fri Feb 19 15:49:15 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
863
864         * iobuf.c (iobuf_push_filter2): New to allow transer of context
865         ownership to the iobuf. Released the context where needed.
866
867 Tue Feb 16 14:10:02 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
868
869         * strgutil.c (add_to_strglist): Clear the new flags field
870         (append_to_strglist): Ditto.
871
872         * dotlock.c (read_lockfile): terminate pidstr (Michael).
873
874 Wed Feb 10 17:15:39 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
875
876         * dotlock.c (remove_lockfiles): Add cleanup function.
877         (make_dotlock): Add deadlock check.
878
879         * secmem.c (secmem_malloc): Changed error message.
880
881 Wed Jan 20 21:40:21 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
882
883         * http.c (http_wait_response): Moved the shutdown behind the dup
884
885 Wed Jan 20 18:59:49 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
886
887         * http.c (send_request): Removed double LF
888
889 Tue Jan 19 19:34:58 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
890
891         * * iobuf.c (iobuf_push_filter): Allow filters for temp streams
892
893         (iobuf_write_temp): Ditto.
894         (iobuf_flush_temp): New.
895         (iobuf_unget_and_close_temp): Removed.
896
897         * http.c (close_http_document): Renamed to http_close().
898         (open_http_document): Renamed to http_open_document().
899         (http_open): New.
900         (http_start_data): New.
901         (http_wait_response): New.
902
903
904 Sun Jan 17 11:04:33 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
905
906         * strgutil.c (trim_trailing_ws): New.
907
908 Sat Jan 16 12:03:27 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
909
910         * http.c (connect_server): Fixed stupid bug.
911
912 Sat Jan 16 09:27:30 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
913
914         * http.c: New
915
916
917 Wed Jan 13 14:10:15 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
918
919         * iobuf.c (iobuf_fdopen): New.
920
921 Sat Jan  9 16:02:23 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
922
923         * secmem.c (lock_pool): add another check that setuid() worked.
924         (secmem_init): Ditto.
925
926 Thu Jan  7 18:00:58 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
927
928         * iobuf.c (iobuf_clear_eof): Removed.
929         (underflow): Changed the eof handling.
930         (iobuf_pop_filter): Made static and renamed to pop_filter.
931
932         * iobuf.c (iobuf_read_line): New.
933
934 Sun Jan  3 15:28:44 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
935
936         * dotlock.c (make_dotlock): print another informal message.
937
938         (make_dotlock): Removed the cpp checks.
939
940
941 Tue Dec 29 14:41:47 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
942
943         * secmem.c: Moved unistd.h out of the #ifdef
944
945         * dotlock.c (make_dotlock): Sun has no SYS_NMLN
946
947         * iobuf.c (iobuf_unget_and_close_temp): Reset .start
948
949 Sat Dec 12 18:40:32 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
950
951         * argparse.c (arg_pars): fixed opts[i] with negative index.
952
953 Fri Nov 27 21:37:41 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
954
955         * dotlock.c: Implemented
956
957 Wed Nov 25 11:30:07 1998  Werner Koch  (wk@isil.d.shuttle.de)
958
959         * iobuf.c (iobuf_pop_filter): Fixed sigsegv after error.
960
961 Thu Nov 19 07:09:55 1998  Werner Koch  <werner.koch@guug.de>
962
963         * miscutil.c (strtimevalue): New.
964
965 Tue Nov 10 10:01:53 1998  Werner Koch  (wk@isil.d.shuttle.de)
966
967         * strgutil.c (set_native_charset): New.
968         (native_to_utf8): Now handles koi8-r.
969
970 Tue Nov  3 16:17:56 1998  Werner Koch  (wk@isil.d.shuttle.de)
971
972         * strgutil.c (native_to_utf8): New.
973         (utf8_to_native): New, but only as a stub.
974
975         * argparse.c (optfile_parse): Trimmed spaces from args.
976
977
978 Wed Oct 28 08:01:49 1998  me,,,  (wk@tobold)
979
980         * argparse.c (find_long_option): New.
981         (arg_parse): option=value is now allowed. Add a new internal
982         option "--dump-options".
983
984 Thu Oct 22 16:25:49 1998  Michael Roth  (mroth@nessie.de)
985
986         * fileutil.c (make_basename): New.
987         (make_dirname): New.
988
989 Wed Oct 21 12:20:29 1998  Werner Koch  (wk@isil.d.shuttle.de)
990
991         * util.c (iobuf_flush): autoincreasing of a temp. iobuf
992         (iobuf_temp_with_content): New.
993
994 Tue Oct 13 12:40:13 1998  Werner Koch  (wk@isil.d.shuttle.de)
995
996         * util.c (.nofast): set this variable
997
998 Wed Oct  7 19:27:50 1998  Werner Koch  (wk@isil.d.shuttle.de)
999
1000         * memory.c (m_print_stats): New.
1001
1002 Tue Oct  6 09:53:56 1998  Werner Koch  (wk@isil.d.shuttle.de)
1003
1004         * strgutil.c (memicmp): Add HAVE_MEMICMP.
1005
1006 Mon Sep 21 19:45:01 1998  Werner Koch  (wk@(none))
1007
1008         * secmem.c: New flags to allow suspend/resume of warnings.
1009
1010 Fri Sep 18 16:25:47 1998  Werner Koch  (wk@(none))
1011
1012         * secmem.c (lock_pool): Kludge for broken mlock on HPUX 10.20
1013
1014 Tue Sep 15 17:52:21 1998  Werner Koch  (wk@(none))
1015
1016         * miscutil.c (asctimestamp): New.
1017
1018 Mon Sep 14 09:38:18 1998  Werner Koch  (wk@(none))
1019
1020         * secmem.c (init_pool): Now mmaps /dev/zero if we do not have MAP_ANON.
1021
1022 Wed Sep  9 13:52:28 1998  Werner Koch  (wk@(none))
1023
1024         * ttyio.c (do_get): Ctrl-D is now a valid but special character
1025
1026 Mon Sep  7 13:52:41 1998  Werner Koch  (wk@(none))
1027
1028         * iobuf.c (get_real_fname): New and changed file_filter datastructures
1029         and their initialization.
1030
1031 Tue Aug 11 15:12:35 1998  Werner Koch  (wk@(none))
1032
1033         * miscutil.c (answer_is_yes): i18ned
1034
1035 Sat Aug  8 18:35:00 1998  Werner Koch  (wk@(none))
1036
1037         * ttyio.c (cleanup): New.
1038
1039 Mon Aug  3 17:06:00 1998  Werner Koch  (wk@(none))
1040
1041         * secmem.c (MAP_ANON): Add a macro test
1042
1043 Wed Jul 29 14:53:34 1998  Werner Koch  (wk@(none))
1044
1045         * ttyio.c (tty_get_answer_is_yes): New.
1046
1047 Tue Jul 21 10:35:48 1998  Werner Koch  (wk@(none))
1048
1049         * argparse.c: New option flag to distinguish options and commands.
1050
1051 Sat Jul 18 19:49:30 1998  Werner Koch  (wk@(none))
1052
1053         * argparse.c (arg_parse): Added -? as alias for -h
1054
1055 Thu Jul  9 14:47:20 1998  Werner Koch  (wk@isil.d.shuttle.de)
1056
1057         * secmem.c (secmem_init): Drops setuid if called with 0.
1058
1059 Tue Jul  7 11:49:25 1998  Werner Koch  (wk@isil.d.shuttle.de)
1060
1061         * logger.c (log_set_filename): New.
1062
1063 Mon Jul  6 09:03:49 1998  Werner Koch  (wk@isil.d.shuttle.de)
1064
1065         * strgutil.c (append_to_strlist): New.
1066
1067 Thu Jul  2 15:55:44 1998  Werner Koch  (wk@isil.d.shuttle.de)
1068
1069         * iobuf.c (block_filter): Add writing of OP partial length headers.
1070
1071 Fri Jun 26 10:38:35 1998  Werner Koch  (wk@isil.d.shuttle.de)
1072
1073         * ttyio.c (do_get): all iso8859-1 characters are now allowed.
1074
1075 Thu Jun 25 15:57:21 1998  Werner Koch  (wk@isil.d.shuttle.de)
1076
1077         * secmem.c (lock_pool): Removed left over test code.
1078
1079 Wed Jun 10 07:39:41 1998  Werner Koch,mobil,,,  (wk@tobold)
1080
1081         * fileutil.c (compare_filenames): New.
1082
1083         * argparse.c (arg_parse): New flag bit 6 to ignore --version
1084
1085 Thu May 14 16:45:13 1998  Werner Koch  (wk@isil.d.shuttle.de)
1086
1087         * argparse.c (show_help): Add some formatting stuff
1088
1089 Fri May  8 17:06:49 1998  Werner Koch  (wk@isil.d.shuttle.de)
1090
1091         * errors.c (strerror): New if !HAVE_STRERROR
1092
1093 Mon May  4 19:48:03 1998  Werner Koch  (wk@isil.d.shuttle.de)
1094
1095         * iobuf.c (iobuf_read): Code is now faster.
1096         * (iobuf_write): ditto.
1097
1098 Mon Apr 27 11:01:32 1998  Werner Koch  (wk@isil.d.shuttle.de)
1099
1100         * strgutil.c (memicmp): New.
1101
1102 Thu Mar 19 11:29:03 1998  Werner Koch  (wk@isil.d.shuttle.de)
1103
1104         * strgutil.c (memistr): Add const to return and first arg.
1105
1106 Sat Mar  7 11:54:35 1998  Werner Koch  (wk@isil.d.shuttle.de)
1107
1108         * miscutil.c (print_string): New arg delim; changed all callers.
1109
1110 Thu Mar  5 12:19:30 1998  Werner Koch  (wk@isil.d.shuttle.de)
1111
1112         * errors.c: New strings.
1113
1114 Thu Mar  5 12:06:31 1998  Werner Koch  (wk@isil.d.shuttle.de)
1115
1116         * iobuf.c (iobuf_open): A name of "-" now opens stdin.
1117         * fileutil.c (print_fname_stdout, print_fname_stdin): New.
1118
1119 Fri Feb 27 10:20:03 1998  Werner Koch  (wk@isil.d.shuttle.de)
1120
1121         * memory.c (m_is_secure): Removed.
1122         * secmem.c (m_is_secure): Moved to here.
1123
1124         * secmem.c (secmem_realloc): New.
1125         * memory.c (M_GUARD,EXTRA_ALIGN): New (all functions).
1126
1127 Thu Feb 26 14:36:51 1998  Werner Koch  (wk@isil.d.shuttle.de)
1128
1129         * secmem.c (lock_pool): No error if EAGAIN is returned instead
1130         of EPERM.
1131
1132 Fri Feb 20 17:43:05 1998  Werner Koch  (wk@isil.d.shuttle.de)
1133
1134         * ttyio.c [MINGW32]: Add support for mingw32.
1135
1136 Tue Feb 17 19:43:44 1998  Werner Koch  (wk@isil.d.shuttle.de)
1137
1138         * memory.c (dump_table_at_exit): New.
1139
1140 Mon Feb 16 10:07:28 1998  Werner Koch  (wk@isil.d.shuttle.de)
1141
1142         * argparse.c (show_version, show_help, default_strusage): Changed
1143         according to GNU standards.
1144
1145 Mon Feb 16 08:58:25 1998  Werner Koch  (wk@isil.d.shuttle.de)
1146
1147         * iobuf.c (iobuf_peek): New
1148
1149 Fri Feb 13 19:34:59 1998  Werner Koch  (wk@isil.d.shuttle.de)
1150
1151         * iobuf.c (iobuf_seek): Set counters to new offset.
1152
1153 Fri Feb 13 17:13:04 1998  Werner Koch  (wk@isil.d.shuttle.de)
1154
1155         * logger.c (log_set_name, log_get_name): New.
1156         (print_prefix, pgm_name): New, changed all function to make use it.
1157         (log_mpidump): Removed the "DBG" prefix.
1158         (log_hexdump): Ditto.
1159
1160         * logger.c (printstr): Removed.
1161
1162 Fri Feb 13 15:14:13 1998  Werner Koch  (wk@isil.d.shuttle.de)
1163
1164         * argparse.c (show_help): New '\v' kludge.
1165
1166
1167
1168  Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
1169
1170  This file is free software; as a special exception the author gives
1171  unlimited permission to copy and/or distribute it, with or without
1172  modifications, as long as this notice is preserved.
1173
1174  This file is distributed in the hope that it will be useful, but
1175  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1176  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1177
1178