]> sjero.net Git - wget/blobdiff - src/html-url.c
[svn] Download URLs from <object data="...">.
[wget] / src / html-url.c
index f37ac85ee2a776ffcbd407286397c11773efdfb0..89b93539d65f926c26997b76bec953fb26faecce 100644 (file)
@@ -81,6 +81,7 @@ enum {
   TAG_LAYER,
   TAG_LINK,
   TAG_META,
+  TAG_OBJECT,
   TAG_OVERLAY,
   TAG_SCRIPT,
   TAG_TABLE,
@@ -111,6 +112,7 @@ static struct known_tag {
   { TAG_LAYER,  "layer",       tag_find_urls },
   { TAG_LINK,   "link",        tag_handle_link },
   { TAG_META,   "meta",        tag_handle_meta },
+  { TAG_OBJECT,  "object",     tag_find_urls },
   { TAG_OVERLAY, "overlay",    tag_find_urls },
   { TAG_SCRIPT,         "script",      tag_find_urls },
   { TAG_TABLE,  "table",       tag_find_urls },
@@ -157,6 +159,7 @@ static struct {
   { TAG_IMG,           "src",          ATTR_INLINE },
   { TAG_INPUT,         "src",          ATTR_INLINE },
   { TAG_LAYER,         "src",          ATTR_INLINE | ATTR_HTML },
+  { TAG_OBJECT,                "data",         ATTR_INLINE },
   { TAG_OVERLAY,       "src",          ATTR_INLINE | ATTR_HTML },
   { TAG_SCRIPT,                "src",          ATTR_INLINE },
   { TAG_TABLE,         "background",   ATTR_INLINE },
@@ -227,9 +230,10 @@ init_interesting (void)
   /* Add the attributes we care about. */
   interesting_attributes = make_nocase_string_hash_table (10);
   for (i = 0; i < countof (additional_attributes); i++)
-    string_set_add (interesting_attributes, additional_attributes[i]);
+    hash_table_put (interesting_attributes, additional_attributes[i], "1");
   for (i = 0; i < countof (tag_url_attributes); i++)
-    string_set_add (interesting_attributes, tag_url_attributes[i].attr_name);
+    hash_table_put (interesting_attributes,
+                   tag_url_attributes[i].attr_name, "1");
 }
 
 /* Find the value of attribute named NAME in the taginfo TAG.  If the
@@ -327,10 +331,7 @@ append_url (const char *link_uri,
 
   DEBUGP (("appending \"%s\" to urlpos.\n", url->url));
 
-  newel = (struct urlpos *)xmalloc (sizeof (struct urlpos));
-  memset (newel, 0, sizeof (*newel));
-
-  newel->next = NULL;
+  newel = xnew0 (struct urlpos);
   newel->url = url;
   newel->pos = tag->attrs[attrind].value_raw_beginning - ctx->text;
   newel->size = tag->attrs[attrind].value_raw_size;
@@ -625,7 +626,7 @@ get_urls_html (const char *file, const char *url, int *meta_disallow_follow)
   if (meta_disallow_follow)
     *meta_disallow_follow = ctx.nofollow;
 
-  FREE_MAYBE (ctx.base);
+  xfree_null (ctx.base);
   read_file_free (fm);
   return ctx.head;
 }
@@ -700,8 +701,7 @@ get_urls_file (const char *file)
        }
       xfree (url_text);
 
-      entry = (struct urlpos *)xmalloc (sizeof (struct urlpos));
-      memset (entry, 0, sizeof (*entry));
+      entry = xnew0 (struct urlpos);
       entry->next = NULL;
       entry->url = url;
 
@@ -718,6 +718,10 @@ get_urls_file (const char *file)
 void
 cleanup_html_url (void)
 {
-  FREE_MAYBE (interesting_tags);
-  FREE_MAYBE (interesting_attributes);
+  /* Destroy the hash tables.  The hash table keys and values are not
+     allocated by this code, so we don't need to free them here.  */
+  if (interesting_tags)
+    hash_table_destroy (interesting_tags);
+  if (interesting_attributes)
+    hash_table_destroy (interesting_attributes);
 }