1 /* Various functions of utilitarian nature.
2 Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001
3 Free Software Foundation, Inc.
5 This file is part of GNU Wget.
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 2 of the License, or
10 (at your option) any later version.
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.
17 You should have received a copy of the GNU General Public License
18 along with Wget; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
27 #else /* not HAVE_STRING_H */
29 #endif /* not HAVE_STRING_H */
30 #include <sys/types.h>
35 # include <sys/mman.h>
44 #ifdef HAVE_SYS_UTIME_H
45 # include <sys/utime.h>
49 # include <libc.h> /* for access() */
54 /* For TIOCGWINSZ and friends: */
55 #ifdef HAVE_SYS_IOCTL_H
56 # include <sys/ioctl.h>
71 /* This section implements several wrappers around the basic
72 allocation routines. This is done for two reasons: first, so that
73 the callers of these functions need not consistently check for
74 errors. If there is not enough virtual memory for running Wget,
75 something is seriously wrong, and Wget exits with an appropriate
78 The second reason why these are useful is that, if DEBUG_MALLOC is
79 defined, they also provide a handy (if crude) malloc debugging
80 interface that checks memory leaks. */
82 /* Croak the fatal memory error and bail out with non-zero exit
85 memfatal (const char *what)
87 /* HACK: expose save_log_p from log.c, so we can turn it off in
88 order to prevent saving the log. Saving the log is dangerous
89 because logprintf() and logputs() can call malloc(), so this
90 could infloop. When logging is turned off, infloop can no longer
93 #### This is no longer really necessary because the new routines
94 in log.c cons only if the line exceeds eighty characters. But
95 this can come at the end of a line, so it's OK to be careful.
97 On a more serious note, it would be good to have a
98 log_forced_shutdown() routine that exposes this cleanly. */
99 extern int save_log_p;
102 logprintf (LOG_ALWAYS, _("%s: %s: Not enough memory.\n"), exec_name, what);
106 /* These functions end with _real because they need to be
107 distinguished from the debugging functions, and from the macros.
110 If memory debugging is not turned on, wget.h defines these:
112 #define xmalloc xmalloc_real
113 #define xrealloc xrealloc_real
114 #define xstrdup xstrdup_real
117 In case of memory debugging, the definitions are a bit more
118 complex, because we want to provide more information, *and* we want
119 to call the debugging code. (The former is the reason why xmalloc
120 and friends need to be macros in the first place.) Then it looks
123 #define xmalloc(a) xmalloc_debug (a, __FILE__, __LINE__)
124 #define xfree(a) xfree_debug (a, __FILE__, __LINE__)
125 #define xrealloc(a, b) xrealloc_debug (a, b, __FILE__, __LINE__)
126 #define xstrdup(a) xstrdup_debug (a, __FILE__, __LINE__)
128 Each of the *_debug function does its magic and calls the real one. */
131 # define STATIC_IF_DEBUG static
133 # define STATIC_IF_DEBUG
136 STATIC_IF_DEBUG void *
137 xmalloc_real (size_t size)
139 void *ptr = malloc (size);
145 STATIC_IF_DEBUG void *
146 xrealloc_real (void *ptr, size_t newsize)
150 /* Not all Un*xes have the feature of realloc() that calling it with
151 a NULL-pointer is the same as malloc(), but it is easy to
154 newptr = realloc (ptr, newsize);
156 newptr = malloc (newsize);
158 memfatal ("realloc");
162 STATIC_IF_DEBUG char *
163 xstrdup_real (const char *s)
169 copy = malloc (l + 1);
172 memcpy (copy, s, l + 1);
173 #else /* HAVE_STRDUP */
177 #endif /* HAVE_STRDUP */
184 /* Crude home-grown routines for debugging some malloc-related
187 * Counting the number of malloc and free invocations, and reporting
188 the "balance", i.e. how many times more malloc was called than it
189 was the case with free.
191 * Making malloc store its entry into a simple array and free remove
192 stuff from that array. At the end, print the pointers which have
193 not been freed, along with the source file and the line number.
194 This also has the side-effect of detecting freeing memory that
197 Note that this kind of memory leak checking strongly depends on
198 every malloc() being followed by a free(), even if the program is
199 about to finish. Wget is careful to free the data structure it
200 allocated in init.c. */
202 static int malloc_count, free_count;
208 } malloc_debug[100000];
210 /* Both register_ptr and unregister_ptr take O(n) operations to run,
211 which can be a real problem. It would be nice to use a hash table
212 for malloc_debug, but the functions in hash.c are not suitable
213 because they can call malloc() themselves. Maybe it would work if
214 the hash table were preallocated to a huge size, and if we set the
215 rehash threshold to 1.0. */
217 /* Register PTR in malloc_debug. Abort if this is not possible
218 (presumably due to the number of current allocations exceeding the
219 size of malloc_debug.) */
222 register_ptr (void *ptr, const char *file, int line)
225 for (i = 0; i < ARRAY_SIZE (malloc_debug); i++)
226 if (malloc_debug[i].ptr == NULL)
228 malloc_debug[i].ptr = ptr;
229 malloc_debug[i].file = file;
230 malloc_debug[i].line = line;
236 /* Unregister PTR from malloc_debug. Abort if PTR is not present in
237 malloc_debug. (This catches calling free() with a bogus pointer.) */
240 unregister_ptr (void *ptr)
243 for (i = 0; i < ARRAY_SIZE (malloc_debug); i++)
244 if (malloc_debug[i].ptr == ptr)
246 malloc_debug[i].ptr = NULL;
252 /* Print the malloc debug stats that can be gathered from the above
253 information. Currently this is the count of mallocs, frees, the
254 difference between the two, and the dump of the contents of
255 malloc_debug. The last part are the memory leaks. */
258 print_malloc_debug_stats (void)
261 printf ("\nMalloc: %d\nFree: %d\nBalance: %d\n\n",
262 malloc_count, free_count, malloc_count - free_count);
263 for (i = 0; i < ARRAY_SIZE (malloc_debug); i++)
264 if (malloc_debug[i].ptr != NULL)
265 printf ("0x%08ld: %s:%d\n", (long)malloc_debug[i].ptr,
266 malloc_debug[i].file, malloc_debug[i].line);
270 xmalloc_debug (size_t size, const char *source_file, int source_line)
272 void *ptr = xmalloc_real (size);
274 register_ptr (ptr, source_file, source_line);
279 xfree_debug (void *ptr, const char *source_file, int source_line)
281 assert (ptr != NULL);
283 unregister_ptr (ptr);
288 xrealloc_debug (void *ptr, size_t newsize, const char *source_file, int source_line)
290 void *newptr = xrealloc_real (ptr, newsize);
294 register_ptr (newptr, source_file, source_line);
296 else if (newptr != ptr)
298 unregister_ptr (ptr);
299 register_ptr (newptr, source_file, source_line);
305 xstrdup_debug (const char *s, const char *source_file, int source_line)
307 char *copy = xstrdup_real (s);
309 register_ptr (copy, source_file, source_line);
313 #endif /* DEBUG_MALLOC */
315 /* Utility function: like xstrdup(), but also lowercases S. */
318 xstrdup_lower (const char *s)
320 char *copy = xstrdup (s);
327 /* Return a count of how many times CHR occurs in STRING. */
330 count_char (const char *string, char chr)
334 for (p = string; *p; p++)
340 /* Copy the string formed by two pointers (one on the beginning, other
341 on the char after the last char) to a new, malloc-ed location.
344 strdupdelim (const char *beg, const char *end)
346 char *res = (char *)xmalloc (end - beg + 1);
347 memcpy (res, beg, end - beg);
348 res[end - beg] = '\0';
352 /* Parse a string containing comma-separated elements, and return a
353 vector of char pointers with the elements. Spaces following the
354 commas are ignored. */
356 sepstring (const char *s)
370 res = (char **)xrealloc (res, (i + 2) * sizeof (char *));
371 res[i] = strdupdelim (p, s);
374 /* Skip the blanks following the ','. */
382 res = (char **)xrealloc (res, (i + 2) * sizeof (char *));
383 res[i] = strdupdelim (p, s);
388 /* Return pointer to a static char[] buffer in which zero-terminated
389 string-representation of TM (in form hh:mm:ss) is printed.
391 If TM is non-NULL, the current time-in-seconds will be stored
394 (#### This is misleading: one would expect TM would be used instead
395 of the current time in that case. This design was probably
396 influenced by the design time(2), and should be changed at some
397 points. No callers use non-NULL TM anyway.) */
400 time_str (time_t *tm)
402 static char output[15];
404 time_t secs = time (tm);
408 /* In case of error, return the empty string. Maybe we should
409 just abort if this happens? */
413 ptm = localtime (&secs);
414 sprintf (output, "%02d:%02d:%02d", ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
418 /* Like the above, but include the date: YYYY-MM-DD hh:mm:ss. */
421 datetime_str (time_t *tm)
423 static char output[20]; /* "YYYY-MM-DD hh:mm:ss" + \0 */
425 time_t secs = time (tm);
429 /* In case of error, return the empty string. Maybe we should
430 just abort if this happens? */
434 ptm = localtime (&secs);
435 sprintf (output, "%04d-%02d-%02d %02d:%02d:%02d",
436 ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday,
437 ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
441 /* The Windows versions of the following two functions are defined in
446 fork_to_background (void)
449 /* Whether we arrange our own version of opt.lfilename here. */
454 opt.lfilename = unique_name (DEFAULT_LOGFILE);
466 /* parent, no error */
467 printf (_("Continuing in background.\n"));
469 printf (_("Output will be written to `%s'.\n"), opt.lfilename);
472 /* child: keep running */
474 #endif /* not WINDOWS */
481 char *r = xstrdup (orig);
487 /* Canonicalize PATH, and return a new path. The new path differs from PATH
489 Multple `/'s are collapsed to a single `/'.
490 Leading `./'s and trailing `/.'s are removed.
491 Trailing `/'s are removed.
492 Non-leading `../'s and trailing `..'s are handled by removing
493 portions of the path.
495 E.g. "a/b/c/./../d/.." will yield "a/b/". This function originates
496 from GNU Bash and has been mutilated to unrecognition for use in
500 Always use '/' as stub_char.
501 Don't check for local things using canon_stat.
502 Change the original string instead of strdup-ing.
503 React correctly when beginning with `./' and `../'.
504 Don't zip out trailing slashes.
505 Return a value indicating whether any modifications took place.
507 If you dare change this function, take a careful look at the test
508 cases below, and make sure that they pass. */
511 path_simplify (char *path)
513 register int i, start;
523 /* Preserve initial '/'. */
526 /* Nix out leading `.' or `..' with. */
527 if ((path[0] == '.' && path[1] == '\0')
528 || (path[0] == '.' && path[1] == '.' && path[2] == '\0'))
535 /* Walk along PATH looking for things to compact. */
542 while (path[i] && path[i] != '/')
547 /* If we didn't find any slashes, then there is nothing left to do. */
551 /* Handle multiple `/'s in a row. */
552 while (path[i] == '/')
555 if ((start + 1) != i)
557 strcpy (path + start + 1, path + i);
562 /* Check for `../', `./' or trailing `.' by itself. */
565 /* Handle trailing `.' by itself. */
574 if (path[i + 1] == '/')
576 strcpy (path + i, path + i + 1);
577 i = (start < 0) ? 0 : start;
582 /* Handle `../' or trailing `..' by itself. */
583 if (path[i + 1] == '.' &&
584 (path[i + 2] == '/' || !path[i + 2]))
586 while (--start > -1 && path[start] != '/');
587 strcpy (path + start + 1, path + i + 2 + (start == -1 && path[i + 2]));
588 i = (start < 0) ? 0 : start;
595 /* Addition: Remove all `./'-s and `../'-s preceding the string. */
599 if (path[i] == '.' && path[i + 1] == '/')
601 else if (path[i] == '.' && path[i + 1] == '.' && path[i + 2] == '/')
608 strcpy (path, path + i - 0);
623 ps("foo/bar") -> "foo/bar"
624 ps("foo//bar") -> "foo/bar" (possibly a bug)
625 ps("foo/../bar") -> "bar"
626 ps("foo/bar/..") -> "foo/"
627 ps("foo/bar/../x") -> "foo/x"
628 ps("foo/bar/../x/") -> "foo/x/"
631 ps("a/b/../../c") -> "c"
632 ps("/a/b/../../c") -> "/c"
633 ps("./a/../b") -> "b"
634 ps("/./a/../b") -> "/b"
637 /* "Touch" FILE, i.e. make its atime and mtime equal to the time
638 specified with TM. */
640 touch (const char *file, time_t tm)
642 #ifdef HAVE_STRUCT_UTIMBUF
643 struct utimbuf times;
644 times.actime = times.modtime = tm;
647 times[0] = times[1] = tm;
650 if (utime (file, ×) == -1)
651 logprintf (LOG_NOTQUIET, "utime(%s): %s\n", file, strerror (errno));
654 /* Checks if FILE is a symbolic link, and removes it if it is. Does
655 nothing under MS-Windows. */
657 remove_link (const char *file)
662 if (lstat (file, &st) == 0 && S_ISLNK (st.st_mode))
664 DEBUGP (("Unlinking %s (symlink).\n", file));
667 logprintf (LOG_VERBOSE, _("Failed to unlink symlink `%s': %s\n"),
668 file, strerror (errno));
673 /* Does FILENAME exist? This is quite a lousy implementation, since
674 it supplies no error codes -- only a yes-or-no answer. Thus it
675 will return that a file does not exist if, e.g., the directory is
676 unreadable. I don't mind it too much currently, though. The
677 proper way should, of course, be to have a third, error state,
678 other than true/false, but that would introduce uncalled-for
679 additional complexity to the callers. */
681 file_exists_p (const char *filename)
684 return access (filename, F_OK) >= 0;
687 return stat (filename, &buf) >= 0;
691 /* Returns 0 if PATH is a directory, 1 otherwise (any kind of file).
692 Returns 0 on error. */
694 file_non_directory_p (const char *path)
697 /* Use lstat() rather than stat() so that symbolic links pointing to
698 directories can be identified correctly. */
699 if (lstat (path, &buf) != 0)
701 return S_ISDIR (buf.st_mode) ? 0 : 1;
704 /* Return a unique filename, given a prefix and count */
706 unique_name_1 (const char *fileprefix, int count)
712 filename = (char *)xmalloc (strlen (fileprefix) + numdigit (count) + 2);
713 sprintf (filename, "%s.%d", fileprefix, count);
716 filename = xstrdup (fileprefix);
718 if (!file_exists_p (filename))
727 /* Return a unique file name, based on PREFIX. */
729 unique_name (const char *prefix)
735 file = unique_name_1 (prefix, count++);
739 /* Create DIRECTORY. If some of the pathname components of DIRECTORY
740 are missing, create them first. In case any mkdir() call fails,
741 return its error status. Returns 0 on successful completion.
743 The behaviour of this function should be identical to the behaviour
744 of `mkdir -p' on systems where mkdir supports the `-p' option. */
746 make_directory (const char *directory)
752 /* Make a copy of dir, to be able to write to it. Otherwise, the
753 function is unsafe if called with a read-only char *argument. */
754 STRDUP_ALLOCA (dir, directory);
756 /* If the first character of dir is '/', skip it (and thus enable
757 creation of absolute-pathname directories. */
758 for (i = (*dir == '/'); 1; ++i)
760 for (; dir[i] && dir[i] != '/'; i++)
765 /* Check whether the directory already exists. */
766 if (!file_exists_p (dir))
768 if (mkdir (dir, 0777) < 0)
779 /* Merge BASE with FILE. BASE can be a directory or a file name, FILE
780 should be a file name.
782 file_merge("/foo/bar", "baz") => "/foo/baz"
783 file_merge("/foo/bar/", "baz") => "/foo/bar/baz"
784 file_merge("foo", "bar") => "bar"
786 In other words, it's a simpler and gentler version of uri_merge_1. */
789 file_merge (const char *base, const char *file)
792 const char *cut = (const char *)strrchr (base, '/');
795 return xstrdup (file);
797 result = (char *)xmalloc (cut - base + 1 + strlen (file) + 1);
798 memcpy (result, base, cut - base);
799 result[cut - base] = '/';
800 strcpy (result + (cut - base) + 1, file);
805 static int in_acclist PARAMS ((const char *const *, const char *, int));
807 /* Determine whether a file is acceptable to be followed, according to
808 lists of patterns to accept/reject. */
810 acceptable (const char *s)
814 while (l && s[l] != '/')
821 return (in_acclist ((const char *const *)opt.accepts, s, 1)
822 && !in_acclist ((const char *const *)opt.rejects, s, 1));
824 return in_acclist ((const char *const *)opt.accepts, s, 1);
826 else if (opt.rejects)
827 return !in_acclist ((const char *const *)opt.rejects, s, 1);
831 /* Compare S1 and S2 frontally; S2 must begin with S1. E.g. if S1 is
832 `/something', frontcmp() will return 1 only if S2 begins with
833 `/something'. Otherwise, 0 is returned. */
835 frontcmp (const char *s1, const char *s2)
837 for (; *s1 && *s2 && (*s1 == *s2); ++s1, ++s2);
841 /* Iterate through STRLIST, and return the first element that matches
842 S, through wildcards or front comparison (as appropriate). */
844 proclist (char **strlist, const char *s, enum accd flags)
848 for (x = strlist; *x; x++)
849 if (has_wildcards_p (*x))
851 if (fnmatch (*x, s, FNM_PATHNAME) == 0)
856 char *p = *x + ((flags & ALLABS) && (**x == '/')); /* Remove '/' */
863 /* Returns whether DIRECTORY is acceptable for download, wrt the
864 include/exclude lists.
866 If FLAGS is ALLABS, the leading `/' is ignored in paths; relative
867 and absolute paths may be freely intermixed. */
869 accdir (const char *directory, enum accd flags)
871 /* Remove starting '/'. */
872 if (flags & ALLABS && *directory == '/')
876 if (!proclist (opt.includes, directory, flags))
881 if (proclist (opt.excludes, directory, flags))
887 /* Match the end of STRING against PATTERN. For instance:
889 match_backwards ("abc", "bc") -> 1
890 match_backwards ("abc", "ab") -> 0
891 match_backwards ("abc", "abc") -> 1 */
893 match_tail (const char *string, const char *pattern)
897 for (i = strlen (string), j = strlen (pattern); i >= 0 && j >= 0; i--, j--)
898 if (string[i] != pattern[j])
900 /* If the pattern was exhausted, the match was succesful. */
907 /* Checks whether string S matches each element of ACCEPTS. A list
908 element are matched either with fnmatch() or match_tail(),
909 according to whether the element contains wildcards or not.
911 If the BACKWARD is 0, don't do backward comparison -- just compare
914 in_acclist (const char *const *accepts, const char *s, int backward)
916 for (; *accepts; accepts++)
918 if (has_wildcards_p (*accepts))
920 /* fnmatch returns 0 if the pattern *does* match the
922 if (fnmatch (*accepts, s, 0) == 0)
929 if (match_tail (s, *accepts))
934 if (!strcmp (s, *accepts))
942 /* Return the location of STR's suffix (file extension). Examples:
943 suffix ("foo.bar") -> "bar"
944 suffix ("foo.bar.baz") -> "baz"
945 suffix ("/foo/bar") -> NULL
946 suffix ("/foo.bar/baz") -> NULL */
948 suffix (const char *str)
952 for (i = strlen (str); i && str[i] != '/' && str[i] != '.'; i--)
956 return (char *)str + i;
961 /* Read a line from FP. The function reallocs the storage as needed
962 to accomodate for any length of the line. Reallocs are done
963 exponentially, doubling the storage after each overflow to minimize
964 the number of calls to realloc() and fgets(). The newline
965 character at the end of line is retained.
967 After end-of-file is encountered without anything being read, NULL
968 is returned. NULL is also returned on error. To distinguish
969 between these two cases, use the stdio function ferror().
971 A future version of this function will be rewritten to use fread()
972 instead of fgets(), and to return the length of the line, which
973 will make the function usable on files with binary content. */
976 read_whole_line (FILE *fp)
980 char *line = (char *)xmalloc (bufsize);
982 while (fgets (line + length, bufsize - length, fp))
984 length += strlen (line + length);
986 /* Possible for example when reading from a binary file where
987 a line begins with \0. */
990 if (line[length - 1] == '\n')
993 /* fgets() guarantees to read the whole line, or to use up the
994 space we've given it. We can double the buffer
997 line = xrealloc (line, bufsize);
999 if (length == 0 || ferror (fp))
1004 if (length + 1 < bufsize)
1005 /* Relieve the memory from our exponential greediness. We say
1006 `length + 1' because the terminating \0 is not included in
1007 LENGTH. We don't need to zero-terminate the string ourselves,
1008 though, because fgets() does that. */
1009 line = xrealloc (line, length + 1);
1013 /* Read FILE into memory. A pointer to `struct file_memory' are
1014 returned; use struct element `content' to access file contents, and
1015 the element `length' to know the file length. `content' is *not*
1016 zero-terminated, and you should *not* read or write beyond the [0,
1017 length) range of characters.
1019 After you are done with the file contents, call read_file_free to
1022 Depending on the operating system and the type of file that is
1023 being read, read_file() either mmap's the file into memory, or
1024 reads the file into the core using read().
1026 If file is named "-", fileno(stdin) is used for reading instead.
1027 If you want to read from a real file named "-", use "./-" instead. */
1029 struct file_memory *
1030 read_file (const char *file)
1033 struct file_memory *fm;
1035 int inhibit_close = 0;
1037 /* Some magic in the finest tradition of Perl and its kin: if FILE
1038 is "-", just use stdin. */
1041 fd = fileno (stdin);
1043 /* Note that we don't inhibit mmap() in this case. If stdin is
1044 redirected from a regular file, mmap() will still work. */
1047 fd = open (file, O_RDONLY);
1050 fm = xmalloc (sizeof (struct file_memory));
1055 if (fstat (fd, &buf) < 0)
1057 fm->length = buf.st_size;
1058 /* NOTE: As far as I know, the callers of this function never
1059 modify the file text. Relying on this would enable us to
1060 specify PROT_READ and MAP_SHARED for a marginal gain in
1061 efficiency, but at some cost to generality. */
1062 fm->content = mmap (NULL, fm->length, PROT_READ | PROT_WRITE,
1063 MAP_PRIVATE, fd, 0);
1064 if (fm->content == (char *)MAP_FAILED)
1074 /* The most common reason why mmap() fails is that FD does not point
1075 to a plain file. However, it's also possible that mmap() doesn't
1076 work for a particular type of file. Therefore, whenever mmap()
1077 fails, we just fall back to the regular method. */
1078 #endif /* HAVE_MMAP */
1081 size = 512; /* number of bytes fm->contents can
1082 hold at any given time. */
1083 fm->content = xmalloc (size);
1087 if (fm->length > size / 2)
1089 /* #### I'm not sure whether the whole exponential-growth
1090 thing makes sense with kernel read. On Linux at least,
1091 read() refuses to read more than 4K from a file at a
1092 single chunk anyway. But other Unixes might optimize it
1093 better, and it doesn't *hurt* anything, so I'm leaving
1096 /* Normally, we grow SIZE exponentially to make the number
1097 of calls to read() and realloc() logarithmic in relation
1098 to file size. However, read() can read an amount of data
1099 smaller than requested, and it would be unreasonably to
1100 double SIZE every time *something* was read. Therefore,
1101 we double SIZE only when the length exceeds half of the
1102 entire allocated size. */
1104 fm->content = xrealloc (fm->content, size);
1106 nread = read (fd, fm->content + fm->length, size - fm->length);
1108 /* Successful read. */
1109 fm->length += nread;
1119 if (size > fm->length && fm->length != 0)
1120 /* Due to exponential growth of fm->content, the allocated region
1121 might be much larger than what is actually needed. */
1122 fm->content = xrealloc (fm->content, fm->length);
1129 xfree (fm->content);
1134 /* Release the resources held by FM. Specifically, this calls
1135 munmap() or xfree() on fm->content, depending whether mmap or
1136 malloc/read were used to read in the file. It also frees the
1137 memory needed to hold the FM structure itself. */
1140 read_file_free (struct file_memory *fm)
1145 munmap (fm->content, fm->length);
1150 xfree (fm->content);
1155 /* Free the pointers in a NULL-terminated vector of pointers, then
1156 free the pointer itself. */
1158 free_vec (char **vec)
1169 /* Append vector V2 to vector V1. The function frees V2 and
1170 reallocates V1 (thus you may not use the contents of neither
1171 pointer after the call). If V1 is NULL, V2 is returned. */
1173 merge_vecs (char **v1, char **v2)
1183 /* To avoid j == 0 */
1188 for (i = 0; v1[i]; i++);
1190 for (j = 0; v2[j]; j++);
1191 /* Reallocate v1. */
1192 v1 = (char **)xrealloc (v1, (i + j + 1) * sizeof (char **));
1193 memcpy (v1 + i, v2, (j + 1) * sizeof (char *));
1198 /* A set of simple-minded routines to store strings in a linked list.
1199 This used to also be used for searching, but now we have hash
1202 /* It's a shame that these simple things like linked lists and hash
1203 tables (see hash.c) need to be implemented over and over again. It
1204 would be nice to be able to use the routines from glib -- see
1205 www.gtk.org for details. However, that would make Wget depend on
1206 glib, and I want to avoid dependencies to external libraries for
1207 reasons of convenience and portability (I suspect Wget is more
1208 portable than anything ever written for Gnome). */
1210 /* Append an element to the list. If the list has a huge number of
1211 elements, this can get slow because it has to find the list's
1212 ending. If you think you have to call slist_append in a loop,
1213 think about calling slist_prepend() followed by slist_nreverse(). */
1216 slist_append (slist *l, const char *s)
1218 slist *newel = (slist *)xmalloc (sizeof (slist));
1221 newel->string = xstrdup (s);
1226 /* Find the last element. */
1233 /* Prepend S to the list. Unlike slist_append(), this is O(1). */
1236 slist_prepend (slist *l, const char *s)
1238 slist *newel = (slist *)xmalloc (sizeof (slist));
1239 newel->string = xstrdup (s);
1244 /* Destructively reverse L. */
1247 slist_nreverse (slist *l)
1252 slist *next = l->next;
1260 /* Is there a specific entry in the list? */
1262 slist_contains (slist *l, const char *s)
1264 for (; l; l = l->next)
1265 if (!strcmp (l->string, s))
1270 /* Free the whole slist. */
1272 slist_free (slist *l)
1283 /* Sometimes it's useful to create "sets" of strings, i.e. special
1284 hash tables where you want to store strings as keys and merely
1285 query for their existence. Here is a set of utility routines that
1286 makes that transparent. */
1289 string_set_add (struct hash_table *ht, const char *s)
1291 /* First check whether the set element already exists. If it does,
1292 do nothing so that we don't have to free() the old element and
1293 then strdup() a new one. */
1294 if (hash_table_contains (ht, s))
1297 /* We use "1" as value. It provides us a useful and clear arbitrary
1298 value, and it consumes no memory -- the pointers to the same
1299 string "1" will be shared by all the key-value pairs in all `set'
1301 hash_table_put (ht, xstrdup (s), "1");
1304 /* Synonym for hash_table_contains... */
1307 string_set_contains (struct hash_table *ht, const char *s)
1309 return hash_table_contains (ht, s);
1313 string_set_free_mapper (void *key, void *value_ignored, void *arg_ignored)
1320 string_set_free (struct hash_table *ht)
1322 hash_table_map (ht, string_set_free_mapper, NULL);
1323 hash_table_destroy (ht);
1327 free_keys_and_values_mapper (void *key, void *value, void *arg_ignored)
1334 /* Another utility function: call free() on all keys and values of HT. */
1337 free_keys_and_values (struct hash_table *ht)
1339 hash_table_map (ht, free_keys_and_values_mapper, NULL);
1343 /* Engine for legible and legible_very_long; this function works on
1347 legible_1 (const char *repr)
1349 static char outbuf[128];
1354 /* Reset the pointers. */
1357 /* If the number is negative, shift the pointers. */
1363 /* How many digits before the first separator? */
1364 mod = strlen (inptr) % 3;
1366 for (i = 0; i < mod; i++)
1367 *outptr++ = inptr[i];
1368 /* Now insert the rest of them, putting separator before every
1370 for (i1 = i, i = 0; inptr[i1]; i++, i1++)
1372 if (i % 3 == 0 && i1 != 0)
1374 *outptr++ = inptr[i1];
1376 /* Zero-terminate the string. */
1381 /* Legible -- return a static pointer to the legibly printed long. */
1386 /* Print the number into the buffer. */
1387 long_to_string (inbuf, l);
1388 return legible_1 (inbuf);
1391 /* Write a string representation of NUMBER into the provided buffer.
1392 We cannot use sprintf() because we cannot be sure whether the
1393 platform supports printing of what we chose for VERY_LONG_TYPE.
1395 Example: Gcc supports `long long' under many platforms, but on many
1396 of those the native libc knows nothing of it and therefore cannot
1399 How long BUFFER needs to be depends on the platform and the content
1400 of NUMBER. For 64-bit VERY_LONG_TYPE (the most common case), 24
1401 bytes are sufficient. Using more might be a good idea.
1403 This function does not go through the hoops that long_to_string
1404 goes to because it doesn't aspire to be fast. (It's called perhaps
1405 once in a Wget run.) */
1408 very_long_to_string (char *buffer, VERY_LONG_TYPE number)
1413 /* Print the number backwards... */
1416 buffer[i++] = '0' + number % 10;
1421 /* ...and reverse the order of the digits. */
1422 for (j = 0; j < i / 2; j++)
1425 buffer[j] = buffer[i - 1 - j];
1426 buffer[i - 1 - j] = c;
1431 /* The same as legible(), but works on VERY_LONG_TYPE. See sysdep.h. */
1433 legible_very_long (VERY_LONG_TYPE l)
1436 /* Print the number into the buffer. */
1437 very_long_to_string (inbuf, l);
1438 return legible_1 (inbuf);
1441 /* Count the digits in a (long) integer. */
1451 while ((a /= 10) != 0)
1456 #define ONE_DIGIT(figure) *p++ = n / (figure) + '0'
1457 #define ONE_DIGIT_ADVANCE(figure) (ONE_DIGIT (figure), n %= (figure))
1459 #define DIGITS_1(figure) ONE_DIGIT (figure)
1460 #define DIGITS_2(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_1 ((figure) / 10)
1461 #define DIGITS_3(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_2 ((figure) / 10)
1462 #define DIGITS_4(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_3 ((figure) / 10)
1463 #define DIGITS_5(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_4 ((figure) / 10)
1464 #define DIGITS_6(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_5 ((figure) / 10)
1465 #define DIGITS_7(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_6 ((figure) / 10)
1466 #define DIGITS_8(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_7 ((figure) / 10)
1467 #define DIGITS_9(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_8 ((figure) / 10)
1468 #define DIGITS_10(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_9 ((figure) / 10)
1470 /* DIGITS_<11-20> are only used on machines with 64-bit longs. */
1472 #define DIGITS_11(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_10 ((figure) / 10)
1473 #define DIGITS_12(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_11 ((figure) / 10)
1474 #define DIGITS_13(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_12 ((figure) / 10)
1475 #define DIGITS_14(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_13 ((figure) / 10)
1476 #define DIGITS_15(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_14 ((figure) / 10)
1477 #define DIGITS_16(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_15 ((figure) / 10)
1478 #define DIGITS_17(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_16 ((figure) / 10)
1479 #define DIGITS_18(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_17 ((figure) / 10)
1480 #define DIGITS_19(figure) ONE_DIGIT_ADVANCE (figure); DIGITS_18 ((figure) / 10)
1482 /* Print NUMBER to BUFFER in base 10. This is completely equivalent
1483 to `sprintf(buffer, "%ld", number)', only much faster.
1485 The speedup may make a difference in programs that frequently
1486 convert numbers to strings. Some implementations of sprintf,
1487 particularly the one in GNU libc, have been known to be extremely
1488 slow compared to this function.
1490 BUFFER should accept as many bytes as you expect the number to take
1491 up. On machines with 64-bit longs the maximum needed size is 24
1492 bytes. That includes the worst-case digits, the optional `-' sign,
1493 and the trailing \0. */
1496 long_to_string (char *buffer, long number)
1501 #if (SIZEOF_LONG != 4) && (SIZEOF_LONG != 8)
1502 /* We are running in a strange or misconfigured environment. Let
1503 sprintf cope with it. */
1504 sprintf (buffer, "%ld", n);
1505 #else /* (SIZEOF_LONG == 4) || (SIZEOF_LONG == 8) */
1513 if (n < 10) { DIGITS_1 (1); }
1514 else if (n < 100) { DIGITS_2 (10); }
1515 else if (n < 1000) { DIGITS_3 (100); }
1516 else if (n < 10000) { DIGITS_4 (1000); }
1517 else if (n < 100000) { DIGITS_5 (10000); }
1518 else if (n < 1000000) { DIGITS_6 (100000); }
1519 else if (n < 10000000) { DIGITS_7 (1000000); }
1520 else if (n < 100000000) { DIGITS_8 (10000000); }
1521 else if (n < 1000000000) { DIGITS_9 (100000000); }
1522 #if SIZEOF_LONG == 4
1523 /* ``if (1)'' serves only to preserve editor indentation. */
1524 else if (1) { DIGITS_10 (1000000000); }
1525 #else /* SIZEOF_LONG != 4 */
1526 else if (n < 10000000000L) { DIGITS_10 (1000000000L); }
1527 else if (n < 100000000000L) { DIGITS_11 (10000000000L); }
1528 else if (n < 1000000000000L) { DIGITS_12 (100000000000L); }
1529 else if (n < 10000000000000L) { DIGITS_13 (1000000000000L); }
1530 else if (n < 100000000000000L) { DIGITS_14 (10000000000000L); }
1531 else if (n < 1000000000000000L) { DIGITS_15 (100000000000000L); }
1532 else if (n < 10000000000000000L) { DIGITS_16 (1000000000000000L); }
1533 else if (n < 100000000000000000L) { DIGITS_17 (10000000000000000L); }
1534 else if (n < 1000000000000000000L) { DIGITS_18 (100000000000000000L); }
1535 else { DIGITS_19 (1000000000000000000L); }
1536 #endif /* SIZEOF_LONG != 4 */
1539 #endif /* (SIZEOF_LONG == 4) || (SIZEOF_LONG == 8) */
1543 #undef ONE_DIGIT_ADVANCE
1565 /* Support for timers. */
1567 #undef TIMER_WINDOWS
1568 #undef TIMER_GETTIMEOFDAY
1571 /* Depending on the OS and availability of gettimeofday(), one and
1572 only one of the above constants will be defined. Virtually all
1573 modern Unix systems will define TIMER_GETTIMEOFDAY; Windows will
1574 use TIMER_WINDOWS. TIMER_TIME is a catch-all method for
1575 non-Windows systems without gettimeofday.
1577 #### Perhaps we should also support ftime(), which exists on old
1578 BSD 4.2-influenced systems? (It also existed under MS DOS Borland
1579 C, if memory serves me.) */
1582 # define TIMER_WINDOWS
1583 #else /* not WINDOWS */
1584 # ifdef HAVE_GETTIMEOFDAY
1585 # define TIMER_GETTIMEOFDAY
1589 #endif /* not WINDOWS */
1592 #ifdef TIMER_GETTIMEOFDAY
1601 #ifdef TIMER_WINDOWS
1602 ULARGE_INTEGER wintime;
1606 /* Allocate a timer. It is not legal to do anything with a freshly
1607 allocated timer, except call wtimer_reset() or wtimer_delete(). */
1610 wtimer_allocate (void)
1612 struct wget_timer *wt =
1613 (struct wget_timer *)xmalloc (sizeof (struct wget_timer));
1617 /* Allocate a new timer and reset it. Return the new timer. */
1622 struct wget_timer *wt = wtimer_allocate ();
1627 /* Free the resources associated with the timer. Its further use is
1631 wtimer_delete (struct wget_timer *wt)
1636 /* Reset timer WT. This establishes the starting point from which
1637 wtimer_elapsed() will return the number of elapsed
1638 milliseconds. It is allowed to reset a previously used timer. */
1641 wtimer_reset (struct wget_timer *wt)
1643 #ifdef TIMER_GETTIMEOFDAY
1645 gettimeofday (&t, NULL);
1646 wt->secs = t.tv_sec;
1647 wt->usecs = t.tv_usec;
1651 wt->secs = time (NULL);
1654 #ifdef TIMER_WINDOWS
1657 GetSystemTime (&st);
1658 SystemTimeToFileTime (&st, &ft);
1659 wt->wintime.HighPart = ft.dwHighDateTime;
1660 wt->wintime.LowPart = ft.dwLowDateTime;
1664 /* Return the number of milliseconds elapsed since the timer was last
1665 reset. It is allowed to call this function more than once to get
1666 increasingly higher elapsed values. */
1669 wtimer_elapsed (struct wget_timer *wt)
1671 #ifdef TIMER_GETTIMEOFDAY
1673 gettimeofday (&t, NULL);
1674 return (t.tv_sec - wt->secs) * 1000 + (t.tv_usec - wt->usecs) / 1000;
1678 time_t now = time (NULL);
1679 return 1000 * (now - wt->secs);
1686 GetSystemTime (&st);
1687 SystemTimeToFileTime (&st, &ft);
1688 uli.HighPart = ft.dwHighDateTime;
1689 uli.LowPart = ft.dwLowDateTime;
1690 return (long)((uli.QuadPart - wt->wintime.QuadPart) / 10000);
1694 /* Return the assessed granularity of the timer implementation. This
1695 is important for certain code that tries to deal with "zero" time
1699 wtimer_granularity (void)
1701 #ifdef TIMER_GETTIMEOFDAY
1702 /* Granularity of gettimeofday is hugely architecture-dependent.
1703 However, it appears that on modern machines it is better than
1709 /* This is clear. */
1713 #ifdef TIMER_WINDOWS
1719 /* This should probably be at a better place, but it doesn't really
1720 fit into html-parse.c. */
1722 /* The function returns the pointer to the malloc-ed quoted version of
1723 string s. It will recognize and quote numeric and special graphic
1724 entities, as per RFC1866:
1732 No other entities are recognized or replaced. */
1734 html_quote_string (const char *s)
1740 /* Pass through the string, and count the new size. */
1741 for (i = 0; *s; s++, i++)
1744 i += 4; /* `amp;' */
1745 else if (*s == '<' || *s == '>')
1746 i += 3; /* `lt;' and `gt;' */
1747 else if (*s == '\"')
1748 i += 5; /* `quot;' */
1752 res = (char *)xmalloc (i + 1);
1754 for (p = res; *s; s++)
1767 *p++ = (*s == '<' ? 'l' : 'g');
1794 /* Determine the width of the terminal we're running on. If that's
1795 not possible, return 0. */
1798 determine_screen_width (void)
1800 /* If there's a way to get the terminal size using POSIX
1801 tcgetattr(), somebody please tell me. */
1804 #else /* TIOCGWINSZ */
1808 if (opt.lfilename != NULL)
1811 fd = fileno (stderr);
1812 if (ioctl (fd, TIOCGWINSZ, &wsz) < 0)
1813 return 0; /* most likely ENOTTY */
1816 #endif /* TIOCGWINSZ */
1820 /* A debugging function for checking whether an MD5 library works. */
1822 #include "gen-md5.h"
1825 debug_test_md5 (char *buf)
1827 unsigned char raw[16];
1828 static char res[33];
1832 ALLOCA_MD5_CONTEXT (ctx);
1835 gen_md5_update ((unsigned char *)buf, strlen (buf), ctx);
1836 gen_md5_finish (ctx, raw);
1843 *p2++ = XDIGIT_TO_xchar (*p1 >> 4);
1844 *p2++ = XDIGIT_TO_xchar (*p1 & 0xf);