Add EDEBUG to CString::Escape function to escape debug output.

This commit is contained in:
Ravomavain
2013-05-12 12:22:26 +02:00
parent 588e478f9e
commit 0c37fb1858
3 changed files with 37 additions and 2 deletions
+32
View File
@@ -164,6 +164,8 @@ CString::EEscape CString::ToEscape(const CString& sEsc) {
return ESQL;
} else if (sEsc.Equals("NAMEDFMT")) {
return ENAMEDFMT;
} else if (sEsc.Equals("DEBUG")) {
return EDEBUG;
}
return EASCII;
@@ -280,6 +282,26 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) const {
}
break;
case EDEBUG:
if (*p == '\\' && (a +3) < iLength && *(p +1) == 'x' && isxdigit(*(p +2)) && isxdigit(*(p +3))) {
p += 2;
if (isdigit(*p)) {
ch = (unsigned char)((*p - '0') << 4);
} else {
ch = (unsigned char)((tolower(*p) - 'a' +10) << 4);
}
p++;
if (isdigit(*p)) {
ch |= (unsigned char)(*p - '0');
} else {
ch |= (unsigned char)(tolower(*p) - 'a' +10);
}
a += 3;
} else {
ch = *p;
}
}
switch (eTo) {
@@ -326,6 +348,16 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) const {
} else if (ch == '}') { sRet += '\\'; sRet += '}';
} else { sRet += ch; }
break;
case EDEBUG:
if (ch < 0x20 || ch == 0x7F) {
sRet += "\\x";
sRet += szHex[ch >> 4];
sRet += szHex[ch & 0xf];
} else {
sRet += ch;
}
break;
}
}