]> sjero.net Git - wget/blobdiff - src/utils.c
Fix -c with servers that don't specify a content-length
[wget] / src / utils.c
index 55a8a8d286959dc50aa4d15d8b51a1840c7ca9e7..faae62e1b334b93422dd0fa2f5fb8f1880b99e79 100644 (file)
@@ -1844,12 +1844,12 @@ number_to_static_string (wgint number)
   return buf;
 }
 
-/* Converts the byte to bits format if --bits option is enabled
+/* Converts the byte to bits format if --report-bps option is enabled
  */
 wgint
 convert_to_bits (wgint num)
 {
-  if (opt.bits_fmt)
+  if (opt.report_bps)
     return num * 8;
   return num;
 }
@@ -2355,7 +2355,7 @@ compile_posix_regex (const char *str)
     {
       int errbuf_size = regerror (errcode, (regex_t *) regex, NULL, 0);
       char *errbuf = xmalloc (errbuf_size);
-      errbuf_size = regerror (errcode, (regex_t *) regex, errbuf, errbuf_size);
+      regerror (errcode, (regex_t *) regex, errbuf, errbuf_size);
       fprintf (stderr, _("Invalid regular expression %s, %s\n"),
                quote (str), errbuf);
       xfree (errbuf);
@@ -2402,7 +2402,7 @@ match_posix_regex (const void *regex, const char *str)
     {
       int errbuf_size = regerror (rc, opt.acceptregex, NULL, 0);
       char *errbuf = xmalloc (errbuf_size);
-      errbuf_size = regerror (rc, opt.acceptregex, errbuf, errbuf_size);
+      regerror (rc, opt.acceptregex, errbuf, errbuf_size);
       logprintf (LOG_VERBOSE, _("Error while matching %s: %d\n"),
                  quote (str), rc);
       xfree (errbuf);
@@ -2494,6 +2494,60 @@ print_decimal (double number)
   return buf;
 }
 
+/* Get the maximum name length for the given path. */
+/* Return 0 if length is unknown. */
+size_t
+get_max_length (const char *path, int length, int name)
+{
+  long ret;
+  char *p, *d;
+
+  /* Make a copy of the path that we can modify. */
+  p = path ? strdupdelim (path, path + length) : strdup ("");
+
+  for (;;)
+    {
+      errno = 0;
+      /* For an empty path query the current directory. */
+#if HAVE_PATHCONF
+      ret = pathconf (*p ? p : ".", name);
+      if (!(ret < 0 && errno == ENOENT))
+        break;
+#else
+      ret = PATH_MAX;
+#endif
+
+      /* The path does not exist yet, but may be created. */
+      /* Already at current or root directory, give up. */
+      if (!*p || strcmp (p, "/") == 0)
+        break;
+
+      /* Remove one directory level and try again. */
+      d = strrchr (p, '/');
+      if (d == p)
+        p[1] = '\0';  /* check root directory */
+      else if (d)
+        *d = '\0';  /* remove last directory part */
+      else
+        *p = '\0';  /* check current directory */
+    }
+
+  xfree (p);
+
+  if (ret < 0)
+    {
+      /* pathconf() has a message for us. */
+      if (errno != 0)
+          perror ("pathconf");
+
+      /* If (errno == 0) then there is no max length.
+         Even on error return 0 so the caller can continue. */
+      return 0;
+    }
+
+  return ret;
+}
+
 #ifdef TESTING
 
 const char *