|
Lines 429-438
static void safe_fwrite(const char *buf, size_t size, FILE *out)
Link Here
|
| 429 |
for (i = 0; i < size; i++) { |
429 |
for (i = 0; i < size; i++) { |
| 430 |
const char *p = buf + i; |
430 |
const char *p = buf + i; |
| 431 |
int rc, hex = 0; |
431 |
int rc, hex = 0; |
|
|
432 |
size_t len = 1; |
| 432 |
|
433 |
|
| 433 |
#ifdef HAVE_WIDECHAR |
434 |
#ifdef HAVE_WIDECHAR |
| 434 |
wchar_t wc; |
435 |
wchar_t wc; |
| 435 |
size_t len = mbrtowc(&wc, p, size - i, &s); |
436 |
len = mbrtowc(&wc, p, size - i, &s); |
| 436 |
|
437 |
|
| 437 |
if (len == 0) /* L'\0' */ |
438 |
if (len == 0) /* L'\0' */ |
| 438 |
return; |
439 |
return; |
|
Lines 440-455
static void safe_fwrite(const char *buf, size_t size, FILE *out)
Link Here
|
| 440 |
if (len == (size_t)-1 || len == (size_t)-2) { /* invalid sequence */ |
441 |
if (len == (size_t)-1 || len == (size_t)-2) { /* invalid sequence */ |
| 441 |
memset(&s, 0, sizeof (s)); |
442 |
memset(&s, 0, sizeof (s)); |
| 442 |
len = hex = 1; |
443 |
len = hex = 1; |
| 443 |
|
|
|
| 444 |
} else if (len > 1 && !iswprint(wc)) { /* non-printable multibyte */ |
444 |
} else if (len > 1 && !iswprint(wc)) { /* non-printable multibyte */ |
| 445 |
hex = 1; |
445 |
hex = 1; |
| 446 |
} else |
|
|
| 447 |
#endif |
| 448 |
{ |
| 449 |
if (!isprint((unsigned int) *p) && |
| 450 |
!isspace((unsigned int) *p)) /* non-printable */ |
| 451 |
hex = 1; |
| 452 |
} |
446 |
} |
|
|
447 |
i += len - 1; |
| 448 |
#else |
| 449 |
if (!isprint((unsigned int) *p) && |
| 450 |
!isspace((unsigned int) *p)) /* non-printable */ |
| 451 |
hex = 1; |
| 452 |
#endif |
| 453 |
if (hex) |
453 |
if (hex) |
| 454 |
rc = fwrite_hex(p, len, out); |
454 |
rc = fwrite_hex(p, len, out); |
| 455 |
else |
455 |
else |
| 456 |
- |
|
|