Encode a character in JSON format, and append it to the buffer and return the number of bytes written
| 266 | |
| 267 | // Encode a character in JSON format, and append it to the buffer and return the number of bytes written |
| 268 | size_t OutputBuffer::EncodeChar(char c) noexcept |
| 269 | { |
| 270 | char esc; |
| 271 | switch (c) |
| 272 | { |
| 273 | case '\r': |
| 274 | esc = 'r'; |
| 275 | break; |
| 276 | case '\n': |
| 277 | esc = 'n'; |
| 278 | break; |
| 279 | case '\t': |
| 280 | esc = 't'; |
| 281 | break; |
| 282 | case '"': |
| 283 | case '\\': |
| 284 | #if 1 |
| 285 | // Escaping '/' is optional in JSON, although doing so so confuses PanelDue (fixed in PanelDue firmware version 1.15 and later). As it's optional, we don't do it. |
| 286 | #else |
| 287 | case '/': |
| 288 | #endif |
| 289 | esc = c; |
| 290 | break; |
| 291 | default: |
| 292 | esc = 0; |
| 293 | break; |
| 294 | } |
| 295 | |
| 296 | if (esc != 0) |
| 297 | { |
| 298 | const size_t written = cat('\\'); |
| 299 | return (written == 0) ? written : written + cat(esc); |
| 300 | } |
| 301 | |
| 302 | return cat(c); |
| 303 | } |
| 304 | |
| 305 | size_t OutputBuffer::EncodeReply(OutputBuffer *_ecv_null src) noexcept |
| 306 | { |