From: Michael Orlitzky Date: Thu, 12 Oct 2023 02:04:53 +0000 (-0400) Subject: src/svgtiny{.c,_internal.h}: intern SVG's XML namespace URI X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=545123c6ec9a3d3903e713c1c2919762417538dd;p=libsvgtiny.git src/svgtiny{.c,_internal.h}: intern SVG's XML namespace URI Intern the string "http://www.w3.org/2000/svg" in the parser state for later use in libcss's node_name() select handler. --- diff --git a/src/svgtiny.c b/src/svgtiny.c index d16a761..f631930 100644 --- a/src/svgtiny.c +++ b/src/svgtiny.c @@ -725,6 +725,19 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram, #include "svgtiny_strings.h" #undef SVGTINY_STRING_ACTION2 + /* Intern SVG's xmlns separately because it's an lwc_string + * and not a dom_string. We initialize its pointer to NULL + * because the "cleanup:" test to see if it needs to be free'd + * looks for NULL. Returning a LIBDOM_ERROR on failure is not + * perfect but it's the closest of the available options. */ + state.interned_svg_xmlns = NULL; + if (lwc_intern_string("http://www.w3.org/2000/svg", + 26, + &state.interned_svg_xmlns) != lwc_error_ok) { + code = svgtiny_LIBDOM_ERROR; + goto cleanup; + } + svgtiny_parse_position_attributes(svg, state, &x, &y, &width, &height); diagram->width = width; diagram->height = height; @@ -762,6 +775,11 @@ cleanup: dom_string_unref(state.interned_##s); #include "svgtiny_strings.h" #undef SVGTINY_STRING_ACTION2 + + if (state.interned_svg_xmlns != NULL) { + lwc_string_unref(state.interned_svg_xmlns); + } + return code; } diff --git a/src/svgtiny_internal.h b/src/svgtiny_internal.h index 6b7bd92..ba0db70 100644 --- a/src/svgtiny_internal.h +++ b/src/svgtiny_internal.h @@ -68,6 +68,14 @@ struct svgtiny_parse_state { #include "svgtiny_strings.h" #undef SVGTINY_STRING_ACTION2 + /* Where we store the interned copy of the SVG XML namespace, + * + * http://www.w3.org/2000/svg + * + * We handle it separately it has a different type + * (lwc_string) than those above (dom_string). + */ + lwc_string *interned_svg_xmlns; }; struct svgtiny_list;