svn commit: trunk/busybox: editors include libbb networking

vda at busybox.net vda at busybox.net
Sun Dec 30 01:59:57 UTC 2007


Author: vda
Date: 2007-12-29 17:59:53 -0800 (Sat, 29 Dec 2007)
New Revision: 20695

Log:
libbb: introduce fputc_printable (from ed)
netstat: print control chars as ^C etc
vi: style fixlet

function                                             old     new   delta
fputc_printable                                        -     100    +100
unix_do_one                                          451     487     +36
printLines                                           258     190     -68
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/1 up/down: 136/-68)            Total: 68 bytes




Modified:
   trunk/busybox/editors/ed.c
   trunk/busybox/editors/vi.c
   trunk/busybox/include/libbb.h
   trunk/busybox/libbb/Kbuild
   trunk/busybox/networking/netstat.c


Changeset:
Modified: trunk/busybox/editors/ed.c
===================================================================
--- trunk/busybox/editors/ed.c	2007-12-29 02:16:23 UTC (rev 20694)
+++ trunk/busybox/editors/ed.c	2007-12-30 01:59:53 UTC (rev 20695)
@@ -847,20 +847,8 @@
 			count--;
 
 		while (count-- > 0) {
-			ch = *cp++;
-			if (ch & 0x80) {
-				fputs("M-", stdout);
-				ch &= 0x7f;
-			}
-			if (ch < ' ') {
-				bb_putchar('^');
-				ch += '@';
-			}
-			if (ch == 0x7f) {
-				bb_putchar('^');
-				ch = '?';
-			}
-			bb_putchar(ch);
+			ch = (unsigned char) *cp++;
+			fputc_printable(ch | PRINTABLE_META, stdout);
 		}
 
 		fputs("$\n", stdout);

Modified: trunk/busybox/editors/vi.c
===================================================================
--- trunk/busybox/editors/vi.c	2007-12-29 02:16:23 UTC (rev 20694)
+++ trunk/busybox/editors/vi.c	2007-12-30 01:59:53 UTC (rev 20695)
@@ -899,7 +899,7 @@
 			if (c_is_no_print) {
 				c = '.';
 				standout_start();
-				}
+			}
 			if (c == '\n') {
 				write1("$\r");
 			} else if (c < ' ' || c == 127) {

Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2007-12-29 02:16:23 UTC (rev 20694)
+++ trunk/busybox/include/libbb.h	2007-12-30 01:59:53 UTC (rev 20695)
@@ -426,6 +426,11 @@
  * But potentially slow, don't use in one-billion-times loops */
 int bb_putchar(int ch);
 char *xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
+/* Prints unprintable chars ch as ^C or M-c to file
+ * (M-c is used only if ch is ORed with PRINTABLE_META),
+ * else it is printed as-is (except for ch = 0x9b) */
+enum { PRINTABLE_META = 0x100 };
+void fputc_printable(int ch, FILE *file);
 // gcc-4.1.1 still isn't good enough at optimizing it
 // (+200 bytes compared to macro)
 //static ALWAYS_INLINE

Modified: trunk/busybox/libbb/Kbuild
===================================================================
--- trunk/busybox/libbb/Kbuild	2007-12-29 02:16:23 UTC (rev 20694)
+++ trunk/busybox/libbb/Kbuild	2007-12-30 01:59:53 UTC (rev 20695)
@@ -65,6 +65,7 @@
 lib-y += perror_nomsg.o
 lib-y += perror_nomsg_and_die.o
 lib-y += pidfile.o
+lib-y += printable.o
 lib-y += process_escape_sequence.o
 lib-y += procps.o
 lib-y += read.o

Modified: trunk/busybox/networking/netstat.c
===================================================================
--- trunk/busybox/networking/netstat.c	2007-12-29 02:16:23 UTC (rev 20694)
+++ trunk/busybox/networking/netstat.c	2007-12-30 01:59:53 UTC (rev 20695)
@@ -349,13 +349,9 @@
 	const char *ss_proto, *ss_state, *ss_type;
 	char ss_flags[32];
 
-	/* TODO: currently we stop at first NUL byte. Is it a problem? */
-
 	if (nr == 0)
 		return 0; /* skip header */
 
-	*strchrnul(line, '\n') = '\0';
-
 	/* 2.6.15 may report lines like "... @/tmp/fam-user-^@^@^@^@^@^@^@..."
 	 * Other users report long lines filled by NUL bytes. 
 	 * (those ^@ are NUL bytes too). We see them as empty lines. */
@@ -443,9 +439,16 @@
 		strcat(ss_flags, "N ");
 	strcat(ss_flags, "]");
 
-	printf("%-5s %-6ld %-11s %-10s %-13s %6lu %s\n",
-		ss_proto, refcnt, ss_flags, ss_type, ss_state, inode,
-		line + path_ofs);
+	printf("%-5s %-6ld %-11s %-10s %-13s %6lu ",
+		ss_proto, refcnt, ss_flags, ss_type, ss_state, inode
+		);
+
+	/* TODO: currently we stop at first NUL byte. Is it a problem? */
+	line += path_ofs;
+	*strchrnul(line, '\n') = '\0';
+	while (*line)
+		fputc_printable(*line++, stdout);
+	bb_putchar('\n');
 	return 0;
 }
 




More information about the busybox-cvs mailing list