| 385 | */ |
| 386 | |
| 387 | my_bool |
| 388 | read_escaped_string(const char *ptr, const char *eol, LEX_STRING *str) |
| 389 | { |
| 390 | char *write_pos= str->str; |
| 391 | |
| 392 | for (; ptr < eol; ptr++, write_pos++) |
| 393 | { |
| 394 | char c= *ptr; |
| 395 | if (c == '\\') |
| 396 | { |
| 397 | ptr++; |
| 398 | if (ptr >= eol) |
| 399 | return TRUE; |
| 400 | /* |
| 401 | Should be in sync with write_escaped_string() and |
| 402 | parse_quoted_escaped_string() |
| 403 | */ |
| 404 | switch(*ptr) { |
| 405 | case '\\': |
| 406 | *write_pos= '\\'; |
| 407 | break; |
| 408 | case 'n': |
| 409 | *write_pos= '\n'; |
| 410 | break; |
| 411 | case '0': |
| 412 | *write_pos= '\0'; |
| 413 | break; |
| 414 | case 'z': |
| 415 | *write_pos= 26; |
| 416 | break; |
| 417 | case '\'': |
| 418 | *write_pos= '\''; |
| 419 | break; |
| 420 | default: |
| 421 | return TRUE; |
| 422 | } |
| 423 | } |
| 424 | else |
| 425 | *write_pos= c; |
| 426 | } |
| 427 | str->str[str->length= write_pos-str->str]= '\0'; // just for safety |
| 428 | return FALSE; |
| 429 | } |
| 430 | |
| 431 | |
| 432 | /** |
no outgoing calls
no test coverage detected