| 471 | } |
| 472 | |
| 473 | static void dump_argument(const char *a) |
| 474 | { |
| 475 | const unsigned char *p; |
| 476 | |
| 477 | for (p = a; *p; p++) |
| 478 | if (!((*p >= '+' && *p <= ':') || (*p >= '@' && *p <= 'Z') || |
| 479 | *p == '_' || (*p >= 'a' && *p <= 'z'))) |
| 480 | break; |
| 481 | if (!*p) { |
| 482 | fputs(a, report_file); |
| 483 | return; |
| 484 | } |
| 485 | fputc('"', report_file); |
| 486 | for (p = a; *p; p++) { |
| 487 | if (*p == '\\' || *p == '"' || *p == '$' || *p == '`') |
| 488 | fprintf(report_file, "\\%c", *p); |
| 489 | else if (*p < ' ' || *p > '~') |
| 490 | fprintf(report_file, "\\x%02x", *p); |
| 491 | else |
| 492 | fputc(*p, report_file); |
| 493 | } |
| 494 | fputc('"', report_file); |
| 495 | } |
| 496 | |
| 497 | static void check_options(const OptionDef *po) |
| 498 | { |