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