]> sjero.net Git - wget/blob - src/utils.c
Use futimens instead of utimes.
[wget] / src / utils.c
1 /* Various utility functions.
2    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
3    2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
4    Inc.
5
6 This file is part of GNU Wget.
7
8 GNU Wget is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 GNU Wget is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with Wget.  If not, see <http://www.gnu.org/licenses/>.
20
21 Additional permission under GNU GPL version 3 section 7
22
23 If you modify this program, or any covered work, by linking or
24 combining it with the OpenSSL project's OpenSSL library (or a
25 modified version of that library), containing parts covered by the
26 terms of the OpenSSL or SSLeay licenses, the Free Software Foundation
27 grants you additional permission to convey the resulting work.
28 Corresponding Source for a non-source form of such a combination
29 shall include the source code for the parts of OpenSSL used as well
30 as that of the covered work.  */
31
32 #include "wget.h"
33
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <string.h>
37 #include <time.h>
38 #include <unistd.h>
39 #ifdef HAVE_MMAP
40 # include <sys/mman.h>
41 #endif
42 #ifdef HAVE_PROCESS_H
43 # include <process.h>  /* getpid() */
44 #endif
45 #ifdef HAVE_UTIME_H
46 # include <utime.h>
47 #endif
48 #include <errno.h>
49 #include <fcntl.h>
50 #include <assert.h>
51 #include <stdarg.h>
52 #include <locale.h>
53
54 #include <sys/stat.h>
55
56 /* For TIOCGWINSZ and friends: */
57 #ifdef HAVE_SYS_IOCTL_H
58 # include <sys/ioctl.h>
59 #endif
60 #ifdef HAVE_TERMIOS_H
61 # include <termios.h>
62 #endif
63
64 /* Needed for Unix version of run_with_timeout. */
65 #include <signal.h>
66 #include <setjmp.h>
67
68 #ifndef HAVE_SIGSETJMP
69 /* If sigsetjmp is a macro, configure won't pick it up. */
70 # ifdef sigsetjmp
71 #  define HAVE_SIGSETJMP
72 # endif
73 #endif
74
75 #if defined HAVE_SIGSETJMP || defined HAVE_SIGBLOCK
76 # define USE_SIGNAL_TIMEOUT
77 #endif
78
79 #include "utils.h"
80 #include "hash.h"
81
82 #ifdef __VMS
83 #include "vms.h"
84 #endif /* def __VMS */
85
86 #ifdef TESTING
87 #include "test.h"
88 #endif
89
90 static void
91 memfatal (const char *context, long attempted_size)
92 {
93   /* Make sure we don't try to store part of the log line, and thus
94      call malloc.  */
95   log_set_save_context (false);
96
97   /* We have different log outputs in different situations:
98      1) output without bytes information
99      2) output with bytes information  */
100   if (attempted_size == UNKNOWN_ATTEMPTED_SIZE)
101     {
102       logprintf (LOG_ALWAYS,
103                  _("%s: %s: Failed to allocate enough memory; memory exhausted.\n"),
104                  exec_name, context);
105     }
106   else
107     {
108       logprintf (LOG_ALWAYS,
109                  _("%s: %s: Failed to allocate %ld bytes; memory exhausted.\n"),
110                  exec_name, context, attempted_size);
111     }
112
113   exit (1);
114 }
115
116 /* Character property table for (re-)escaping VMS ODS5 extended file
117    names.  Note that this table ignores Unicode.
118
119    ODS2 valid characters: 0-9 A-Z a-z $ - _ ~
120
121    ODS5 Invalid characters:
122       C0 control codes (0x00 to 0x1F inclusive)
123       Asterisk (*)
124       Question mark (?)
125
126    ODS5 Invalid characters only in VMS V7.2 (which no one runs, right?):
127       Double quotation marks (")
128       Backslash (\)
129       Colon (:)
130       Left angle bracket (<)
131       Right angle bracket (>)
132       Slash (/)
133       Vertical bar (|)
134
135    Characters escaped by "^":
136       SP  !  "  #  %  &  '  (  )  +  ,  .  :  ;  =
137        @  [  \  ]  ^  `  {  |  }  ~
138
139    Either "^_" or "^ " is accepted as a space.  Period (.) is a special
140    case.  Note that un-escaped < and > can also confuse a directory
141    spec.
142
143    Characters put out as ^xx:
144       7F (DEL)
145       80-9F (C1 control characters)
146       A0 (nonbreaking space)
147       FF (Latin small letter y diaeresis)
148
149    Other cases:
150       Unicode: "^Uxxxx", where "xxxx" is four hex digits.
151
152     Property table values:
153       Normal escape:    1
154       Space:            2
155       Dot:              4
156       Hex-hex escape:   8
157       ODS2 normal:     16
158       ODS2 lower case: 32
159       Hex digit:       64
160 */
161
162 unsigned char char_prop[ 256] = {
163
164 /* NUL SOH STX ETX EOT ENQ ACK BEL   BS  HT  LF  VT  FF  CR  SO  SI */
165     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
166
167 /* DLE DC1 DC2 DC3 DC4 NAK SYN ETB  CAN  EM SUB ESC  FS  GS  RS  US */
168     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
169
170 /*  SP  !   "   #   $   %   &   '    (   )   *   +   ,   -   .   /  */
171     2,  1,  1,  1, 16,  1,  1,  1,   1,  1,  0,  1,  1, 16,  4,  0,
172
173 /*  0   1   2   3   4   5   6   7    8   9   :   ;   <   =   >   ?  */
174    80, 80, 80, 80, 80, 80, 80, 80,  80, 80,  1,  1,  1,  1,  1,  1,
175
176 /*  @   A   B   C   D   E   F   G    H   I   J   K   L   M   N   O  */
177     1, 80, 80, 80, 80, 80, 80, 16,  16, 16, 16, 16, 16, 16, 16, 16,
178
179 /*  P   Q   R   S   T   U   V   W    X   Y   Z   [   \   ]   ^   _  */
180    16, 16, 16, 16, 16, 16, 16, 16,  16, 16, 16,  1,  1,  1,  1, 16,
181
182 /*  `   a   b   c   d   e   f   g    h   i   j   k   l   m   n   o  */
183     1, 96, 96, 96, 96, 96, 96, 32,  32, 32, 32, 32, 32, 32, 32, 32,
184
185 /*  p   q   r   s   t   u   v   w    x   y   z   {   |   }   ~  DEL */
186    32, 32, 32, 32, 32, 32, 32, 32,  32, 32, 32,  1,  1,  1, 17,  8,
187
188     8,  8,  8,  8,  8,  8,  8,  8,   8,  8,  8,  8,  8,  8,  8,  8,
189     8,  8,  8,  8,  8,  8,  8,  8,   8,  8,  8,  8,  8,  8,  8,  8,
190     8,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
191     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
192     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
193     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
194     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
195     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  8
196 };
197
198 /* Utility function: like xstrdup(), but also lowercases S.  */
199
200 char *
201 xstrdup_lower (const char *s)
202 {
203   char *copy = xstrdup (s);
204   char *p = copy;
205   for (; *p; p++)
206     *p = c_tolower (*p);
207   return copy;
208 }
209
210 /* Copy the string formed by two pointers (one on the beginning, other
211    on the char after the last char) to a new, malloc-ed location.
212    0-terminate it.  */
213 char *
214 strdupdelim (const char *beg, const char *end)
215 {
216   char *res = xmalloc (end - beg + 1);
217   memcpy (res, beg, end - beg);
218   res[end - beg] = '\0';
219   return res;
220 }
221
222 /* Parse a string containing comma-separated elements, and return a
223    vector of char pointers with the elements.  Spaces following the
224    commas are ignored.  */
225 char **
226 sepstring (const char *s)
227 {
228   char **res;
229   const char *p;
230   int i = 0;
231
232   if (!s || !*s)
233     return NULL;
234   res = NULL;
235   p = s;
236   while (*s)
237     {
238       if (*s == ',')
239         {
240           res = xrealloc (res, (i + 2) * sizeof (char *));
241           res[i] = strdupdelim (p, s);
242           res[++i] = NULL;
243           ++s;
244           /* Skip the blanks following the ','.  */
245           while (c_isspace (*s))
246             ++s;
247           p = s;
248         }
249       else
250         ++s;
251     }
252   res = xrealloc (res, (i + 2) * sizeof (char *));
253   res[i] = strdupdelim (p, s);
254   res[i + 1] = NULL;
255   return res;
256 }
257 \f
258 /* Like sprintf, but prints into a string of sufficient size freshly
259    allocated with malloc, which is returned.  If unable to print due
260    to invalid format, returns NULL.  Inability to allocate needed
261    memory results in abort, as with xmalloc.  This is in spirit
262    similar to the GNU/BSD extension asprintf, but somewhat easier to
263    use.
264
265    Internally the function either calls vasprintf or loops around
266    vsnprintf until the correct size is found.  Since Wget also ships a
267    fallback implementation of vsnprintf, this should be portable.  */
268
269 /* Constant is using for limits memory allocation for text buffer.
270    Applicable in situation when: vasprintf is not available in the system
271    and vsnprintf return -1 when long line is truncated (in old versions of
272    glibc and in other system where C99 doesn`t support) */
273
274 #define FMT_MAX_LENGTH 1048576
275
276 char *
277 aprintf (const char *fmt, ...)
278 {
279 #if defined HAVE_VASPRINTF && !defined DEBUG_MALLOC
280   /* Use vasprintf. */
281   int ret;
282   va_list args;
283   char *str;
284   va_start (args, fmt);
285   ret = vasprintf (&str, fmt, args);
286   va_end (args);
287   if (ret < 0 && errno == ENOMEM)
288     memfatal ("aprintf", UNKNOWN_ATTEMPTED_SIZE);  /* for consistency
289                                                       with xmalloc/xrealloc */
290   else if (ret < 0)
291     return NULL;
292   return str;
293 #else  /* not HAVE_VASPRINTF */
294
295   /* vasprintf is unavailable.  snprintf into a small buffer and
296      resize it as necessary. */
297   int size = 32;
298   char *str = xmalloc (size);
299
300   /* #### This code will infloop and eventually abort in xrealloc if
301      passed a FMT that causes snprintf to consistently return -1.  */
302
303   while (1)
304     {
305       int n;
306       va_list args;
307
308       va_start (args, fmt);
309       n = vsnprintf (str, size, fmt, args);
310       va_end (args);
311
312       /* If the printing worked, return the string. */
313       if (n > -1 && n < size)
314         return str;
315
316       /* Else try again with a larger buffer. */
317       if (n > -1)               /* C99 */
318         size = n + 1;           /* precisely what is needed */
319       else if (size >= FMT_MAX_LENGTH)  /* We have a huge buffer, */
320         {                               /* maybe we have some wrong
321                                            format string? */
322           logprintf (LOG_ALWAYS,
323                      _("%s: aprintf: text buffer is too big (%ld bytes), "
324                        "aborting.\n"),
325                      exec_name, size);  /* printout a log message */
326           abort ();                     /* and abort... */
327         }
328       else
329         {
330           /* else, we continue to grow our
331            * buffer: Twice the old size. */
332           size <<= 1;
333         }
334       str = xrealloc (str, size);
335     }
336 #endif /* not HAVE_VASPRINTF */
337 }
338
339 /* Concatenate the NULL-terminated list of string arguments into
340    freshly allocated space.  */
341
342 char *
343 concat_strings (const char *str0, ...)
344 {
345   va_list args;
346   int saved_lengths[5];         /* inspired by Apache's apr_pstrcat */
347   char *ret, *p;
348
349   const char *next_str;
350   int total_length = 0;
351   size_t argcount;
352
353   /* Calculate the length of and allocate the resulting string. */
354
355   argcount = 0;
356   va_start (args, str0);
357   for (next_str = str0; next_str != NULL; next_str = va_arg (args, char *))
358     {
359       int len = strlen (next_str);
360       if (argcount < countof (saved_lengths))
361         saved_lengths[argcount++] = len;
362       total_length += len;
363     }
364   va_end (args);
365   p = ret = xmalloc (total_length + 1);
366
367   /* Copy the strings into the allocated space. */
368
369   argcount = 0;
370   va_start (args, str0);
371   for (next_str = str0; next_str != NULL; next_str = va_arg (args, char *))
372     {
373       int len;
374       if (argcount < countof (saved_lengths))
375         len = saved_lengths[argcount++];
376       else
377         len = strlen (next_str);
378       memcpy (p, next_str, len);
379       p += len;
380     }
381   va_end (args);
382   *p = '\0';
383
384   return ret;
385 }
386 \f
387 /* Format the provided time according to the specified format.  The
388    format is a string with format elements supported by strftime.  */
389
390 static char *
391 fmttime (time_t t, const char *fmt)
392 {
393   static char output[32];
394   struct tm *tm = localtime(&t);
395   if (!tm)
396     abort ();
397   if (!strftime(output, sizeof(output), fmt, tm))
398     abort ();
399   return output;
400 }
401
402 /* Return pointer to a static char[] buffer in which zero-terminated
403    string-representation of TM (in form hh:mm:ss) is printed.
404
405    If TM is NULL, the current time will be used.  */
406
407 char *
408 time_str (time_t t)
409 {
410   return fmttime(t, "%H:%M:%S");
411 }
412
413 /* Like the above, but include the date: YYYY-MM-DD hh:mm:ss.  */
414
415 char *
416 datetime_str (time_t t)
417 {
418   return fmttime(t, "%Y-%m-%d %H:%M:%S");
419 }
420 \f
421 /* The Windows versions of the following two functions are defined in
422    mswindows.c. On MSDOS this function should never be called. */
423
424 #ifdef __VMS
425
426 void
427 fork_to_background (void)
428 {
429   return;
430 }
431
432 #else /* def __VMS */
433
434 #if !defined(WINDOWS) && !defined(MSDOS)
435 void
436 fork_to_background (void)
437 {
438   pid_t pid;
439   /* Whether we arrange our own version of opt.lfilename here.  */
440   bool logfile_changed = false;
441
442   if (!opt.lfilename && (!opt.quiet || opt.server_response))
443     {
444       /* We must create the file immediately to avoid either a race
445          condition (which arises from using unique_name and failing to
446          use fopen_excl) or lying to the user about the log file name
447          (which arises from using unique_name, printing the name, and
448          using fopen_excl later on.)  */
449       FILE *new_log_fp = unique_create (DEFAULT_LOGFILE, false, &opt.lfilename);
450       if (new_log_fp)
451         {
452           logfile_changed = true;
453           fclose (new_log_fp);
454         }
455     }
456   pid = fork ();
457   if (pid < 0)
458     {
459       /* parent, error */
460       perror ("fork");
461       exit (1);
462     }
463   else if (pid != 0)
464     {
465       /* parent, no error */
466       printf (_("Continuing in background, pid %d.\n"), (int) pid);
467       if (logfile_changed)
468         printf (_("Output will be written to %s.\n"), quote (opt.lfilename));
469       exit (0);                 /* #### should we use _exit()? */
470     }
471
472   /* child: give up the privileges and keep running. */
473   setsid ();
474   freopen ("/dev/null", "r", stdin);
475   freopen ("/dev/null", "w", stdout);
476   freopen ("/dev/null", "w", stderr);
477 }
478 #endif /* !WINDOWS && !MSDOS */
479
480 #endif /* def __VMS [else] */
481
482 \f
483 /* "Touch" FILE, i.e. make its mtime ("modified time") equal the time
484    specified with TM.  The atime ("access time") is set to the current
485    time.  */
486
487 void
488 touch (const char *file, time_t tm)
489 {
490   struct timespec timespecs[2];
491   int fd;
492
493   fd = open (file, O_WRONLY);
494   if (fd < 0)
495     {
496       logprintf (LOG_NOTQUIET, "open(%s): %s\n", file, strerror (errno));
497       return;
498     }
499
500   timespecs[0].tv_sec = time (NULL);
501   timespecs[0].tv_nsec = 0L;
502   timespecs[1].tv_sec = tm;
503   timespecs[1].tv_nsec = 0L;
504
505   if (futimens (fd, timespecs) == -1)
506     logprintf (LOG_NOTQUIET, "futimens(%s): %s\n", file, strerror (errno));
507
508   close (fd);
509 }
510
511 /* Checks if FILE is a symbolic link, and removes it if it is.  Does
512    nothing under MS-Windows.  */
513 int
514 remove_link (const char *file)
515 {
516   int err = 0;
517   struct_stat st;
518
519   if (lstat (file, &st) == 0 && S_ISLNK (st.st_mode))
520     {
521       DEBUGP (("Unlinking %s (symlink).\n", file));
522       err = unlink (file);
523       if (err != 0)
524         logprintf (LOG_VERBOSE, _("Failed to unlink symlink %s: %s\n"),
525                    quote (file), strerror (errno));
526     }
527   return err;
528 }
529
530 /* Does FILENAME exist?  This is quite a lousy implementation, since
531    it supplies no error codes -- only a yes-or-no answer.  Thus it
532    will return that a file does not exist if, e.g., the directory is
533    unreadable.  I don't mind it too much currently, though.  The
534    proper way should, of course, be to have a third, error state,
535    other than true/false, but that would introduce uncalled-for
536    additional complexity to the callers.  */
537 bool
538 file_exists_p (const char *filename)
539 {
540 #ifdef HAVE_ACCESS
541   return access (filename, F_OK) >= 0;
542 #else
543   struct_stat buf;
544   return stat (filename, &buf) >= 0;
545 #endif
546 }
547
548 /* Returns 0 if PATH is a directory, 1 otherwise (any kind of file).
549    Returns 0 on error.  */
550 bool
551 file_non_directory_p (const char *path)
552 {
553   struct_stat buf;
554   /* Use lstat() rather than stat() so that symbolic links pointing to
555      directories can be identified correctly.  */
556   if (lstat (path, &buf) != 0)
557     return false;
558   return S_ISDIR (buf.st_mode) ? false : true;
559 }
560
561 /* Return the size of file named by FILENAME, or -1 if it cannot be
562    opened or seeked into. */
563 wgint
564 file_size (const char *filename)
565 {
566 #if defined(HAVE_FSEEKO) && defined(HAVE_FTELLO)
567   wgint size;
568   /* We use fseek rather than stat to determine the file size because
569      that way we can also verify that the file is readable without
570      explicitly checking for permissions.  Inspired by the POST patch
571      by Arnaud Wylie.  */
572   FILE *fp = fopen (filename, "rb");
573   if (!fp)
574     return -1;
575   fseeko (fp, 0, SEEK_END);
576   size = ftello (fp);
577   fclose (fp);
578   return size;
579 #else
580   struct_stat st;
581   if (stat (filename, &st) < 0)
582     return -1;
583   return st.st_size;
584 #endif
585 }
586
587 /* 2005-02-19 SMS.
588    If no UNIQ_SEP is defined (as on VMS), have unique_name() return the
589    original name.  With the VMS file systems' versioning, everything
590    should be fine, and appending ".NN" just causes trouble.
591 */
592
593 #ifdef UNIQ_SEP
594
595 /* stat file names named PREFIX.1, PREFIX.2, etc., until one that
596    doesn't exist is found.  Return a freshly allocated copy of the
597    unused file name.  */
598
599 static char *
600 unique_name_1 (const char *prefix)
601 {
602   int count = 1;
603   int plen = strlen (prefix);
604   char *template = (char *)alloca (plen + 1 + 24);
605   char *template_tail = template + plen;
606
607   memcpy (template, prefix, plen);
608   *template_tail++ = UNIQ_SEP;
609
610   do
611     number_to_string (template_tail, count++);
612   while (file_exists_p (template));
613
614   return xstrdup (template);
615 }
616
617 /* Return a unique file name, based on FILE.
618
619    More precisely, if FILE doesn't exist, it is returned unmodified.
620    If not, FILE.1 is tried, then FILE.2, etc.  The first FILE.<number>
621    file name that doesn't exist is returned.
622
623    2005-02-19 SMS.  "." is now UNIQ_SEP, and may be different.
624
625    The resulting file is not created, only verified that it didn't
626    exist at the point in time when the function was called.
627    Therefore, where security matters, don't rely that the file created
628    by this function exists until you open it with O_EXCL or
629    equivalent.
630
631    If ALLOW_PASSTHROUGH is 0, it always returns a freshly allocated
632    string.  Otherwise, it may return FILE if the file doesn't exist
633    (and therefore doesn't need changing).  */
634
635 char *
636 unique_name (const char *file, bool allow_passthrough)
637 {
638   /* If the FILE itself doesn't exist, return it without
639      modification. */
640   if (!file_exists_p (file))
641     return allow_passthrough ? (char *)file : xstrdup (file);
642
643   /* Otherwise, find a numeric suffix that results in unused file name
644      and return it.  */
645   return unique_name_1 (file);
646 }
647
648 #else /* def UNIQ_SEP */
649
650 /* Dummy unique_name() for VMS.  Return the original name as easily as
651    possible.
652 */
653 char *
654 unique_name (const char *file, bool allow_passthrough)
655 {
656   /* Return the FILE itself, without modification, irregardful. */
657   return allow_passthrough ? (char *)file : xstrdup (file);
658 }
659
660 #endif /* def UNIQ_SEP [else] */
661
662 /* Create a file based on NAME, except without overwriting an existing
663    file with that name.  Providing O_EXCL is correctly implemented,
664    this function does not have the race condition associated with
665    opening the file returned by unique_name.  */
666
667 FILE *
668 unique_create (const char *name, bool binary, char **opened_name)
669 {
670   /* unique file name, based on NAME */
671   char *uname = unique_name (name, false);
672   FILE *fp;
673   while ((fp = fopen_excl (uname, binary)) == NULL && errno == EEXIST)
674     {
675       xfree (uname);
676       uname = unique_name (name, false);
677     }
678   if (opened_name && fp != NULL)
679     {
680       if (fp)
681         *opened_name = uname;
682       else
683         {
684           *opened_name = NULL;
685           xfree (uname);
686         }
687     }
688   else
689     xfree (uname);
690   return fp;
691 }
692
693 /* Open the file for writing, with the addition that the file is
694    opened "exclusively".  This means that, if the file already exists,
695    this function will *fail* and errno will be set to EEXIST.  If
696    BINARY is set, the file will be opened in binary mode, equivalent
697    to fopen's "wb".
698
699    If opening the file fails for any reason, including the file having
700    previously existed, this function returns NULL and sets errno
701    appropriately.  */
702
703 FILE *
704 fopen_excl (const char *fname, int binary)
705 {
706   int fd;
707 #ifdef O_EXCL
708
709 /* 2005-04-14 SMS.
710    VMS lacks O_BINARY, but makes up for it in weird and wonderful ways.
711    It also has file versions which obviate all the O_EXCL effort.
712    O_TRUNC (something of a misnomer) requests a new version.
713 */
714 # ifdef __VMS
715 /* Common open() optional arguments:
716    sequential access only, access callback function.
717 */
718 #  define OPEN_OPT_ARGS "fop=sqo", "acc", acc_cb, &open_id
719
720   int open_id;
721   int flags = O_WRONLY | O_CREAT | O_TRUNC;
722
723   if (binary > 1)
724     {
725       open_id = 11;
726       fd = open( fname,                 /* File name. */
727        flags,                           /* Flags. */
728        0777,                            /* Mode for default protection. */
729        "ctx=bin,stm",                   /* Binary, stream access. */
730        "rfm=stmlf",                     /* Stream_LF. */
731        OPEN_OPT_ARGS);                  /* Access callback. */
732     }
733   else if (binary)
734     {
735       open_id = 12;
736       fd = open( fname,                 /* File name. */
737        flags,                           /* Flags. */
738        0777,                            /* Mode for default protection. */
739        "ctx=bin,stm",                   /* Binary, stream access. */
740        "rfm=fix",                       /* Fixed-length, */
741        "mrs=512",                       /* 512-byte records. */
742        OPEN_OPT_ARGS);                  /* Access callback. */
743     }
744   else
745     {
746       open_id = 13;
747       fd = open( fname,                 /* File name. */
748        flags,                           /* Flags. */
749        0777,                            /* Mode for default protection.
750 */
751        "rfm=stmlf",                     /* Stream_LF. */
752        OPEN_OPT_ARGS);                  /* Access callback. */
753     }
754 # else /* def __VMS */
755   int flags = O_WRONLY | O_CREAT | O_EXCL;
756 # ifdef O_BINARY
757   if (binary)
758     flags |= O_BINARY;
759 # endif
760   fd = open (fname, flags, 0666);
761 # endif /* def __VMS [else] */
762
763   if (fd < 0)
764     return NULL;
765   return fdopen (fd, binary ? "wb" : "w");
766 #else  /* not O_EXCL */
767   /* Manually check whether the file exists.  This is prone to race
768      conditions, but systems without O_EXCL haven't deserved
769      better.  */
770   if (file_exists_p (fname))
771     {
772       errno = EEXIST;
773       return NULL;
774     }
775   return fopen (fname, binary ? "wb" : "w");
776 #endif /* not O_EXCL */
777 }
778 \f
779 /* Create DIRECTORY.  If some of the pathname components of DIRECTORY
780    are missing, create them first.  In case any mkdir() call fails,
781    return its error status.  Returns 0 on successful completion.
782
783    The behaviour of this function should be identical to the behaviour
784    of `mkdir -p' on systems where mkdir supports the `-p' option.  */
785 int
786 make_directory (const char *directory)
787 {
788   int i, ret, quit = 0;
789   char *dir;
790
791   /* Make a copy of dir, to be able to write to it.  Otherwise, the
792      function is unsafe if called with a read-only char *argument.  */
793   STRDUP_ALLOCA (dir, directory);
794
795   /* If the first character of dir is '/', skip it (and thus enable
796      creation of absolute-pathname directories.  */
797   for (i = (*dir == '/'); 1; ++i)
798     {
799       for (; dir[i] && dir[i] != '/'; i++)
800         ;
801       if (!dir[i])
802         quit = 1;
803       dir[i] = '\0';
804       /* Check whether the directory already exists.  Allow creation of
805          of intermediate directories to fail, as the initial path components
806          are not necessarily directories!  */
807       if (!file_exists_p (dir))
808         ret = mkdir (dir, 0777);
809       else
810         ret = 0;
811       if (quit)
812         break;
813       else
814         dir[i] = '/';
815     }
816   return ret;
817 }
818
819 /* Merge BASE with FILE.  BASE can be a directory or a file name, FILE
820    should be a file name.
821
822    file_merge("/foo/bar", "baz")  => "/foo/baz"
823    file_merge("/foo/bar/", "baz") => "/foo/bar/baz"
824    file_merge("foo", "bar")       => "bar"
825
826    In other words, it's a simpler and gentler version of uri_merge.  */
827
828 char *
829 file_merge (const char *base, const char *file)
830 {
831   char *result;
832   const char *cut = (const char *)strrchr (base, '/');
833
834   if (!cut)
835     return xstrdup (file);
836
837   result = xmalloc (cut - base + 1 + strlen (file) + 1);
838   memcpy (result, base, cut - base);
839   result[cut - base] = '/';
840   strcpy (result + (cut - base) + 1, file);
841
842   return result;
843 }
844 \f
845 /* Like fnmatch, but performs a case-insensitive match.  */
846
847 int
848 fnmatch_nocase (const char *pattern, const char *string, int flags)
849 {
850 #ifdef FNM_CASEFOLD
851   /* The FNM_CASEFOLD flag started as a GNU extension, but it is now
852      also present on *BSD platforms, and possibly elsewhere.  */
853   return fnmatch (pattern, string, flags | FNM_CASEFOLD);
854 #else
855   /* Turn PATTERN and STRING to lower case and call fnmatch on them. */
856   char *patcopy = (char *) alloca (strlen (pattern) + 1);
857   char *strcopy = (char *) alloca (strlen (string) + 1);
858   char *p;
859   for (p = patcopy; *pattern; pattern++, p++)
860     *p = c_tolower (*pattern);
861   *p = '\0';
862   for (p = strcopy; *string; string++, p++)
863     *p = c_tolower (*string);
864   *p = '\0';
865   return fnmatch (patcopy, strcopy, flags);
866 #endif
867 }
868
869 static bool in_acclist (const char *const *, const char *, bool);
870
871 /* Determine whether a file is acceptable to be followed, according to
872    lists of patterns to accept/reject.  */
873 bool
874 acceptable (const char *s)
875 {
876   int l = strlen (s);
877
878   while (l && s[l] != '/')
879     --l;
880   if (s[l] == '/')
881     s += (l + 1);
882   if (opt.accepts)
883     {
884       if (opt.rejects)
885         return (in_acclist ((const char *const *)opt.accepts, s, true)
886                 && !in_acclist ((const char *const *)opt.rejects, s, true));
887       else
888         return in_acclist ((const char *const *)opt.accepts, s, true);
889     }
890   else if (opt.rejects)
891     return !in_acclist ((const char *const *)opt.rejects, s, true);
892   return true;
893 }
894
895 /* Check if D2 is a subdirectory of D1.  E.g. if D1 is `/something', subdir_p()
896    will return true if and only if D2 begins with `/something/' or is exactly
897    '/something'.  */
898 bool
899 subdir_p (const char *d1, const char *d2)
900 {
901   if (*d1 == '\0')
902     return true;
903   if (!opt.ignore_case)
904     for (; *d1 && *d2 && (*d1 == *d2); ++d1, ++d2)
905       ;
906   else
907     for (; *d1 && *d2 && (c_tolower (*d1) == c_tolower (*d2)); ++d1, ++d2)
908       ;
909
910   return *d1 == '\0' && (*d2 == '\0' || *d2 == '/');
911 }
912
913 /* Iterate through DIRLIST (which must be NULL-terminated), and return the
914    first element that matches DIR, through wildcards or front comparison (as
915    appropriate).  */
916 static bool
917 dir_matches_p (char **dirlist, const char *dir)
918 {
919   char **x;
920   int (*matcher) (const char *, const char *, int)
921     = opt.ignore_case ? fnmatch_nocase : fnmatch;
922
923   for (x = dirlist; *x; x++)
924     {
925       /* Remove leading '/' */
926       char *p = *x + (**x == '/');
927       if (has_wildcards_p (p))
928         {
929           if (matcher (p, dir, FNM_PATHNAME) == 0)
930             break;
931         }
932       else
933         {
934           if (subdir_p (p, dir))
935             break;
936         }
937     }
938
939   return *x ? true : false;
940 }
941
942 /* Returns whether DIRECTORY is acceptable for download, wrt the
943    include/exclude lists.
944
945    The leading `/' is ignored in paths; relative and absolute paths
946    may be freely intermixed.  */
947
948 bool
949 accdir (const char *directory)
950 {
951   /* Remove starting '/'.  */
952   if (*directory == '/')
953     ++directory;
954   if (opt.includes)
955     {
956       if (!dir_matches_p (opt.includes, directory))
957         return false;
958     }
959   if (opt.excludes)
960     {
961       if (dir_matches_p (opt.excludes, directory))
962         return false;
963     }
964   return true;
965 }
966
967 /* Return true if STRING ends with TAIL.  For instance:
968
969    match_tail ("abc", "bc", false)  -> 1
970    match_tail ("abc", "ab", false)  -> 0
971    match_tail ("abc", "abc", false) -> 1
972
973    If FOLD_CASE is true, the comparison will be case-insensitive.  */
974
975 bool
976 match_tail (const char *string, const char *tail, bool fold_case)
977 {
978   int i, j;
979
980   /* We want this to be fast, so we code two loops, one with
981      case-folding, one without. */
982
983   if (!fold_case)
984     {
985       for (i = strlen (string), j = strlen (tail); i >= 0 && j >= 0; i--, j--)
986         if (string[i] != tail[j])
987           break;
988     }
989   else
990     {
991       for (i = strlen (string), j = strlen (tail); i >= 0 && j >= 0; i--, j--)
992         if (c_tolower (string[i]) != c_tolower (tail[j]))
993           break;
994     }
995
996   /* If the tail was exhausted, the match was succesful.  */
997   if (j == -1)
998     return true;
999   else
1000     return false;
1001 }
1002
1003 /* Checks whether string S matches each element of ACCEPTS.  A list
1004    element are matched either with fnmatch() or match_tail(),
1005    according to whether the element contains wildcards or not.
1006
1007    If the BACKWARD is false, don't do backward comparison -- just compare
1008    them normally.  */
1009 static bool
1010 in_acclist (const char *const *accepts, const char *s, bool backward)
1011 {
1012   for (; *accepts; accepts++)
1013     {
1014       if (has_wildcards_p (*accepts))
1015         {
1016           int res = opt.ignore_case
1017             ? fnmatch_nocase (*accepts, s, 0) : fnmatch (*accepts, s, 0);
1018           /* fnmatch returns 0 if the pattern *does* match the string.  */
1019           if (res == 0)
1020             return true;
1021         }
1022       else
1023         {
1024           if (backward)
1025             {
1026               if (match_tail (s, *accepts, opt.ignore_case))
1027                 return true;
1028             }
1029           else
1030             {
1031               int cmp = opt.ignore_case
1032                 ? strcasecmp (s, *accepts) : strcmp (s, *accepts);
1033               if (cmp == 0)
1034                 return true;
1035             }
1036         }
1037     }
1038   return false;
1039 }
1040
1041 /* Return the location of STR's suffix (file extension).  Examples:
1042    suffix ("foo.bar")       -> "bar"
1043    suffix ("foo.bar.baz")   -> "baz"
1044    suffix ("/foo/bar")      -> NULL
1045    suffix ("/foo.bar/baz")  -> NULL  */
1046 char *
1047 suffix (const char *str)
1048 {
1049   int i;
1050
1051   for (i = strlen (str); i && str[i] != '/' && str[i] != '.'; i--)
1052     ;
1053
1054   if (str[i++] == '.')
1055     return (char *)str + i;
1056   else
1057     return NULL;
1058 }
1059
1060 /* Return true if S contains globbing wildcards (`*', `?', `[' or
1061    `]').  */
1062
1063 bool
1064 has_wildcards_p (const char *s)
1065 {
1066   for (; *s; s++)
1067     if (*s == '*' || *s == '?' || *s == '[' || *s == ']')
1068       return true;
1069   return false;
1070 }
1071
1072 /* Return true if FNAME ends with a typical HTML suffix.  The
1073    following (case-insensitive) suffixes are presumed to be HTML
1074    files:
1075
1076      html
1077      htm
1078      ?html (`?' matches one character)
1079
1080    #### CAVEAT.  This is not necessarily a good indication that FNAME
1081    refers to a file that contains HTML!  */
1082 bool
1083 has_html_suffix_p (const char *fname)
1084 {
1085   char *suf;
1086
1087   if ((suf = suffix (fname)) == NULL)
1088     return false;
1089   if (!strcasecmp (suf, "html"))
1090     return true;
1091   if (!strcasecmp (suf, "htm"))
1092     return true;
1093   if (suf[0] && !strcasecmp (suf + 1, "html"))
1094     return true;
1095   return false;
1096 }
1097
1098 /* Read a line from FP and return the pointer to freshly allocated
1099    storage.  The storage space is obtained through malloc() and should
1100    be freed with free() when it is no longer needed.
1101
1102    The length of the line is not limited, except by available memory.
1103    The newline character at the end of line is retained.  The line is
1104    terminated with a zero character.
1105
1106    After end-of-file is encountered without anything being read, NULL
1107    is returned.  NULL is also returned on error.  To distinguish
1108    between these two cases, use the stdio function ferror().  */
1109
1110 char *
1111 read_whole_line (FILE *fp)
1112 {
1113   int length = 0;
1114   int bufsize = 82;
1115   char *line = xmalloc (bufsize);
1116
1117   while (fgets (line + length, bufsize - length, fp))
1118     {
1119       length += strlen (line + length);
1120       if (length == 0)
1121         /* Possible for example when reading from a binary file where
1122            a line begins with \0.  */
1123         continue;
1124
1125       if (line[length - 1] == '\n')
1126         break;
1127
1128       /* fgets() guarantees to read the whole line, or to use up the
1129          space we've given it.  We can double the buffer
1130          unconditionally.  */
1131       bufsize <<= 1;
1132       line = xrealloc (line, bufsize);
1133     }
1134   if (length == 0 || ferror (fp))
1135     {
1136       xfree (line);
1137       return NULL;
1138     }
1139   if (length + 1 < bufsize)
1140     /* Relieve the memory from our exponential greediness.  We say
1141        `length + 1' because the terminating \0 is not included in
1142        LENGTH.  We don't need to zero-terminate the string ourselves,
1143        though, because fgets() does that.  */
1144     line = xrealloc (line, length + 1);
1145   return line;
1146 }
1147 \f
1148 /* Read FILE into memory.  A pointer to `struct file_memory' are
1149    returned; use struct element `content' to access file contents, and
1150    the element `length' to know the file length.  `content' is *not*
1151    zero-terminated, and you should *not* read or write beyond the [0,
1152    length) range of characters.
1153
1154    After you are done with the file contents, call wget_read_file_free to
1155    release the memory.
1156
1157    Depending on the operating system and the type of file that is
1158    being read, wget_read_file() either mmap's the file into memory, or
1159    reads the file into the core using read().
1160
1161    If file is named "-", fileno(stdin) is used for reading instead.
1162    If you want to read from a real file named "-", use "./-" instead.  */
1163
1164 struct file_memory *
1165 wget_read_file (const char *file)
1166 {
1167   int fd;
1168   struct file_memory *fm;
1169   long size;
1170   bool inhibit_close = false;
1171
1172   /* Some magic in the finest tradition of Perl and its kin: if FILE
1173      is "-", just use stdin.  */
1174   if (HYPHENP (file))
1175     {
1176       fd = fileno (stdin);
1177       inhibit_close = true;
1178       /* Note that we don't inhibit mmap() in this case.  If stdin is
1179          redirected from a regular file, mmap() will still work.  */
1180     }
1181   else
1182     fd = open (file, O_RDONLY);
1183   if (fd < 0)
1184     return NULL;
1185   fm = xnew (struct file_memory);
1186
1187 #ifdef HAVE_MMAP
1188   {
1189     struct_fstat buf;
1190     if (fstat (fd, &buf) < 0)
1191       goto mmap_lose;
1192     fm->length = buf.st_size;
1193     /* NOTE: As far as I know, the callers of this function never
1194        modify the file text.  Relying on this would enable us to
1195        specify PROT_READ and MAP_SHARED for a marginal gain in
1196        efficiency, but at some cost to generality.  */
1197     fm->content = mmap (NULL, fm->length, PROT_READ | PROT_WRITE,
1198                         MAP_PRIVATE, fd, 0);
1199     if (fm->content == (char *)MAP_FAILED)
1200       goto mmap_lose;
1201     if (!inhibit_close)
1202       close (fd);
1203
1204     fm->mmap_p = 1;
1205     return fm;
1206   }
1207
1208  mmap_lose:
1209   /* The most common reason why mmap() fails is that FD does not point
1210      to a plain file.  However, it's also possible that mmap() doesn't
1211      work for a particular type of file.  Therefore, whenever mmap()
1212      fails, we just fall back to the regular method.  */
1213 #endif /* HAVE_MMAP */
1214
1215   fm->length = 0;
1216   size = 512;                   /* number of bytes fm->contents can
1217                                    hold at any given time. */
1218   fm->content = xmalloc (size);
1219   while (1)
1220     {
1221       wgint nread;
1222       if (fm->length > size / 2)
1223         {
1224           /* #### I'm not sure whether the whole exponential-growth
1225              thing makes sense with kernel read.  On Linux at least,
1226              read() refuses to read more than 4K from a file at a
1227              single chunk anyway.  But other Unixes might optimize it
1228              better, and it doesn't *hurt* anything, so I'm leaving
1229              it.  */
1230
1231           /* Normally, we grow SIZE exponentially to make the number
1232              of calls to read() and realloc() logarithmic in relation
1233              to file size.  However, read() can read an amount of data
1234              smaller than requested, and it would be unreasonable to
1235              double SIZE every time *something* was read.  Therefore,
1236              we double SIZE only when the length exceeds half of the
1237              entire allocated size.  */
1238           size <<= 1;
1239           fm->content = xrealloc (fm->content, size);
1240         }
1241       nread = read (fd, fm->content + fm->length, size - fm->length);
1242       if (nread > 0)
1243         /* Successful read. */
1244         fm->length += nread;
1245       else if (nread < 0)
1246         /* Error. */
1247         goto lose;
1248       else
1249         /* EOF */
1250         break;
1251     }
1252   if (!inhibit_close)
1253     close (fd);
1254   if (size > fm->length && fm->length != 0)
1255     /* Due to exponential growth of fm->content, the allocated region
1256        might be much larger than what is actually needed.  */
1257     fm->content = xrealloc (fm->content, fm->length);
1258   fm->mmap_p = 0;
1259   return fm;
1260
1261  lose:
1262   if (!inhibit_close)
1263     close (fd);
1264   xfree (fm->content);
1265   xfree (fm);
1266   return NULL;
1267 }
1268
1269 /* Release the resources held by FM.  Specifically, this calls
1270    munmap() or xfree() on fm->content, depending whether mmap or
1271    malloc/read were used to read in the file.  It also frees the
1272    memory needed to hold the FM structure itself.  */
1273
1274 void
1275 wget_read_file_free (struct file_memory *fm)
1276 {
1277 #ifdef HAVE_MMAP
1278   if (fm->mmap_p)
1279     {
1280       munmap (fm->content, fm->length);
1281     }
1282   else
1283 #endif
1284     {
1285       xfree (fm->content);
1286     }
1287   xfree (fm);
1288 }
1289 \f
1290 /* Free the pointers in a NULL-terminated vector of pointers, then
1291    free the pointer itself.  */
1292 void
1293 free_vec (char **vec)
1294 {
1295   if (vec)
1296     {
1297       char **p = vec;
1298       while (*p)
1299         xfree (*p++);
1300       xfree (vec);
1301     }
1302 }
1303
1304 /* Append vector V2 to vector V1.  The function frees V2 and
1305    reallocates V1 (thus you may not use the contents of neither
1306    pointer after the call).  If V1 is NULL, V2 is returned.  */
1307 char **
1308 merge_vecs (char **v1, char **v2)
1309 {
1310   int i, j;
1311
1312   if (!v1)
1313     return v2;
1314   if (!v2)
1315     return v1;
1316   if (!*v2)
1317     {
1318       /* To avoid j == 0 */
1319       xfree (v2);
1320       return v1;
1321     }
1322   /* Count v1.  */
1323   for (i = 0; v1[i]; i++)
1324     ;
1325   /* Count v2.  */
1326   for (j = 0; v2[j]; j++)
1327     ;
1328   /* Reallocate v1.  */
1329   v1 = xrealloc (v1, (i + j + 1) * sizeof (char **));
1330   memcpy (v1 + i, v2, (j + 1) * sizeof (char *));
1331   xfree (v2);
1332   return v1;
1333 }
1334
1335 /* Append a freshly allocated copy of STR to VEC.  If VEC is NULL, it
1336    is allocated as needed.  Return the new value of the vector. */
1337
1338 char **
1339 vec_append (char **vec, const char *str)
1340 {
1341   int cnt;                      /* count of vector elements, including
1342                                    the one we're about to append */
1343   if (vec != NULL)
1344     {
1345       for (cnt = 0; vec[cnt]; cnt++)
1346         ;
1347       ++cnt;
1348     }
1349   else
1350     cnt = 1;
1351   /* Reallocate the array to fit the new element and the NULL. */
1352   vec = xrealloc (vec, (cnt + 1) * sizeof (char *));
1353   /* Append a copy of STR to the vector. */
1354   vec[cnt - 1] = xstrdup (str);
1355   vec[cnt] = NULL;
1356   return vec;
1357 }
1358 \f
1359 /* Sometimes it's useful to create "sets" of strings, i.e. special
1360    hash tables where you want to store strings as keys and merely
1361    query for their existence.  Here is a set of utility routines that
1362    makes that transparent.  */
1363
1364 void
1365 string_set_add (struct hash_table *ht, const char *s)
1366 {
1367   /* First check whether the set element already exists.  If it does,
1368      do nothing so that we don't have to free() the old element and
1369      then strdup() a new one.  */
1370   if (hash_table_contains (ht, s))
1371     return;
1372
1373   /* We use "1" as value.  It provides us a useful and clear arbitrary
1374      value, and it consumes no memory -- the pointers to the same
1375      string "1" will be shared by all the key-value pairs in all `set'
1376      hash tables.  */
1377   hash_table_put (ht, xstrdup (s), "1");
1378 }
1379
1380 /* Synonym for hash_table_contains... */
1381
1382 int
1383 string_set_contains (struct hash_table *ht, const char *s)
1384 {
1385   return hash_table_contains (ht, s);
1386 }
1387
1388 /* Convert the specified string set to array.  ARRAY should be large
1389    enough to hold hash_table_count(ht) char pointers.  */
1390
1391 void string_set_to_array (struct hash_table *ht, char **array)
1392 {
1393   hash_table_iterator iter;
1394   for (hash_table_iterate (ht, &iter); hash_table_iter_next (&iter); )
1395     *array++ = iter.key;
1396 }
1397
1398 /* Free the string set.  This frees both the storage allocated for
1399    keys and the actual hash table.  (hash_table_destroy would only
1400    destroy the hash table.)  */
1401
1402 void
1403 string_set_free (struct hash_table *ht)
1404 {
1405   hash_table_iterator iter;
1406   for (hash_table_iterate (ht, &iter); hash_table_iter_next (&iter); )
1407     xfree (iter.key);
1408   hash_table_destroy (ht);
1409 }
1410
1411 /* Utility function: simply call xfree() on all keys and values of HT.  */
1412
1413 void
1414 free_keys_and_values (struct hash_table *ht)
1415 {
1416   hash_table_iterator iter;
1417   for (hash_table_iterate (ht, &iter); hash_table_iter_next (&iter); )
1418     {
1419       xfree (iter.key);
1420       xfree (iter.value);
1421     }
1422 }
1423 \f
1424 /* Get digit grouping data for thousand separors by calling
1425    localeconv().  The data includes separator string and grouping info
1426    and is cached after the first call to the function.
1427
1428    In locales that don't set a thousand separator (such as the "C"
1429    locale), this forces it to be ",".  We are now only showing
1430    thousand separators in one place, so this shouldn't be a problem in
1431    practice.  */
1432
1433 static void
1434 get_grouping_data (const char **sep, const char **grouping)
1435 {
1436   static const char *cached_sep;
1437   static const char *cached_grouping;
1438   static bool initialized;
1439   if (!initialized)
1440     {
1441       /* Get the grouping info from the locale. */
1442       struct lconv *lconv = localeconv ();
1443       cached_sep = lconv->thousands_sep;
1444       cached_grouping = lconv->grouping;
1445 #if ! USE_NLS_PROGRESS_BAR
1446       /* We can't count column widths, so ensure that the separator
1447        * is single-byte only (let check below determine what byte). */
1448       if (strlen(cached_sep) > 1)
1449         cached_sep = "";
1450 #endif
1451       if (!*cached_sep)
1452         {
1453           /* Many locales (such as "C" or "hr_HR") don't specify
1454              grouping, which we still want to use it for legibility.
1455              In those locales set the sep char to ',', unless that
1456              character is used for decimal point, in which case set it
1457              to ".".  */
1458           if (*lconv->decimal_point != ',')
1459             cached_sep = ",";
1460           else
1461             cached_sep = ".";
1462           cached_grouping = "\x03";
1463         }
1464       initialized = true;
1465     }
1466   *sep = cached_sep;
1467   *grouping = cached_grouping;
1468 }
1469
1470 /* Return a printed representation of N with thousand separators.
1471    This should respect locale settings, with the exception of the "C"
1472    locale which mandates no separator, but we use one anyway.
1473
1474    Unfortunately, we cannot use %'d (in fact it would be %'j) to get
1475    the separators because it's too non-portable, and it's hard to test
1476    for this feature at configure time.  Besides, it wouldn't display
1477    separators in the "C" locale, still used by many Unix users.  */
1478
1479 const char *
1480 with_thousand_seps (wgint n)
1481 {
1482   static char outbuf[48];
1483   char *p = outbuf + sizeof outbuf;
1484
1485   /* Info received from locale */
1486   const char *grouping, *sep;
1487   int seplen;
1488
1489   /* State information */
1490   int i = 0, groupsize;
1491   const char *atgroup;
1492
1493   bool negative = n < 0;
1494
1495   /* Initialize grouping data. */
1496   get_grouping_data (&sep, &grouping);
1497   seplen = strlen (sep);
1498   atgroup = grouping;
1499   groupsize = *atgroup++;
1500
1501   /* This would overflow on WGINT_MIN, but printing negative numbers
1502      is not an important goal of this fuinction.  */
1503   if (negative)
1504     n = -n;
1505
1506   /* Write the number into the buffer, backwards, inserting the
1507      separators as necessary.  */
1508   *--p = '\0';
1509   while (1)
1510     {
1511       *--p = n % 10 + '0';
1512       n /= 10;
1513       if (n == 0)
1514         break;
1515       /* Prepend SEP to every groupsize'd digit and get new groupsize.  */
1516       if (++i == groupsize)
1517         {
1518           if (seplen == 1)
1519             *--p = *sep;
1520           else
1521             memcpy (p -= seplen, sep, seplen);
1522           i = 0;
1523           if (*atgroup)
1524             groupsize = *atgroup++;
1525         }
1526     }
1527   if (negative)
1528     *--p = '-';
1529
1530   return p;
1531 }
1532
1533 /* N, a byte quantity, is converted to a human-readable abberviated
1534    form a la sizes printed by `ls -lh'.  The result is written to a
1535    static buffer, a pointer to which is returned.
1536
1537    Unlike `with_thousand_seps', this approximates to the nearest unit.
1538    Quoting GNU libit: "Most people visually process strings of 3-4
1539    digits effectively, but longer strings of digits are more prone to
1540    misinterpretation.  Hence, converting to an abbreviated form
1541    usually improves readability."
1542
1543    This intentionally uses kilobyte (KB), megabyte (MB), etc. in their
1544    original computer-related meaning of "powers of 1024".  We don't
1545    use the "*bibyte" names invented in 1998, and seldom used in
1546    practice.  Wikipedia's entry on "binary prefix" discusses this in
1547    some detail.  */
1548
1549 char *
1550 human_readable (HR_NUMTYPE n)
1551 {
1552   /* These suffixes are compatible with those of GNU `ls -lh'. */
1553   static char powers[] =
1554     {
1555       'K',                      /* kilobyte, 2^10 bytes */
1556       'M',                      /* megabyte, 2^20 bytes */
1557       'G',                      /* gigabyte, 2^30 bytes */
1558       'T',                      /* terabyte, 2^40 bytes */
1559       'P',                      /* petabyte, 2^50 bytes */
1560       'E',                      /* exabyte,  2^60 bytes */
1561     };
1562   static char buf[8];
1563   size_t i;
1564
1565   /* If the quantity is smaller than 1K, just print it. */
1566   if (n < 1024)
1567     {
1568       snprintf (buf, sizeof (buf), "%d", (int) n);
1569       return buf;
1570     }
1571
1572   /* Loop over powers, dividing N with 1024 in each iteration.  This
1573      works unchanged for all sizes of wgint, while still avoiding
1574      non-portable `long double' arithmetic.  */
1575   for (i = 0; i < countof (powers); i++)
1576     {
1577       /* At each iteration N is greater than the *subsequent* power.
1578          That way N/1024.0 produces a decimal number in the units of
1579          *this* power.  */
1580       if ((n / 1024) < 1024 || i == countof (powers) - 1)
1581         {
1582           double val = n / 1024.0;
1583           /* Print values smaller than 10 with one decimal digits, and
1584              others without any decimals.  */
1585           snprintf (buf, sizeof (buf), "%.*f%c",
1586                     val < 10 ? 1 : 0, val, powers[i]);
1587           return buf;
1588         }
1589       n /= 1024;
1590     }
1591   return NULL;                  /* unreached */
1592 }
1593
1594 /* Count the digits in the provided number.  Used to allocate space
1595    when printing numbers.  */
1596
1597 int
1598 numdigit (wgint number)
1599 {
1600   int cnt = 1;
1601   if (number < 0)
1602     ++cnt;                      /* accomodate '-' */
1603   while ((number /= 10) != 0)
1604     ++cnt;
1605   return cnt;
1606 }
1607
1608 #define PR(mask) *p++ = n / (mask) + '0'
1609
1610 /* DIGITS_<D> is used to print a D-digit number and should be called
1611    with mask==10^(D-1).  It prints n/mask (the first digit), reducing
1612    n to n%mask (the remaining digits), and calling DIGITS_<D-1>.
1613    Recursively this continues until DIGITS_1 is invoked.  */
1614
1615 #define DIGITS_1(mask) PR (mask)
1616 #define DIGITS_2(mask) PR (mask), n %= (mask), DIGITS_1 ((mask) / 10)
1617 #define DIGITS_3(mask) PR (mask), n %= (mask), DIGITS_2 ((mask) / 10)
1618 #define DIGITS_4(mask) PR (mask), n %= (mask), DIGITS_3 ((mask) / 10)
1619 #define DIGITS_5(mask) PR (mask), n %= (mask), DIGITS_4 ((mask) / 10)
1620 #define DIGITS_6(mask) PR (mask), n %= (mask), DIGITS_5 ((mask) / 10)
1621 #define DIGITS_7(mask) PR (mask), n %= (mask), DIGITS_6 ((mask) / 10)
1622 #define DIGITS_8(mask) PR (mask), n %= (mask), DIGITS_7 ((mask) / 10)
1623 #define DIGITS_9(mask) PR (mask), n %= (mask), DIGITS_8 ((mask) / 10)
1624 #define DIGITS_10(mask) PR (mask), n %= (mask), DIGITS_9 ((mask) / 10)
1625
1626 /* DIGITS_<11-20> are only used on machines with 64-bit wgints. */
1627
1628 #define DIGITS_11(mask) PR (mask), n %= (mask), DIGITS_10 ((mask) / 10)
1629 #define DIGITS_12(mask) PR (mask), n %= (mask), DIGITS_11 ((mask) / 10)
1630 #define DIGITS_13(mask) PR (mask), n %= (mask), DIGITS_12 ((mask) / 10)
1631 #define DIGITS_14(mask) PR (mask), n %= (mask), DIGITS_13 ((mask) / 10)
1632 #define DIGITS_15(mask) PR (mask), n %= (mask), DIGITS_14 ((mask) / 10)
1633 #define DIGITS_16(mask) PR (mask), n %= (mask), DIGITS_15 ((mask) / 10)
1634 #define DIGITS_17(mask) PR (mask), n %= (mask), DIGITS_16 ((mask) / 10)
1635 #define DIGITS_18(mask) PR (mask), n %= (mask), DIGITS_17 ((mask) / 10)
1636 #define DIGITS_19(mask) PR (mask), n %= (mask), DIGITS_18 ((mask) / 10)
1637
1638 /* Shorthand for casting to wgint. */
1639 #define W wgint
1640
1641 /* Print NUMBER to BUFFER in base 10.  This is equivalent to
1642    `sprintf(buffer, "%lld", (long long) number)', only typically much
1643    faster and portable to machines without long long.
1644
1645    The speedup may make a difference in programs that frequently
1646    convert numbers to strings.  Some implementations of sprintf,
1647    particularly the one in some versions of GNU libc, have been known
1648    to be quite slow when converting integers to strings.
1649
1650    Return the pointer to the location where the terminating zero was
1651    printed.  (Equivalent to calling buffer+strlen(buffer) after the
1652    function is done.)
1653
1654    BUFFER should be large enough to accept as many bytes as you expect
1655    the number to take up.  On machines with 64-bit wgints the maximum
1656    needed size is 24 bytes.  That includes the digits needed for the
1657    largest 64-bit number, the `-' sign in case it's negative, and the
1658    terminating '\0'.  */
1659
1660 char *
1661 number_to_string (char *buffer, wgint number)
1662 {
1663   char *p = buffer;
1664   wgint n = number;
1665
1666   int last_digit_char = 0;
1667
1668 #if (SIZEOF_WGINT != 4) && (SIZEOF_WGINT != 8)
1669   /* We are running in a very strange environment.  Leave the correct
1670      printing to sprintf.  */
1671   p += sprintf (buf, "%j", (intmax_t) (n));
1672 #else  /* (SIZEOF_WGINT == 4) || (SIZEOF_WGINT == 8) */
1673
1674   if (n < 0)
1675     {
1676       if (n < -WGINT_MAX)
1677         {
1678           /* n = -n would overflow because -n would evaluate to a
1679              wgint value larger than WGINT_MAX.  Need to make n
1680              smaller and handle the last digit separately.  */
1681           int last_digit = n % 10;
1682           /* The sign of n%10 is implementation-defined. */
1683           if (last_digit < 0)
1684             last_digit_char = '0' - last_digit;
1685           else
1686             last_digit_char = '0' + last_digit;
1687           /* After n is made smaller, -n will not overflow. */
1688           n /= 10;
1689         }
1690
1691       *p++ = '-';
1692       n = -n;
1693     }
1694
1695   /* Use the DIGITS_ macro appropriate for N's number of digits.  That
1696      way printing any N is fully open-coded without a loop or jump.
1697      (Also see description of DIGITS_*.)  */
1698
1699   if      (n < 10)                       DIGITS_1 (1);
1700   else if (n < 100)                      DIGITS_2 (10);
1701   else if (n < 1000)                     DIGITS_3 (100);
1702   else if (n < 10000)                    DIGITS_4 (1000);
1703   else if (n < 100000)                   DIGITS_5 (10000);
1704   else if (n < 1000000)                  DIGITS_6 (100000);
1705   else if (n < 10000000)                 DIGITS_7 (1000000);
1706   else if (n < 100000000)                DIGITS_8 (10000000);
1707   else if (n < 1000000000)               DIGITS_9 (100000000);
1708 #if SIZEOF_WGINT == 4
1709   /* wgint is 32 bits wide: no number has more than 10 digits. */
1710   else                                   DIGITS_10 (1000000000);
1711 #else
1712   /* wgint is 64 bits wide: handle numbers with 9-19 decimal digits.
1713      Constants are constructed by compile-time multiplication to avoid
1714      dealing with different notations for 64-bit constants
1715      (nL/nLL/nI64, depending on the compiler and architecture).  */
1716   else if (n < 10*(W)1000000000)         DIGITS_10 (1000000000);
1717   else if (n < 100*(W)1000000000)        DIGITS_11 (10*(W)1000000000);
1718   else if (n < 1000*(W)1000000000)       DIGITS_12 (100*(W)1000000000);
1719   else if (n < 10000*(W)1000000000)      DIGITS_13 (1000*(W)1000000000);
1720   else if (n < 100000*(W)1000000000)     DIGITS_14 (10000*(W)1000000000);
1721   else if (n < 1000000*(W)1000000000)    DIGITS_15 (100000*(W)1000000000);
1722   else if (n < 10000000*(W)1000000000)   DIGITS_16 (1000000*(W)1000000000);
1723   else if (n < 100000000*(W)1000000000)  DIGITS_17 (10000000*(W)1000000000);
1724   else if (n < 1000000000*(W)1000000000) DIGITS_18 (100000000*(W)1000000000);
1725   else                                   DIGITS_19 (1000000000*(W)1000000000);
1726 #endif
1727
1728   if (last_digit_char)
1729     *p++ = last_digit_char;
1730
1731   *p = '\0';
1732 #endif /* (SIZEOF_WGINT == 4) || (SIZEOF_WGINT == 8) */
1733
1734   return p;
1735 }
1736
1737 #undef PR
1738 #undef W
1739 #undef SPRINTF_WGINT
1740 #undef DIGITS_1
1741 #undef DIGITS_2
1742 #undef DIGITS_3
1743 #undef DIGITS_4
1744 #undef DIGITS_5
1745 #undef DIGITS_6
1746 #undef DIGITS_7
1747 #undef DIGITS_8
1748 #undef DIGITS_9
1749 #undef DIGITS_10
1750 #undef DIGITS_11
1751 #undef DIGITS_12
1752 #undef DIGITS_13
1753 #undef DIGITS_14
1754 #undef DIGITS_15
1755 #undef DIGITS_16
1756 #undef DIGITS_17
1757 #undef DIGITS_18
1758 #undef DIGITS_19
1759
1760 #define RING_SIZE 3
1761
1762 /* Print NUMBER to a statically allocated string and return a pointer
1763    to the printed representation.
1764
1765    This function is intended to be used in conjunction with printf.
1766    It is hard to portably print wgint values:
1767     a) you cannot use printf("%ld", number) because wgint can be long
1768        long on 32-bit machines with LFS.
1769     b) you cannot use printf("%lld", number) because NUMBER could be
1770        long on 32-bit machines without LFS, or on 64-bit machines,
1771        which do not require LFS.  Also, Windows doesn't support %lld.
1772     c) you cannot use printf("%j", (int_max_t) number) because not all
1773        versions of printf support "%j", the most notable being the one
1774        on Windows.
1775     d) you cannot #define WGINT_FMT to the appropriate format and use
1776        printf(WGINT_FMT, number) because that would break translations
1777        for user-visible messages, such as printf("Downloaded: %d
1778        bytes\n", number).
1779
1780    What you should use instead is printf("%s", number_to_static_string
1781    (number)).
1782
1783    CAVEAT: since the function returns pointers to static data, you
1784    must be careful to copy its result before calling it again.
1785    However, to make it more useful with printf, the function maintains
1786    an internal ring of static buffers to return.  That way things like
1787    printf("%s %s", number_to_static_string (num1),
1788    number_to_static_string (num2)) work as expected.  Three buffers
1789    are currently used, which means that "%s %s %s" will work, but "%s
1790    %s %s %s" won't.  If you need to print more than three wgints,
1791    bump the RING_SIZE (or rethink your message.)  */
1792
1793 char *
1794 number_to_static_string (wgint number)
1795 {
1796   static char ring[RING_SIZE][24];
1797   static int ringpos;
1798   char *buf = ring[ringpos];
1799   number_to_string (buf, number);
1800   ringpos = (ringpos + 1) % RING_SIZE;
1801   return buf;
1802 }
1803 \f
1804 /* Determine the width of the terminal we're running on.  If that's
1805    not possible, return 0.  */
1806
1807 int
1808 determine_screen_width (void)
1809 {
1810   /* If there's a way to get the terminal size using POSIX
1811      tcgetattr(), somebody please tell me.  */
1812 #ifdef TIOCGWINSZ
1813   int fd;
1814   struct winsize wsz;
1815
1816   if (opt.lfilename != NULL)
1817     return 0;
1818
1819   fd = fileno (stderr);
1820   if (ioctl (fd, TIOCGWINSZ, &wsz) < 0)
1821     return 0;                   /* most likely ENOTTY */
1822
1823   return wsz.ws_col;
1824 #elif defined(WINDOWS)
1825   CONSOLE_SCREEN_BUFFER_INFO csbi;
1826   if (!GetConsoleScreenBufferInfo (GetStdHandle (STD_ERROR_HANDLE), &csbi))
1827     return 0;
1828   return csbi.dwSize.X;
1829 #else  /* neither TIOCGWINSZ nor WINDOWS */
1830   return 0;
1831 #endif /* neither TIOCGWINSZ nor WINDOWS */
1832 }
1833 \f
1834 /* Whether the rnd system (either rand or [dl]rand48) has been
1835    seeded.  */
1836 static int rnd_seeded;
1837
1838 /* Return a random number between 0 and MAX-1, inclusive.
1839
1840    If the system does not support lrand48 and MAX is greater than the
1841    value of RAND_MAX+1 on the system, the returned value will be in
1842    the range [0, RAND_MAX].  This may be fixed in a future release.
1843    The random number generator is seeded automatically the first time
1844    it is called.
1845
1846    This uses lrand48 where available, rand elsewhere.  DO NOT use it
1847    for cryptography.  It is only meant to be used in situations where
1848    quality of the random numbers returned doesn't really matter.  */
1849
1850 int
1851 random_number (int max)
1852 {
1853 #ifdef HAVE_DRAND48
1854   if (!rnd_seeded)
1855     {
1856       srand48 ((long) time (NULL) ^ (long) getpid ());
1857       rnd_seeded = 1;
1858     }
1859   return lrand48 () % max;
1860 #else  /* not HAVE_DRAND48 */
1861
1862   double bounded;
1863   int rnd;
1864   if (!rnd_seeded)
1865     {
1866       srand ((unsigned) time (NULL) ^ (unsigned) getpid ());
1867       rnd_seeded = 1;
1868     }
1869   rnd = rand ();
1870
1871   /* Like rand() % max, but uses the high-order bits for better
1872      randomness on architectures where rand() is implemented using a
1873      simple congruential generator.  */
1874
1875   bounded = (double) max * rnd / (RAND_MAX + 1.0);
1876   return (int) bounded;
1877
1878 #endif /* not HAVE_DRAND48 */
1879 }
1880
1881 /* Return a random uniformly distributed floating point number in the
1882    [0, 1) range.  Uses drand48 where available, and a really lame
1883    kludge elsewhere.  */
1884
1885 double
1886 random_float (void)
1887 {
1888 #ifdef HAVE_DRAND48
1889   if (!rnd_seeded)
1890     {
1891       srand48 ((long) time (NULL) ^ (long) getpid ());
1892       rnd_seeded = 1;
1893     }
1894   return drand48 ();
1895 #else  /* not HAVE_DRAND48 */
1896   return (  random_number (10000) / 10000.0
1897           + random_number (10000) / (10000.0 * 10000.0)
1898           + random_number (10000) / (10000.0 * 10000.0 * 10000.0)
1899           + random_number (10000) / (10000.0 * 10000.0 * 10000.0 * 10000.0));
1900 #endif /* not HAVE_DRAND48 */
1901 }
1902 \f
1903 /* Implementation of run_with_timeout, a generic timeout-forcing
1904    routine for systems with Unix-like signal handling.  */
1905
1906 #ifdef USE_SIGNAL_TIMEOUT
1907 # ifdef HAVE_SIGSETJMP
1908 #  define SETJMP(env) sigsetjmp (env, 1)
1909
1910 static sigjmp_buf run_with_timeout_env;
1911
1912 static void
1913 abort_run_with_timeout (int sig)
1914 {
1915   assert (sig == SIGALRM);
1916   siglongjmp (run_with_timeout_env, -1);
1917 }
1918 # else /* not HAVE_SIGSETJMP */
1919 #  define SETJMP(env) setjmp (env)
1920
1921 static jmp_buf run_with_timeout_env;
1922
1923 static void
1924 abort_run_with_timeout (int sig)
1925 {
1926   assert (sig == SIGALRM);
1927   /* We don't have siglongjmp to preserve the set of blocked signals;
1928      if we longjumped out of the handler at this point, SIGALRM would
1929      remain blocked.  We must unblock it manually. */
1930   int mask = siggetmask ();
1931   mask &= ~sigmask (SIGALRM);
1932   sigsetmask (mask);
1933
1934   /* Now it's safe to longjump. */
1935   longjmp (run_with_timeout_env, -1);
1936 }
1937 # endif /* not HAVE_SIGSETJMP */
1938
1939 /* Arrange for SIGALRM to be delivered in TIMEOUT seconds.  This uses
1940    setitimer where available, alarm otherwise.
1941
1942    TIMEOUT should be non-zero.  If the timeout value is so small that
1943    it would be rounded to zero, it is rounded to the least legal value
1944    instead (1us for setitimer, 1s for alarm).  That ensures that
1945    SIGALRM will be delivered in all cases.  */
1946
1947 static void
1948 alarm_set (double timeout)
1949 {
1950 #ifdef ITIMER_REAL
1951   /* Use the modern itimer interface. */
1952   struct itimerval itv;
1953   xzero (itv);
1954   itv.it_value.tv_sec = (long) timeout;
1955   itv.it_value.tv_usec = 1000000 * (timeout - (long)timeout);
1956   if (itv.it_value.tv_sec == 0 && itv.it_value.tv_usec == 0)
1957     /* Ensure that we wait for at least the minimum interval.
1958        Specifying zero would mean "wait forever".  */
1959     itv.it_value.tv_usec = 1;
1960   setitimer (ITIMER_REAL, &itv, NULL);
1961 #else  /* not ITIMER_REAL */
1962   /* Use the old alarm() interface. */
1963   int secs = (int) timeout;
1964   if (secs == 0)
1965     /* Round TIMEOUTs smaller than 1 to 1, not to zero.  This is
1966        because alarm(0) means "never deliver the alarm", i.e. "wait
1967        forever", which is not what someone who specifies a 0.5s
1968        timeout would expect.  */
1969     secs = 1;
1970   alarm (secs);
1971 #endif /* not ITIMER_REAL */
1972 }
1973
1974 /* Cancel the alarm set with alarm_set. */
1975
1976 static void
1977 alarm_cancel (void)
1978 {
1979 #ifdef ITIMER_REAL
1980   struct itimerval disable;
1981   xzero (disable);
1982   setitimer (ITIMER_REAL, &disable, NULL);
1983 #else  /* not ITIMER_REAL */
1984   alarm (0);
1985 #endif /* not ITIMER_REAL */
1986 }
1987
1988 /* Call FUN(ARG), but don't allow it to run for more than TIMEOUT
1989    seconds.  Returns true if the function was interrupted with a
1990    timeout, false otherwise.
1991
1992    This works by setting up SIGALRM to be delivered in TIMEOUT seconds
1993    using setitimer() or alarm().  The timeout is enforced by
1994    longjumping out of the SIGALRM handler.  This has several
1995    advantages compared to the traditional approach of relying on
1996    signals causing system calls to exit with EINTR:
1997
1998      * The callback function is *forcibly* interrupted after the
1999        timeout expires, (almost) regardless of what it was doing and
2000        whether it was in a syscall.  For example, a calculation that
2001        takes a long time is interrupted as reliably as an IO
2002        operation.
2003
2004      * It works with both SYSV and BSD signals because it doesn't
2005        depend on the default setting of SA_RESTART.
2006
2007      * It doesn't require special handler setup beyond a simple call
2008        to signal().  (It does use sigsetjmp/siglongjmp, but they're
2009        optional.)
2010
2011    The only downside is that, if FUN allocates internal resources that
2012    are normally freed prior to exit from the functions, they will be
2013    lost in case of timeout.  */
2014
2015 bool
2016 run_with_timeout (double timeout, void (*fun) (void *), void *arg)
2017 {
2018   int saved_errno;
2019
2020   if (timeout == 0)
2021     {
2022       fun (arg);
2023       return false;
2024     }
2025
2026   signal (SIGALRM, abort_run_with_timeout);
2027   if (SETJMP (run_with_timeout_env) != 0)
2028     {
2029       /* Longjumped out of FUN with a timeout. */
2030       signal (SIGALRM, SIG_DFL);
2031       return true;
2032     }
2033   alarm_set (timeout);
2034   fun (arg);
2035
2036   /* Preserve errno in case alarm() or signal() modifies it. */
2037   saved_errno = errno;
2038   alarm_cancel ();
2039   signal (SIGALRM, SIG_DFL);
2040   errno = saved_errno;
2041
2042   return false;
2043 }
2044
2045 #else  /* not USE_SIGNAL_TIMEOUT */
2046
2047 #ifndef WINDOWS
2048 /* A stub version of run_with_timeout that just calls FUN(ARG).  Don't
2049    define it under Windows, because Windows has its own version of
2050    run_with_timeout that uses threads.  */
2051
2052 bool
2053 run_with_timeout (double timeout, void (*fun) (void *), void *arg)
2054 {
2055   fun (arg);
2056   return false;
2057 }
2058 #endif /* not WINDOWS */
2059 #endif /* not USE_SIGNAL_TIMEOUT */
2060 \f
2061 #ifndef WINDOWS
2062
2063 /* Sleep the specified amount of seconds.  On machines without
2064    nanosleep(), this may sleep shorter if interrupted by signals.  */
2065
2066 void
2067 xsleep (double seconds)
2068 {
2069 #ifdef HAVE_NANOSLEEP
2070   /* nanosleep is the preferred interface because it offers high
2071      accuracy and, more importantly, because it allows us to reliably
2072      restart receiving a signal such as SIGWINCH.  (There was an
2073      actual Debian bug report about --limit-rate malfunctioning while
2074      the terminal was being resized.)  */
2075   struct timespec sleep, remaining;
2076   sleep.tv_sec = (long) seconds;
2077   sleep.tv_nsec = 1000000000 * (seconds - (long) seconds);
2078   while (nanosleep (&sleep, &remaining) < 0 && errno == EINTR)
2079     /* If nanosleep has been interrupted by a signal, adjust the
2080        sleeping period and return to sleep.  */
2081     sleep = remaining;
2082 #elif defined(HAVE_USLEEP)
2083   /* If usleep is available, use it in preference to select.  */
2084   if (seconds >= 1)
2085     {
2086       /* On some systems, usleep cannot handle values larger than
2087          1,000,000.  If the period is larger than that, use sleep
2088          first, then add usleep for subsecond accuracy.  */
2089       sleep (seconds);
2090       seconds -= (long) seconds;
2091     }
2092   usleep (seconds * 1000000);
2093 #else /* fall back select */
2094   /* Note that, although Windows supports select, it can't be used to
2095      implement sleeping because Winsock's select doesn't implement
2096      timeout when it is passed NULL pointers for all fd sets.  (But it
2097      does under Cygwin, which implements Unix-compatible select.)  */
2098   struct timeval sleep;
2099   sleep.tv_sec = (long) seconds;
2100   sleep.tv_usec = 1000000 * (seconds - (long) seconds);
2101   select (0, NULL, NULL, NULL, &sleep);
2102   /* If select returns -1 and errno is EINTR, it means we were
2103      interrupted by a signal.  But without knowing how long we've
2104      actually slept, we can't return to sleep.  Using gettimeofday to
2105      track sleeps is slow and unreliable due to clock skew.  */
2106 #endif
2107 }
2108
2109 #endif /* not WINDOWS */
2110
2111 /* Encode the octets in DATA of length LENGTH to base64 format,
2112    storing the result to DEST.  The output will be zero-terminated,
2113    and must point to a writable buffer of at least
2114    1+BASE64_LENGTH(length) bytes.  The function returns the length of
2115    the resulting base64 data, not counting the terminating zero.
2116
2117    This implementation does not emit newlines after 76 characters of
2118    base64 data.  */
2119
2120 int
2121 base64_encode (const void *data, int length, char *dest)
2122 {
2123   /* Conversion table.  */
2124   static const char tbl[64] = {
2125     'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
2126     'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
2127     'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
2128     'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
2129   };
2130   /* Access bytes in DATA as unsigned char, otherwise the shifts below
2131      don't work for data with MSB set. */
2132   const unsigned char *s = data;
2133   /* Theoretical ANSI violation when length < 3. */
2134   const unsigned char *end = (const unsigned char *) data + length - 2;
2135   char *p = dest;
2136
2137   /* Transform the 3x8 bits to 4x6 bits, as required by base64.  */
2138   for (; s < end; s += 3)
2139     {
2140       *p++ = tbl[s[0] >> 2];
2141       *p++ = tbl[((s[0] & 3) << 4) + (s[1] >> 4)];
2142       *p++ = tbl[((s[1] & 0xf) << 2) + (s[2] >> 6)];
2143       *p++ = tbl[s[2] & 0x3f];
2144     }
2145
2146   /* Pad the result if necessary...  */
2147   switch (length % 3)
2148     {
2149     case 1:
2150       *p++ = tbl[s[0] >> 2];
2151       *p++ = tbl[(s[0] & 3) << 4];
2152       *p++ = '=';
2153       *p++ = '=';
2154       break;
2155     case 2:
2156       *p++ = tbl[s[0] >> 2];
2157       *p++ = tbl[((s[0] & 3) << 4) + (s[1] >> 4)];
2158       *p++ = tbl[((s[1] & 0xf) << 2)];
2159       *p++ = '=';
2160       break;
2161     }
2162   /* ...and zero-terminate it.  */
2163   *p = '\0';
2164
2165   return p - dest;
2166 }
2167
2168 /* Store in C the next non-whitespace character from the string, or \0
2169    when end of string is reached.  */
2170 #define NEXT_CHAR(c, p) do {                    \
2171   c = (unsigned char) *p++;                     \
2172 } while (c_isspace (c))
2173
2174 #define IS_ASCII(c) (((c) & 0x80) == 0)
2175
2176 /* Decode data from BASE64 (a null-terminated string) into memory
2177    pointed to by DEST.  DEST is assumed to be large enough to
2178    accomodate the decoded data, which is guaranteed to be no more than
2179    3/4*strlen(base64).
2180
2181    Since DEST is assumed to contain binary data, it is not
2182    NUL-terminated.  The function returns the length of the data
2183    written to TO.  -1 is returned in case of error caused by malformed
2184    base64 input.
2185
2186    This function originates from Free Recode.  */
2187
2188 int
2189 base64_decode (const char *base64, void *dest)
2190 {
2191   /* Table of base64 values for first 128 characters.  Note that this
2192      assumes ASCII (but so does Wget in other places).  */
2193   static const signed char base64_char_to_value[128] =
2194     {
2195       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  /*   0-  9 */
2196       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  /*  10- 19 */
2197       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  /*  20- 29 */
2198       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  /*  30- 39 */
2199       -1,  -1,  -1,  62,  -1,  -1,  -1,  63,  52,  53,  /*  40- 49 */
2200       54,  55,  56,  57,  58,  59,  60,  61,  -1,  -1,  /*  50- 59 */
2201       -1,  -1,  -1,  -1,  -1,  0,   1,   2,   3,   4,   /*  60- 69 */
2202       5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  /*  70- 79 */
2203       15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  /*  80- 89 */
2204       25,  -1,  -1,  -1,  -1,  -1,  -1,  26,  27,  28,  /*  90- 99 */
2205       29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  /* 100-109 */
2206       39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  /* 110-119 */
2207       49,  50,  51,  -1,  -1,  -1,  -1,  -1             /* 120-127 */
2208     };
2209 #define BASE64_CHAR_TO_VALUE(c) ((int) base64_char_to_value[c])
2210 #define IS_BASE64(c) ((IS_ASCII (c) && BASE64_CHAR_TO_VALUE (c) >= 0) || c == '=')
2211
2212   const char *p = base64;
2213   char *q = dest;
2214
2215   while (1)
2216     {
2217       unsigned char c;
2218       unsigned long value;
2219
2220       /* Process first byte of a quadruplet.  */
2221       NEXT_CHAR (c, p);
2222       if (!c)
2223         break;
2224       if (c == '=' || !IS_BASE64 (c))
2225         return -1;              /* illegal char while decoding base64 */
2226       value = BASE64_CHAR_TO_VALUE (c) << 18;
2227
2228       /* Process second byte of a quadruplet.  */
2229       NEXT_CHAR (c, p);
2230       if (!c)
2231         return -1;              /* premature EOF while decoding base64 */
2232       if (c == '=' || !IS_BASE64 (c))
2233         return -1;              /* illegal char while decoding base64 */
2234       value |= BASE64_CHAR_TO_VALUE (c) << 12;
2235       *q++ = value >> 16;
2236
2237       /* Process third byte of a quadruplet.  */
2238       NEXT_CHAR (c, p);
2239       if (!c)
2240         return -1;              /* premature EOF while decoding base64 */
2241       if (!IS_BASE64 (c))
2242         return -1;              /* illegal char while decoding base64 */
2243
2244       if (c == '=')
2245         {
2246           NEXT_CHAR (c, p);
2247           if (!c)
2248             return -1;          /* premature EOF while decoding base64 */
2249           if (c != '=')
2250             return -1;          /* padding `=' expected but not found */
2251           continue;
2252         }
2253
2254       value |= BASE64_CHAR_TO_VALUE (c) << 6;
2255       *q++ = 0xff & value >> 8;
2256
2257       /* Process fourth byte of a quadruplet.  */
2258       NEXT_CHAR (c, p);
2259       if (!c)
2260         return -1;              /* premature EOF while decoding base64 */
2261       if (c == '=')
2262         continue;
2263       if (!IS_BASE64 (c))
2264         return -1;              /* illegal char while decoding base64 */
2265
2266       value |= BASE64_CHAR_TO_VALUE (c);
2267       *q++ = 0xff & value;
2268     }
2269 #undef IS_BASE64
2270 #undef BASE64_CHAR_TO_VALUE
2271
2272   return q - (char *) dest;
2273 }
2274
2275 #undef IS_ASCII
2276 #undef NEXT_CHAR
2277 \f
2278 /* Simple merge sort for use by stable_sort.  Implementation courtesy
2279    Zeljko Vrba with additional debugging by Nenad Barbutov.  */
2280
2281 static void
2282 mergesort_internal (void *base, void *temp, size_t size, size_t from, size_t to,
2283                     int (*cmpfun) (const void *, const void *))
2284 {
2285 #define ELT(array, pos) ((char *)(array) + (pos) * size)
2286   if (from < to)
2287     {
2288       size_t i, j, k;
2289       size_t mid = (to + from) / 2;
2290       mergesort_internal (base, temp, size, from, mid, cmpfun);
2291       mergesort_internal (base, temp, size, mid + 1, to, cmpfun);
2292       i = from;
2293       j = mid + 1;
2294       for (k = from; (i <= mid) && (j <= to); k++)
2295         if (cmpfun (ELT (base, i), ELT (base, j)) <= 0)
2296           memcpy (ELT (temp, k), ELT (base, i++), size);
2297         else
2298           memcpy (ELT (temp, k), ELT (base, j++), size);
2299       while (i <= mid)
2300         memcpy (ELT (temp, k++), ELT (base, i++), size);
2301       while (j <= to)
2302         memcpy (ELT (temp, k++), ELT (base, j++), size);
2303       for (k = from; k <= to; k++)
2304         memcpy (ELT (base, k), ELT (temp, k), size);
2305     }
2306 #undef ELT
2307 }
2308
2309 /* Stable sort with interface exactly like standard library's qsort.
2310    Uses mergesort internally, allocating temporary storage with
2311    alloca.  */
2312
2313 void
2314 stable_sort (void *base, size_t nmemb, size_t size,
2315              int (*cmpfun) (const void *, const void *))
2316 {
2317   if (size > 1)
2318     {
2319       void *temp = alloca (nmemb * size * sizeof (void *));
2320       mergesort_internal (base, temp, size, 0, nmemb - 1, cmpfun);
2321     }
2322 }
2323 \f
2324 /* Print a decimal number.  If it is equal to or larger than ten, the
2325    number is rounded.  Otherwise it is printed with one significant
2326    digit without trailing zeros and with no more than three fractional
2327    digits total.  For example, 0.1 is printed as "0.1", 0.035 is
2328    printed as "0.04", 0.0091 as "0.009", and 0.0003 as simply "0".
2329
2330    This is useful for displaying durations because it provides
2331    order-of-magnitude information without unnecessary clutter --
2332    long-running downloads are shown without the fractional part, and
2333    short ones still retain one significant digit.  */
2334
2335 const char *
2336 print_decimal (double number)
2337 {
2338   static char buf[32];
2339   double n = number >= 0 ? number : -number;
2340
2341   if (n >= 9.95)
2342     /* Cut off at 9.95 because the below %.1f would round 9.96 to
2343        "10.0" instead of "10".  OTOH 9.94 will print as "9.9".  */
2344     snprintf (buf, sizeof buf, "%.0f", number);
2345   else if (n >= 0.95)
2346     snprintf (buf, sizeof buf, "%.1f", number);
2347   else if (n >= 0.001)
2348     snprintf (buf, sizeof buf, "%.1g", number);
2349   else if (n >= 0.0005)
2350     /* round [0.0005, 0.001) to 0.001 */
2351     snprintf (buf, sizeof buf, "%.3f", number);
2352   else
2353     /* print numbers close to 0 as 0, not 0.000 */
2354     strcpy (buf, "0");
2355
2356   return buf;
2357 }
2358
2359 #ifdef TESTING
2360
2361 const char *
2362 test_subdir_p()
2363 {
2364   int i;
2365   struct {
2366     char *d1;
2367     char *d2;
2368     bool result;
2369   } test_array[] = {
2370     { "/somedir", "/somedir", true },
2371     { "/somedir", "/somedir/d2", true },
2372     { "/somedir/d1", "/somedir", false },
2373   };
2374
2375   for (i = 0; i < countof(test_array); ++i)
2376     {
2377       bool res = subdir_p (test_array[i].d1, test_array[i].d2);
2378
2379       mu_assert ("test_subdir_p: wrong result",
2380                  res == test_array[i].result);
2381     }
2382
2383   return NULL;
2384 }
2385
2386 const char *
2387 test_dir_matches_p()
2388 {
2389   int i;
2390   struct {
2391     char *dirlist[3];
2392     char *dir;
2393     bool result;
2394   } test_array[] = {
2395     { { "/somedir", "/someotherdir", NULL }, "somedir", true },
2396     { { "/somedir", "/someotherdir", NULL }, "anotherdir", false },
2397     { { "/somedir", "/*otherdir", NULL }, "anotherdir", true },
2398     { { "/somedir/d1", "/someotherdir", NULL }, "somedir/d1", true },
2399     { { "*/*d1", "/someotherdir", NULL }, "somedir/d1", true },
2400     { { "/somedir/d1", "/someotherdir", NULL }, "d1", false },
2401     { { "!COMPLETE", NULL, NULL }, "!COMPLETE", true },
2402     { { "*COMPLETE", NULL, NULL }, "!COMPLETE", true },
2403     { { "*/!COMPLETE", NULL, NULL }, "foo/!COMPLETE", true },
2404     { { "*COMPLETE", NULL, NULL }, "foo/!COMPLETE", false },
2405     { { "*/*COMPLETE", NULL, NULL }, "foo/!COMPLETE", true },
2406     { { "/dir with spaces", NULL, NULL }, "dir with spaces", true },
2407     { { "/dir*with*spaces", NULL, NULL }, "dir with spaces", true },
2408     { { "/Tmp/has", NULL, NULL }, "/Tmp/has space", false },
2409     { { "/Tmp/has", NULL, NULL }, "/Tmp/has,comma", false },
2410   };
2411
2412   for (i = 0; i < countof(test_array); ++i)
2413     {
2414       bool res = dir_matches_p (test_array[i].dirlist, test_array[i].dir);
2415
2416       mu_assert ("test_dir_matches_p: wrong result",
2417                  res == test_array[i].result);
2418     }
2419
2420   return NULL;
2421 }
2422
2423 #endif /* TESTING */
2424