|
@@ -1435,32 +1435,44 @@ AlphaNum::AlphaNum(strings::Hex hex) {
|
|
|
// after the area just overwritten. It comes in multiple flavors to minimize
|
|
|
// call overhead.
|
|
|
static char *Append1(char *out, const AlphaNum &x) {
|
|
|
- memcpy(out, x.data(), x.size());
|
|
|
- return out + x.size();
|
|
|
+ if (x.size() > 0) {
|
|
|
+ memcpy(out, x.data(), x.size());
|
|
|
+ out += x.size();
|
|
|
+ }
|
|
|
+ return out;
|
|
|
}
|
|
|
|
|
|
static char *Append2(char *out, const AlphaNum &x1, const AlphaNum &x2) {
|
|
|
- memcpy(out, x1.data(), x1.size());
|
|
|
- out += x1.size();
|
|
|
-
|
|
|
- memcpy(out, x2.data(), x2.size());
|
|
|
- return out + x2.size();
|
|
|
+ if (x1.size() > 0) {
|
|
|
+ memcpy(out, x1.data(), x1.size());
|
|
|
+ out += x1.size();
|
|
|
+ }
|
|
|
+ if (x2.size() > 0) {
|
|
|
+ memcpy(out, x2.data(), x2.size());
|
|
|
+ out += x2.size();
|
|
|
+ }
|
|
|
+ return out;
|
|
|
}
|
|
|
|
|
|
-static char *Append4(char *out,
|
|
|
- const AlphaNum &x1, const AlphaNum &x2,
|
|
|
+static char *Append4(char *out, const AlphaNum &x1, const AlphaNum &x2,
|
|
|
const AlphaNum &x3, const AlphaNum &x4) {
|
|
|
- memcpy(out, x1.data(), x1.size());
|
|
|
- out += x1.size();
|
|
|
-
|
|
|
- memcpy(out, x2.data(), x2.size());
|
|
|
- out += x2.size();
|
|
|
-
|
|
|
- memcpy(out, x3.data(), x3.size());
|
|
|
- out += x3.size();
|
|
|
-
|
|
|
- memcpy(out, x4.data(), x4.size());
|
|
|
- return out + x4.size();
|
|
|
+ if (x1.size() > 0) {
|
|
|
+ memcpy(out, x1.data(), x1.size());
|
|
|
+ out += x1.size();
|
|
|
+ }
|
|
|
+ if (x2.size() > 0) {
|
|
|
+ memcpy(out, x2.data(), x2.size());
|
|
|
+ out += x2.size();
|
|
|
+ }
|
|
|
+ if (x3.size() > 0) {
|
|
|
+ memcpy(out, x3.data(), x3.size());
|
|
|
+ out += x3.size();
|
|
|
+ }
|
|
|
+ if (x4.size() > 0) {
|
|
|
+ memcpy(out, x4.data(), x4.size());
|
|
|
+ out += x4.size();
|
|
|
+ }
|
|
|
+ return out;
|
|
|
}
|
|
|
|
|
|
string StrCat(const AlphaNum &a, const AlphaNum &b) {
|