mirror of https://github.com/aria2/aria2
Refactored splitNsName
parent
3b1834e633
commit
2997fa0631
|
@ -61,23 +61,18 @@ struct SessionData {
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
template<typename InputIterator>
|
void splitNsName(const char** localname, const char** nsUri, const char* src)
|
||||||
void splitNsName
|
|
||||||
(const char** localname,
|
|
||||||
const char** nsUri,
|
|
||||||
InputIterator first,
|
|
||||||
InputIterator last)
|
|
||||||
{
|
{
|
||||||
InputIterator sep = std::find(first, last, '\t');
|
const char* sep = strchr(src, '\t');
|
||||||
if(sep == last) {
|
if(sep) {
|
||||||
*localname = first;
|
|
||||||
} else {
|
|
||||||
*localname = sep+1;
|
*localname = sep+1;
|
||||||
size_t nsUriLen = sep-first;
|
size_t nsUriLen = sep-src;
|
||||||
char* temp = new char[nsUriLen+1];
|
char* temp = new char[nsUriLen+1];
|
||||||
memcpy(temp, first, nsUriLen);
|
memcpy(temp, src, nsUriLen);
|
||||||
temp[nsUriLen] = '\0';
|
temp[nsUriLen] = '\0';
|
||||||
*nsUri = temp;
|
*nsUri = temp;
|
||||||
|
} else {
|
||||||
|
*localname = src;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
@ -95,8 +90,7 @@ void mlStartElement(void* userData, const char* nsName, const char** attrs)
|
||||||
if(*p == 0) {
|
if(*p == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
splitNsName(&xa.localname, &xa.nsUri,
|
splitNsName(&xa.localname, &xa.nsUri, attrNsName);
|
||||||
attrNsName, attrNsName+strlen(attrNsName));
|
|
||||||
const char* value = *p++;
|
const char* value = *p++;
|
||||||
xa.value = value;
|
xa.value = value;
|
||||||
xa.valueLength = strlen(value);
|
xa.valueLength = strlen(value);
|
||||||
|
@ -106,7 +100,7 @@ void mlStartElement(void* userData, const char* nsName, const char** attrs)
|
||||||
const char* localname = 0;
|
const char* localname = 0;
|
||||||
const char* prefix = 0;
|
const char* prefix = 0;
|
||||||
const char* nsUri = 0;
|
const char* nsUri = 0;
|
||||||
splitNsName(&localname, &nsUri, nsName, nsName+strlen(nsName));
|
splitNsName(&localname, &nsUri, nsName);
|
||||||
sd->psm_->beginElement(localname, prefix, nsUri, xmlAttrs);
|
sd->psm_->beginElement(localname, prefix, nsUri, xmlAttrs);
|
||||||
delete [] nsUri;
|
delete [] nsUri;
|
||||||
for(std::vector<XmlAttr>::iterator i = xmlAttrs.begin(),
|
for(std::vector<XmlAttr>::iterator i = xmlAttrs.begin(),
|
||||||
|
@ -125,7 +119,7 @@ void mlEndElement(void* userData, const char* nsName)
|
||||||
const char* localname = 0;
|
const char* localname = 0;
|
||||||
const char* prefix = 0;
|
const char* prefix = 0;
|
||||||
const char* nsUri = 0;
|
const char* nsUri = 0;
|
||||||
splitNsName(&localname, &nsUri, nsName, nsName+strlen(nsName));
|
splitNsName(&localname, &nsUri, nsName);
|
||||||
SessionData* sd = reinterpret_cast<SessionData*>(userData);
|
SessionData* sd = reinterpret_cast<SessionData*>(userData);
|
||||||
std::string characters;
|
std::string characters;
|
||||||
if(sd->psm_->needsCharactersBuffering()) {
|
if(sd->psm_->needsCharactersBuffering()) {
|
||||||
|
|
Loading…
Reference in New Issue