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