source: MondoRescue/branches/3.3/mindi-busybox/libbb/printable_string.c@ 3621

Last change on this file since 3621 was 3621, checked in by Bruno Cornec, 7 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

  • Property svn:eol-style set to native
File size: 1.0 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * Unicode support routines.
4 *
5 * Copyright (C) 2010 Denys Vlasenko
6 *
7 * Licensed under GPLv2, see file LICENSE in this source tree.
8 */
9#include "libbb.h"
10#include "unicode.h"
11
12const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str)
13{
14 char *dst;
15 const char *s;
16
17 s = str;
18 while (1) {
19 unsigned char c = *s;
20 if (c == '\0') {
21 /* 99+% of inputs do not need conversion */
22 if (stats) {
23 stats->byte_count = (s - str);
24 stats->unicode_count = (s - str);
25 stats->unicode_width = (s - str);
26 }
27 return str;
28 }
29 if (c < ' ')
30 break;
31 if (c >= 0x7f)
32 break;
33 s++;
34 }
35
36#if ENABLE_UNICODE_SUPPORT
37 dst = unicode_conv_to_printable(stats, str);
38#else
39 {
40 char *d = dst = xstrdup(str);
41 while (1) {
42 unsigned char c = *d;
43 if (c == '\0')
44 break;
45 if (c < ' ' || c >= 0x7f)
46 *d = '?';
47 d++;
48 }
49 if (stats) {
50 stats->byte_count = (d - dst);
51 stats->unicode_count = (d - dst);
52 stats->unicode_width = (d - dst);
53 }
54 }
55#endif
56 return auto_string(dst);
57}
Note: See TracBrowser for help on using the repository browser.