void appendSchemaResource(IPropertyTree &res, ILoadedDllEntry *dll) { if (!dll || (flags & WWV_OMIT_SCHEMAS)) return; if (res.getPropInt("@seq", -1)>=0 && res.hasProp("@id")) { int id = res.getPropInt("@id"); size32_t len = 0; const void *data = NULL; if (dll->getResource(len, data, "RESULT_XSD", (unsigned) id) && len>0) { buffer.append("<XmlSchema name=\"").append(res.queryProp("@name")).append("\">"); if (res.getPropBool("@compressed")) { StringBuffer decompressed; decompressResource(len, data, decompressed); if (flags & WWV_CDATA_SCHEMAS) buffer.append("<![CDATA["); buffer.append(decompressed.str()); if (flags & WWV_CDATA_SCHEMAS) buffer.append("]]>"); } else buffer.append(len, (const char *)data); buffer.append("</XmlSchema>"); } } }
extern DLLSERVER_API bool getResourceXMLFromFile(const char *filename, const char *type, unsigned id, StringBuffer &xml) { MemoryBuffer data; if (!getResourceFromFile(filename, data, type, id)) return false; return decompressResource(data.length(), data.toByteArray(), xml); }
extern DLLSERVER_API bool getEmbeddedManifestXML(ILoadedDllEntry *dll, StringBuffer &xml) { size32_t len = 0; const void * data = NULL; if (!dll->getResource(len, data, "MANIFEST", 1000)) return false; return decompressResource(len, data, xml); }
extern DLLSERVER_API bool decompressResource(size32_t len, const void *data, StringBuffer &result) { MemoryBuffer tgt; decompressResource(len, data, tgt); tgt.append((char)0); unsigned expandedLen = tgt.length(); result.setBuffer(expandedLen, reinterpret_cast<char *>(tgt.detach()), expandedLen-1); return true; }