diff --git a/JsonGenerator/EscapedString.cpp b/JsonGenerator/EscapedString.cpp index d58f9efc..107b3589 100644 --- a/JsonGenerator/EscapedString.cpp +++ b/JsonGenerator/EscapedString.cpp @@ -7,6 +7,36 @@ using namespace ArduinoJson::Internals; +static inline char getSpecialChar(char c) +{ + switch (c) + { + case '"': + return '"'; + + case '\\': + return '\\'; + + case '\b': + return 'b'; + + case '\f': + return 'f'; + + case '\n': + return 'n'; + + case '\r': + return 'r'; + + case '\t': + return 't'; + + default: + return 0; + } +} + size_t EscapedString::printTo(Print& p) const { const char* s = rawString; @@ -22,42 +52,19 @@ size_t EscapedString::printTo(Print& p) const while (*s) { - switch (*s) + char specialChar = getSpecialChar(*s); + + if (specialChar) + { + n += p.write('\\'); + n += p.write(specialChar); + } + else { - case '"': - n += p.print("\\\""); - break; - - case '\\': - n += p.print("\\\\"); - break; - - case '\b': - n += p.print("\\b"); - break; - - case '\f': - n += p.print("\\f"); - break; - - case '\n': - n += p.print("\\n"); - break; - - case '\r': - n += p.print("\\r"); - break; - - case '\t': - n += p.print("\\t"); - break; - - default: n += p.write(*s); - break; } - s++; + s++; } n += p.write('\"');