From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/xmllite/writer.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/dlls/xmllite/writer.c b/dlls/xmllite/writer.c index bd315532629..ac5e2d6150d 100644 --- a/dlls/xmllite/writer.c +++ b/dlls/xmllite/writer.c @@ -962,13 +962,18 @@ static HRESULT WINAPI xmlwriter_WriteAttributes(IXmlWriter *iface, IXmlReader *r return hr; } -static void write_output_attribute(xmlwriter *writer, const WCHAR *prefix, int prefix_len, - const WCHAR *local, int local_len, const WCHAR *value) +static HRESULT write_output_attribute(xmlwriter *writer, const WCHAR *prefix, int prefix_len, + const WCHAR *local, int local_len, const WCHAR *value, HRESULT *hr) { - write_output_buffer_char(writer->output, ' '); + if (FAILED(*hr)) + return *hr; + + write_output(writer, L" ", 1, hr); write_output_qname(writer->output, prefix, prefix_len, local, local_len); - write_output_buffer_char(writer->output, '='); - write_output_buffer_quoted(writer->output, value, -1); + write_output(writer, L"=", 1, hr); + write_output_quoted(writer, value, -1, hr); + + return *hr; } static BOOL is_valid_xml_space_value(const WCHAR *value) @@ -1020,10 +1025,7 @@ static HRESULT WINAPI xmlwriter_WriteAttributeString(IXmlWriter *iface, LPCWSTR /* Trivial case, no prefix. */ if (prefix_len == 0 && is_empty_string(uri)) - { - write_output_attribute(writer, prefix, prefix_len, local, local_len, value); - return S_OK; - } + return write_output_attribute(writer, prefix, prefix_len, local, local_len, value, &hr); /* Predefined "xml" prefix. */ if (prefix_len && !wcscmp(prefix, L"xml")) @@ -1036,9 +1038,7 @@ static HRESULT WINAPI xmlwriter_WriteAttributeString(IXmlWriter *iface, LPCWSTR if (!is_empty_string(uri)) return WR_E_XMLPREFIXDECLARATION; - write_output_attribute(writer, prefix, prefix_len, local, local_len, value); - - return S_OK; + return write_output_attribute(writer, prefix, prefix_len, local, local_len, value, &hr); } if (is_xmlns_prefix || (prefix_len == 0 && uri && !wcscmp(uri, xmlnsuriW))) @@ -1051,17 +1051,12 @@ static HRESULT WINAPI xmlwriter_WriteAttributeString(IXmlWriter *iface, LPCWSTR ns = writer_push_ns(writer, local, local_len, value); ns->emitted = TRUE; - write_output_attribute(writer, L"xmlns", 5, local, local_len, value); - - return S_OK; + return write_output_attribute(writer, L"xmlns", 5, local, local_len, value, &hr); } /* Ignore prefix if URI wasn't specified. */ if (is_xmlns_local && is_empty_string(uri)) - { - write_output_attribute(writer, NULL, 0, L"xmlns", 5, value); - return S_OK; - } + return write_output_attribute(writer, NULL, 0, L"xmlns", 5, value, &hr); if (!(ns = writer_find_ns(writer, prefix, uri))) { @@ -1075,11 +1070,11 @@ static HRESULT WINAPI xmlwriter_WriteAttributeString(IXmlWriter *iface, LPCWSTR } if (ns) - write_output_attribute(writer, ns->prefix, ns->prefix_len, local, local_len, value); + hr = write_output_attribute(writer, ns->prefix, ns->prefix_len, local, local_len, value, &hr); else - write_output_attribute(writer, prefix, prefix_len, local, local_len, value); + hr = write_output_attribute(writer, prefix, prefix_len, local, local_len, value, &hr); - return S_OK; + return hr; } static HRESULT write_cdata_section(xmlwriter *writer, const WCHAR *data, int len) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9066