static HRESULT WINAPI xmlwriter_WriteAttributeString(IXmlWriter *iface, LPCWSTR ns_prefix, LPCWSTR local_name, LPCWSTR ns_uri, LPCWSTR value) { static const WCHAR eqW[] = {'=','"'}; xmlwriter *This = impl_from_IXmlWriter(iface); TRACE("%p %s %s %s %s\n", This, debugstr_w(ns_prefix), debugstr_w(local_name), debugstr_w(ns_uri), debugstr_w(value)); switch (This->state) { case XmlWriterState_Initial: return E_UNEXPECTED; case XmlWriterState_Ready: case XmlWriterState_DocClosed: This->state = XmlWriterState_DocClosed; return WR_E_INVALIDACTION; default: ; } if (ns_prefix || ns_uri) { FIXME("namespaces are not supported.\n"); return E_NOTIMPL; } write_output_buffer(This->output, spaceW, ARRAY_SIZE(spaceW)); write_output_buffer(This->output, local_name, -1); write_output_buffer(This->output, eqW, ARRAY_SIZE(eqW)); write_output_buffer(This->output, value, -1); write_output_buffer(This->output, quoteW, ARRAY_SIZE(quoteW)); return S_OK; }
static HRESULT write_output_buffer_quoted(xmlwriteroutput *output, const WCHAR *data, int len) { write_output_buffer(output, quoteW, ARRAY_SIZE(quoteW)); write_output_buffer(output, data, len); write_output_buffer(output, quoteW, ARRAY_SIZE(quoteW)); return S_OK; }
static HRESULT WINAPI xmlwriter_WriteEndElement(IXmlWriter *iface) { xmlwriter *This = impl_from_IXmlWriter(iface); struct element *element; TRACE("%p\n", This); element = pop_element(This); if (!element) return WR_E_INVALIDACTION; if (This->starttagopen) { static WCHAR closetagW[] = {' ','/','>'}; write_output_buffer(This->output, closetagW, ARRAY_SIZE(closetagW)); This->starttagopen = FALSE; } else { /* write full end tag */ write_output_buffer(This->output, closeelementW, ARRAY_SIZE(closeelementW)); write_output_buffer(This->output, element->qname, element->len); write_output_buffer(This->output, gtW, ARRAY_SIZE(gtW)); } return S_OK; }
static HRESULT WINAPI xmlwriter_WriteStartElement(IXmlWriter *iface, LPCWSTR prefix, LPCWSTR local_name, LPCWSTR uri) { xmlwriter *This = impl_from_IXmlWriter(iface); struct element *element; TRACE("(%p)->(%s %s %s)\n", This, wine_dbgstr_w(prefix), wine_dbgstr_w(local_name), wine_dbgstr_w(uri)); if (This->state == XmlWriterState_Initial) return E_UNEXPECTED; if (!local_name) return E_INVALIDARG; /* close pending element */ if (This->starttagopen) write_output_buffer(This->output, gtW, ARRAY_SIZE(gtW)); element = alloc_element(This, prefix, local_name); if (!element) return E_OUTOFMEMORY; write_encoding_bom(This); This->state = XmlWriterState_ElemStarted; This->starttagopen = TRUE; push_element(This, element); write_output_buffer(This->output, ltW, ARRAY_SIZE(ltW)); write_output_qname(This->output, prefix, local_name); return S_OK; }
static HRESULT WINAPI xmlwriter_WriteElementString(IXmlWriter *iface, LPCWSTR prefix, LPCWSTR local_name, LPCWSTR uri, LPCWSTR value) { xmlwriter *This = impl_from_IXmlWriter(iface); TRACE("(%p)->(%s %s %s %s)\n", This, wine_dbgstr_w(prefix), wine_dbgstr_w(local_name), wine_dbgstr_w(uri), wine_dbgstr_w(value)); switch (This->state) { case XmlWriterState_Initial: return E_UNEXPECTED; case XmlWriterState_ElemStarted: writer_close_starttag(This); break; default: ; } write_encoding_bom(This); write_output_buffer(This->output, ltW, ARRAY_SIZE(ltW)); write_output_qname(This->output, prefix, local_name); write_output_buffer(This->output, gtW, ARRAY_SIZE(gtW)); if (value) write_output_buffer(This->output, value, -1); write_output_buffer(This->output, closeelementW, ARRAY_SIZE(closeelementW)); write_output_qname(This->output, prefix, local_name); write_output_buffer(This->output, gtW, ARRAY_SIZE(gtW)); This->state = XmlWriterState_Content; return S_OK; }
static HRESULT WINAPI xmlwriter_WriteFullEndElement(IXmlWriter *iface) { xmlwriter *This = impl_from_IXmlWriter(iface); struct element *element; TRACE("%p\n", This); switch (This->state) { case XmlWriterState_Initial: return E_UNEXPECTED; case XmlWriterState_Ready: case XmlWriterState_DocClosed: This->state = XmlWriterState_DocClosed; return WR_E_INVALIDACTION; default: ; } element = pop_element(This); if (!element) return WR_E_INVALIDACTION; /* write full end tag */ write_output_buffer(This->output, closeelementW, ARRAY_SIZE(closeelementW)); write_output_buffer(This->output, element->qname, element->len); write_output_buffer(This->output, gtW, ARRAY_SIZE(gtW)); This->starttagopen = FALSE; return S_OK; }
static HRESULT write_output_buffer_quoted(xmlwriteroutput *output, const WCHAR *data, int len) { static const WCHAR quotW[] = {'"'}; write_output_buffer(output, quotW, 1); write_output_buffer(output, data, len); write_output_buffer(output, quotW, 1); return S_OK; }
static void write_cdata_section(xmlwriteroutput *output, const WCHAR *data, int len) { static const WCHAR cdataopenW[] = {'<','!','[','C','D','A','T','A','['}; static const WCHAR cdatacloseW[] = {']',']','>'}; write_output_buffer(output, cdataopenW, ARRAY_SIZE(cdataopenW)); if (data) write_output_buffer(output, data, len); write_output_buffer(output, cdatacloseW, ARRAY_SIZE(cdatacloseW)); }
static void write_prolog_buffer(const mxwriter *This) { static const WCHAR versionW[] = {'<','?','x','m','l',' ','v','e','r','s','i','o','n','=','\"'}; static const WCHAR encodingW[] = {' ','e','n','c','o','d','i','n','g','=','\"'}; static const WCHAR standaloneW[] = {' ','s','t','a','n','d','a','l','o','n','e','=','\"'}; static const WCHAR yesW[] = {'y','e','s','\"','?','>'}; static const WCHAR noW[] = {'n','o','\"','?','>'}; static const WCHAR quotW[] = {'\"'}; static const WCHAR crlfW[] = {'\r','\n'}; /* version */ write_output_buffer(This->buffer, versionW, sizeof(versionW)/sizeof(WCHAR)); write_output_buffer(This->buffer, This->version, -1); write_output_buffer(This->buffer, quotW, 1); /* encoding */ write_output_buffer(This->buffer, encodingW, sizeof(encodingW)/sizeof(WCHAR)); /* always write UTF-16 to WCHAR buffer */ write_output_buffer_mode(This->buffer, OutputBuffer_Native, utf16W, sizeof(utf16W)/sizeof(WCHAR) - 1); write_output_buffer_mode(This->buffer, OutputBuffer_Encoded, This->encoding, -1); write_output_buffer(This->buffer, quotW, 1); /* standalone */ write_output_buffer(This->buffer, standaloneW, sizeof(standaloneW)/sizeof(WCHAR)); if (This->props[MXWriter_Standalone] == VARIANT_TRUE) write_output_buffer(This->buffer, yesW, sizeof(yesW)/sizeof(WCHAR)); else write_output_buffer(This->buffer, noW, sizeof(noW)/sizeof(WCHAR)); write_output_buffer(This->buffer, crlfW, sizeof(crlfW)/sizeof(WCHAR)); }
/* TODO: test if we need to validate char range */ static HRESULT write_output_qname(xmlwriteroutput *output, const WCHAR *prefix, const WCHAR *local_name) { if (prefix) { static const WCHAR colW[] = {':'}; write_output_buffer(output, prefix, -1); write_output_buffer(output, colW, ARRAY_SIZE(colW)); } write_output_buffer(output, local_name, -1); return S_OK; }
static void write_node_indent(xmlwriter *writer) { static const WCHAR dblspaceW[] = {' ',' '}; static const WCHAR crlfW[] = {'\r','\n'}; unsigned int indent_level = writer->indent_level; if (!writer->indent) return; if (writer->output->buffer.written) write_output_buffer(writer->output, crlfW, ARRAY_SIZE(crlfW)); while (indent_level--) write_output_buffer(writer->output, dblspaceW, ARRAY_SIZE(dblspaceW)); }
static HRESULT WINAPI xmlwriter_WriteRaw(IXmlWriter *iface, LPCWSTR data) { xmlwriter *This = impl_from_IXmlWriter(iface); TRACE("%p %s\n", This, debugstr_w(data)); if (!data) return S_OK; switch (This->state) { case XmlWriterState_Initial: return E_UNEXPECTED; case XmlWriterState_Ready: write_xmldecl(This, XmlStandalone_Omit); /* fallthrough */ case XmlWriterState_DocStarted: case XmlWriterState_PIDocStarted: break; default: This->state = XmlWriterState_DocClosed; return WR_E_INVALIDACTION; } write_output_buffer(This->output, data, -1); return S_OK; }
static HRESULT WINAPI xmlwriter_WriteCharEntity(IXmlWriter *iface, WCHAR ch) { static const WCHAR fmtW[] = {'&','#','x','%','x',';',0}; xmlwriter *This = impl_from_IXmlWriter(iface); WCHAR bufW[16]; TRACE("%p %#x\n", This, ch); switch (This->state) { case XmlWriterState_Initial: return E_UNEXPECTED; case XmlWriterState_ElemStarted: writer_close_starttag(This); break; case XmlWriterState_DocClosed: return WR_E_INVALIDACTION; default: ; } sprintfW(bufW, fmtW, ch); write_output_buffer(This->output, bufW, -1); return S_OK; }
static HRESULT writer_close_starttag(xmlwriter *writer) { HRESULT hr; if (!writer->starttagopen) return S_OK; hr = write_output_buffer(writer->output, gtW, ARRAY_SIZE(gtW)); writer->starttagopen = FALSE; return hr; }
static HRESULT writer_close_starttag(xmlwriter *writer) { HRESULT hr; if (!writer->starttagopen) return S_OK; hr = write_output_buffer(writer->output, gtW, 1); writer->starttagopen = FALSE; writer->state = XmlWriterState_Content; return hr; }
static HRESULT write_xmldecl(xmlwriter *writer, XmlStandalone standalone) { static const WCHAR versionW[] = {'<','?','x','m','l',' ','v','e','r','s','i','o','n','=','"','1','.','0','"'}; static const WCHAR encodingW[] = {' ','e','n','c','o','d','i','n','g','='}; write_encoding_bom(writer); writer->state = XmlWriterState_DocStarted; if (writer->omitxmldecl) return S_OK; /* version */ write_output_buffer(writer->output, versionW, ARRAY_SIZE(versionW)); /* encoding */ write_output_buffer(writer->output, encodingW, ARRAY_SIZE(encodingW)); write_output_buffer_quoted(writer->output, get_encoding_name(writer->output->encoding), -1); /* standalone */ if (standalone == XmlStandalone_Omit) write_output_buffer(writer->output, closepiW, ARRAY_SIZE(closepiW)); else { static const WCHAR standaloneW[] = {' ','s','t','a','n','d','a','l','o','n','e','=','\"'}; static const WCHAR yesW[] = {'y','e','s','\"','?','>'}; static const WCHAR noW[] = {'n','o','\"','?','>'}; write_output_buffer(writer->output, standaloneW, ARRAY_SIZE(standaloneW)); if (standalone == XmlStandalone_Yes) write_output_buffer(writer->output, yesW, ARRAY_SIZE(yesW)); else write_output_buffer(writer->output, noW, ARRAY_SIZE(noW)); } return S_OK; }
static HRESULT WINAPI xmlwriter_WriteFullEndElement(IXmlWriter *iface) { xmlwriter *This = impl_from_IXmlWriter(iface); struct element *element; TRACE("%p\n", This); switch (This->state) { case XmlWriterState_Initial: return E_UNEXPECTED; case XmlWriterState_Ready: case XmlWriterState_DocClosed: This->state = XmlWriterState_DocClosed; return WR_E_INVALIDACTION; default: ; } element = pop_element(This); if (!element) return WR_E_INVALIDACTION; writer_close_starttag(This); writer_dec_indent(This); /* don't force full end tag to the next line */ if (This->state == XmlWriterState_ElemStarted) This->state = XmlWriterState_Content; else write_node_indent(This); /* write full end tag */ write_output_buffer(This->output, closeelementW, ARRAY_SIZE(closeelementW)); write_output_buffer(This->output, element->qname, element->len); write_output_buffer(This->output, gtW, ARRAY_SIZE(gtW)); return S_OK; }
void main(int argc, char **argv){ int numImages = 1; if (atoi(argv[1]) > MAX_NUM_CHAR || atoi(argv[1]) < 1) { printf("%s\n", "Invalid Number of Images"); printf("%s\n", argv[1]); } else { numImages = atoi(argv[1]); } unsigned char *inputBuffer; unsigned char *outputBuffer; size_t inputSize = load_input_buffer(INPUT_FILEPATH, &inputBuffer); double *timingArray; timingArray = (double *) malloc(numImages * sizeof(double)); struct timeval startTime, endTime; int i, j; int numRuns = M; int k = K; // time the transofrmation of all numbers of images up to numImages for (i = 0; i < numImages; ++i) { int *runsArray = (int *) malloc(numRuns * sizeof(int)); for (j = 0; j < numRuns; ++j) { char *inputBufferCopy = malloc(inputSize); memcpy(inputBufferCopy, inputBuffer, inputSize); gettimeofday(&startTime, NULL); write_output_buffer(inputBufferCopy, &outputBuffer, i + 1); gettimeofday(&endTime, NULL); runsArray[j] = (endTime.tv_usec - startTime.tv_usec) + (endTime.tv_sec - startTime.tv_sec) * 1000000; free(inputBufferCopy); free(outputBuffer); } timingArray[i] = calc_avg_k_lowest_runs(&runsArray, numRuns, k); free(runsArray); } // write timing data (character to runtime) to csv file write_doubles_to_csv_file(timingArray, numImages, PLATFORM); free(inputBuffer); free(outputBuffer); }
static HRESULT WINAPI mxwriter_saxcontent_endElement( ISAXContentHandler *iface, const WCHAR *namespaceUri, int nnamespaceUri, const WCHAR * local_name, int nlocal_name, const WCHAR *QName, int nQName) { mxwriter *This = impl_from_ISAXContentHandler( iface ); TRACE("(%p)->(%s:%d %s:%d %s:%d)\n", This, debugstr_wn(namespaceUri, nnamespaceUri), nnamespaceUri, debugstr_wn(local_name, nlocal_name), nlocal_name, debugstr_wn(QName, nQName), nQName); if ((!namespaceUri || !local_name || !QName) && This->class_version != MSXML6) return E_INVALIDARG; if (This->element && QName && !strncmpW(This->element, QName, nQName)) { static const WCHAR closeW[] = {'/','>'}; write_output_buffer(This->buffer, closeW, 2); } else { static const WCHAR closetagW[] = {'<','/'}; static const WCHAR gtW[] = {'>'}; write_output_buffer(This->buffer, closetagW, 2); write_output_buffer(This->buffer, QName, nQName); write_output_buffer(This->buffer, gtW, 1); } set_element_name(This, NULL, 0); return S_OK; }
static HRESULT WINAPI xmlwriter_WriteProcessingInstruction(IXmlWriter *iface, LPCWSTR name, LPCWSTR text) { xmlwriter *This = impl_from_IXmlWriter(iface); static const WCHAR xmlW[] = {'x','m','l',0}; static const WCHAR openpiW[] = {'<','?'}; static const WCHAR spaceW[] = {' '}; TRACE("(%p)->(%s %s)\n", This, wine_dbgstr_w(name), wine_dbgstr_w(text)); switch (This->state) { case XmlWriterState_Initial: return E_UNEXPECTED; case XmlWriterState_DocStarted: if (!strcmpW(name, xmlW)) return WR_E_INVALIDACTION; break; case XmlWriterState_ElemStarted: case XmlWriterState_DocClosed: return WR_E_INVALIDACTION; default: ; } write_encoding_bom(This); write_output_buffer(This->output, openpiW, ARRAY_SIZE(openpiW)); write_output_buffer(This->output, name, -1); write_output_buffer(This->output, spaceW, ARRAY_SIZE(spaceW)); write_output_buffer(This->output, text, -1); write_output_buffer(This->output, closepiW, ARRAY_SIZE(closepiW)); if (!strcmpW(name, xmlW)) This->state = XmlWriterState_PIDocStarted; return S_OK; }
static HRESULT WINAPI xmlwriter_WriteStartDocument(IXmlWriter *iface, XmlStandalone standalone) { static const WCHAR versionW[] = {'<','?','x','m','l',' ','v','e','r','s','i','o','n','=','"','1','.','0','"'}; static const WCHAR encodingW[] = {' ','e','n','c','o','d','i','n','g','='}; xmlwriter *This = impl_from_IXmlWriter(iface); TRACE("(%p)->(%d)\n", This, standalone); switch (This->state) { case XmlWriterState_Initial: return E_UNEXPECTED; case XmlWriterState_PIDocStarted: This->state = XmlWriterState_DocStarted; return S_OK; case XmlWriterState_DocStarted: case XmlWriterState_ElemStarted: case XmlWriterState_DocClosed: return WR_E_INVALIDACTION; default: ; } write_encoding_bom(This); This->state = XmlWriterState_DocStarted; if (This->omitxmldecl) return S_OK; /* version */ write_output_buffer(This->output, versionW, ARRAY_SIZE(versionW)); /* encoding */ write_output_buffer(This->output, encodingW, ARRAY_SIZE(encodingW)); write_output_buffer_quoted(This->output, get_encoding_name(This->output->encoding), -1); /* standalone */ if (standalone == XmlStandalone_Omit) write_output_buffer(This->output, closepiW, ARRAY_SIZE(closepiW)); else { static const WCHAR standaloneW[] = {' ','s','t','a','n','d','a','l','o','n','e','=','\"'}; static const WCHAR yesW[] = {'y','e','s','\"','?','>'}; static const WCHAR noW[] = {'n','o','\"','?','>'}; write_output_buffer(This->output, standaloneW, ARRAY_SIZE(standaloneW)); if (standalone == XmlStandalone_Yes) write_output_buffer(This->output, yesW, ARRAY_SIZE(yesW)); else write_output_buffer(This->output, noW, ARRAY_SIZE(noW)); } return S_OK; }
static HRESULT WINAPI mxwriter_saxcontent_characters( ISAXContentHandler *iface, const WCHAR *chars, int nchars) { mxwriter *This = impl_from_ISAXContentHandler( iface ); TRACE("(%p)->(%s:%d)\n", This, debugstr_wn(chars, nchars), nchars); if (!chars) return E_INVALIDARG; close_element_starttag(This); set_element_name(This, NULL, 0); if (nchars) write_output_buffer(This->buffer, chars, nchars); return S_OK; }
static HRESULT WINAPI xmlwriter_WriteComment(IXmlWriter *iface, LPCWSTR comment) { static const WCHAR copenW[] = {'<','!','-','-'}; static const WCHAR ccloseW[] = {'-','-','>'}; xmlwriter *This = impl_from_IXmlWriter(iface); TRACE("%p %s\n", This, debugstr_w(comment)); switch (This->state) { case XmlWriterState_Initial: return E_UNEXPECTED; case XmlWriterState_ElemStarted: writer_close_starttag(This); break; case XmlWriterState_DocClosed: return WR_E_INVALIDACTION; default: ; } write_node_indent(This); write_output_buffer(This->output, copenW, ARRAY_SIZE(copenW)); if (comment) { int len = strlenW(comment), i; /* Make sure there's no two hyphen sequences in a string, space is used as a separator to produce compliant comment string */ if (len > 1) { for (i = 0; i < len; i++) { write_output_buffer(This->output, comment + i, 1); if (comment[i] == '-' && (i + 1 < len) && comment[i+1] == '-') write_output_buffer(This->output, spaceW, ARRAY_SIZE(spaceW)); } } else write_output_buffer(This->output, comment, len); if (len && comment[len-1] == '-') write_output_buffer(This->output, spaceW, ARRAY_SIZE(spaceW)); } write_output_buffer(This->output, ccloseW, ARRAY_SIZE(ccloseW)); return S_OK; }
static HRESULT WINAPI xmlwriter_WriteStartElement(IXmlWriter *iface, LPCWSTR prefix, LPCWSTR local_name, LPCWSTR uri) { xmlwriter *This = impl_from_IXmlWriter(iface); TRACE("(%p)->(%s %s %s)\n", This, wine_dbgstr_w(prefix), wine_dbgstr_w(local_name), wine_dbgstr_w(uri)); if (This->state == XmlWriterState_Initial) return E_UNEXPECTED; if (!local_name) return E_INVALIDARG; if (This->state == XmlWriterState_ElemStarted) return WR_E_INVALIDACTION; write_encoding_bom(This); This->state = XmlWriterState_ElemStarted; This->starttagopen = TRUE; write_output_buffer(This->output, ltW, 1); write_output_qname(This->output, prefix, local_name); return S_OK; }
int wasm_gen_file(WasmSource* source, int multi_module, WasmParserTypeCheck type_check) { Context ctx = {}; WasmParserCallbacks callbacks = {}; callbacks.user_data = &ctx; callbacks.error = error; callbacks.before_module = before_module; callbacks.after_module = after_module; callbacks.before_function = before_function; callbacks.after_function = after_function; callbacks.before_block = before_block; callbacks.after_block = after_block; callbacks.before_binary = before_binary; callbacks.before_break = before_break; callbacks.after_break = after_break; callbacks.before_call = before_call; callbacks.before_call_import = before_call_import; callbacks.before_compare = before_compare; callbacks.after_const = after_const; callbacks.before_convert = before_convert; callbacks.after_get_local = after_get_local; callbacks.before_if = before_if; callbacks.after_if = after_if; callbacks.before_label = before_label; callbacks.after_label = after_label; callbacks.before_load = before_load; callbacks.after_load_global = after_load_global; callbacks.before_loop = before_loop; callbacks.after_loop = after_loop; callbacks.after_memory_size = after_memory_size; callbacks.after_nop = after_nop; callbacks.after_page_size = after_page_size; callbacks.before_resize_memory = before_resize_memory; callbacks.before_return = before_return; callbacks.before_set_local = before_set_local; callbacks.before_store = before_store; callbacks.before_store_global = before_store_global; callbacks.before_unary = before_unary; callbacks.assert_invalid_error = assert_invalid_error; int result; if (multi_module) { if (g_outfile) { callbacks.before_module = before_module_multi; callbacks.after_module = after_module_multi; callbacks.before_assert_return = before_assert_return; callbacks.after_assert_return = after_assert_return; callbacks.before_assert_return_nan = before_assert_return_nan; callbacks.after_assert_return_nan = after_assert_return_nan; callbacks.before_assert_trap = before_assert_trap; callbacks.after_assert_trap = after_assert_trap; callbacks.before_invoke = before_invoke; callbacks.after_invoke = after_invoke; init_output_buffer(&ctx.js_buf, INITIAL_OUTPUT_BUFFER_CAPACITY); } result = wasm_parse_file(source, &callbacks, type_check); if (g_outfile) { finish_module(&ctx); write_output_buffer(&ctx.js_buf, g_outfile); } } else { result = wasm_parse_module(source, &callbacks, type_check); if (result == 0 && g_outfile) write_output_buffer(&ctx.buf, g_outfile); } destroy_context(&ctx); return result; }
static HRESULT WINAPI mxwriter_saxcontent_startElement( ISAXContentHandler *iface, const WCHAR *namespaceUri, int nnamespaceUri, const WCHAR *local_name, int nlocal_name, const WCHAR *QName, int nQName, ISAXAttributes *attr) { mxwriter *This = impl_from_ISAXContentHandler( iface ); static const WCHAR ltW[] = {'<'}; TRACE("(%p)->(%s %s %s %p)\n", This, debugstr_wn(namespaceUri, nnamespaceUri), debugstr_wn(local_name, nlocal_name), debugstr_wn(QName, nQName), attr); if ((!namespaceUri || !local_name || !QName) && This->class_version != MSXML6) return E_INVALIDARG; close_element_starttag(This); set_element_name(This, QName ? QName : emptyW, QName ? nQName : 0); write_output_buffer(This->buffer, ltW, 1); write_output_buffer(This->buffer, QName, nQName); if (attr) { HRESULT hr; INT length; INT i; hr = ISAXAttributes_getLength(attr, &length); if (FAILED(hr)) return hr; for (i = 0; i < length; i++) { static const WCHAR spaceW[] = {' '}; static const WCHAR eqqW[] = {'=','\"'}; static const WCHAR quotW[] = {'\"'}; const WCHAR *str; WCHAR *escaped; INT len = 0; hr = ISAXAttributes_getQName(attr, i, &str, &len); if (FAILED(hr)) return hr; /* space separator in front of every attribute */ write_output_buffer(This->buffer, spaceW, 1); write_output_buffer(This->buffer, str, len); write_output_buffer(This->buffer, eqqW, 2); len = 0; hr = ISAXAttributes_getValue(attr, i, &str, &len); if (FAILED(hr)) return hr; escaped = get_escaped_string(str, &len); write_output_buffer(This->buffer, escaped, len); heap_free(escaped); write_output_buffer(This->buffer, quotW, 1); } } return S_OK; }
/* Newly added element start tag left unclosed cause for empty elements we have to close it differently. */ static void close_element_starttag(const mxwriter *This) { static const WCHAR gtW[] = {'>'}; if (!This->element) return; write_output_buffer(This->buffer, gtW, 1); }