aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorBartosz Golaszewski <bartekgola@gmail.com>2013-07-30 06:29:42 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2013-07-30 06:29:42 +0200
commit79c618c41193eaaa092cb977f06fc112155ba92b (patch)
tree369938db46d4691ebbcc476386c7dafdac827887 /libbb
parentd0bc708cb52693b9ed1dab495e5f99fb8e1122f7 (diff)
downloadbusybox-w32-79c618c41193eaaa092cb977f06fc112155ba92b.tar.gz
busybox-w32-79c618c41193eaaa092cb977f06fc112155ba92b.tar.bz2
busybox-w32-79c618c41193eaaa092cb977f06fc112155ba92b.zip
Refactor catv. Move visible() from stty to libbb.
Fixes the following TODO: stty's visible() function and catv's guts are identical. Merge them into an appropriate libbb function. Also makes catv behave exactly like coreutils' cat -v e.g. it'll print 'M-^I' instead of 'M- '. function old new delta visible - 70 +70 do_display 431 379 -52 catv_main 306 250 -56 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/2 up/down: 70/-108) Total: -38 bytes Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
-rw-r--r--libbb/printable.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/libbb/printable.c b/libbb/printable.c
index f6ada4904..9a423431e 100644
--- a/libbb/printable.c
+++ b/libbb/printable.c
@@ -32,3 +32,27 @@ void FAST_FUNC fputc_printable(int ch, FILE *file)
32 } 32 }
33 fputc(ch, file); 33 fputc(ch, file);
34} 34}
35
36void FAST_FUNC visible(unsigned ch, char *buf, int flags)
37{
38 if (ch == '\t' && !(flags & VISIBLE_SHOW_TABS)) {
39 goto raw;
40 }
41 if (ch == '\n') {
42 if (flags & VISIBLE_ENDLINE)
43 *buf++ = '$';
44 } else {
45 if (ch >= 128) {
46 ch -= 128;
47 *buf++ = 'M';
48 *buf++ = '-';
49 }
50 if (ch < 32 || ch == 127) {
51 *buf++ = '^';
52 ch ^= 0x40;
53 }
54 }
55 raw:
56 *buf++ = ch;
57 *buf = '\0';
58}