]> gitweb.michael.orlitzky.com - libsvgtiny.git/blobdiff - src/svgtiny_css.c
src/svgtiny_css.c: change lwc_string_destroy -> lwc_string_unref
[libsvgtiny.git] / src / svgtiny_css.c
index 7e203a2b70f09b3127108aca03f18e6269a9d582..96991ddfcfcfe4684b9411709c44367b4651fa92 100644 (file)
@@ -4,6 +4,9 @@
 #include "svgtiny.h"
 #include "svgtiny_internal.h"
 
+css_error svgtiny_resolve_url(void *pw, const char *base,
+       lwc_string *rel, lwc_string **abs);
+
 /* select handler callbacks */
 static css_error node_name(void *pw, void *node, css_qname *qname);
 static css_error node_classes(void *pw, void *node,
@@ -649,15 +652,13 @@ css_error node_has_name(void *pw, void *node,
 
        /* Start by checking to see if qname is the universal selector */
        state = (struct svgtiny_parse_state *)pw;
-       if (lwc_string_isequal(qname->name,
-                       state->interned_universal, match) == lwc_error_ok) {
-         if (*match) {
+       *match = dom_string_lwc_isequal(state->interned_universal, qname->name);
+       if (*match) {
                /* It's the universal selector. In NetSurf, all node
                 * names match the universal selector, and nothing in
                 * the libcss documentation suggests another approach,
                 * so we follow NetSurf here. */
                return CSS_OK;
-         }
        }
 
        err = dom_node_get_node_name((dom_node *)node, &name);
@@ -1202,7 +1203,7 @@ static css_error _node_has_attribute_substring(void *pw, void *node,
 {
        UNUSED(pw);
        dom_string *name;
-       dom_string *attr_val;
+       dom_string *attr_val = NULL;
        dom_exception err;
        size_t attr_len;  /* length of attr_val */
        size_t substrlen; /* length of "substring" */
@@ -1804,6 +1805,11 @@ static css_error node_is_lang(void *pw, void *node,
        css_qname attr;
        attr.ns = NULL;
 
+       /* The string "lang" is already interned in our
+        * css_select_ctx, but its members aren't visible to
+        * us. Trying to intern it again will get a reference to the
+        * existing string, so it's important that we unref (as
+        * opposed to destroy) it later. */
        if (lwc_intern_string("lang", 4, &attr.name) != lwc_error_ok) {
                return CSS_NOMEM;
        }
@@ -1817,12 +1823,12 @@ static css_error node_is_lang(void *pw, void *node,
                c_err = _node_has_attribute_substring(pw, (void *)n, &attr,
                                                lang, &match, true);
                if (c_err != CSS_OK) {
-                       lwc_string_destroy(attr.name);
+                       lwc_string_unref(attr.name);
                        return c_err;
                }
                if (match) {
                        /* matched this element; we're done */
-                       lwc_string_destroy(attr.name);
+                       lwc_string_unref(attr.name);
                        *is_lang = true;
                        return CSS_OK;
                }
@@ -1830,14 +1836,14 @@ static css_error node_is_lang(void *pw, void *node,
                /* no match on this element, try its parent */
                d_err = dom_node_get_parent_node(n, &p);
                if (d_err != DOM_NO_ERR) {
-                       lwc_string_destroy(attr.name);
+                       lwc_string_unref(attr.name);
                        return CSS_NOMEM;
                }
                n = p;
        }
 
        /* If we never find a match we may wind up here */
-       lwc_string_destroy(attr.name);
+       lwc_string_unref(attr.name);
        return CSS_OK;
 }
 
@@ -1955,6 +1961,7 @@ static void svgtiny_dom_user_data_handler(dom_node_operation operation,
                        css_libcss_node_data_handler(&svgtiny_select_handler,
                                                CSS_NODE_DELETED,
                                                NULL, src, NULL, data);
+                       break;
                default:
                        /* Our list of cases should have been exhaustive */
                        assert(false);