Avoid unnecessary strlen operations

This commit is contained in:
halx99 2021-09-29 17:01:12 +08:00
parent 4ed7a7f746
commit fd795fdf64

View File

@ -4648,18 +4648,18 @@ PUGI__NS_BEGIN
// set value with conversion functions // set value with conversion functions
template <typename String, typename Header> template <typename String, typename Header>
PUGI__FN bool set_value_ascii(String& dest, Header& header, uintptr_t header_mask, char* buf) PUGI__FN bool set_value_ascii(String& dest, Header& header, uintptr_t header_mask, char* buf, size_t len)
{ {
#ifdef PUGIXML_WCHAR_MODE #ifdef PUGIXML_WCHAR_MODE
char_t wbuf[128]; char_t wbuf[128];
assert(strlen(buf) < sizeof(wbuf) / sizeof(wbuf[0])); assert(len < sizeof(wbuf) / sizeof(wbuf[0]));
size_t offset = 0; size_t offset = 0;
for (; buf[offset]; ++offset) wbuf[offset] = buf[offset]; for (; buf[offset]; ++offset) wbuf[offset] = buf[offset];
return strcpy_insitu(dest, header, header_mask, wbuf, offset); return strcpy_insitu(dest, header, header_mask, wbuf, offset);
#else #else
return strcpy_insitu(dest, header, header_mask, buf, strlen(buf)); return strcpy_insitu(dest, header, header_mask, buf, len);
#endif #endif
} }
@ -4677,18 +4677,18 @@ PUGI__NS_BEGIN
PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, float value, int precision) PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, float value, int precision)
{ {
char buf[128]; char buf[128];
PUGI__SNPRINTF(buf, "%.*g", precision, double(value)); int n = PUGI__SNPRINTF(buf, "%.*g", precision, double(value));
return set_value_ascii(dest, header, header_mask, buf); return set_value_ascii(dest, header, header_mask, buf, n);
} }
template <typename String, typename Header> template <typename String, typename Header>
PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, double value, int precision) PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, double value, int precision)
{ {
char buf[128]; char buf[128];
PUGI__SNPRINTF(buf, "%.*g", precision, value); int n = PUGI__SNPRINTF(buf, "%.*g", precision, value);
return set_value_ascii(dest, header, header_mask, buf); return set_value_ascii(dest, header, header_mask, buf, n);
} }
template <typename String, typename Header> template <typename String, typename Header>