Skip site navigation (1)Skip section navigation (2)
Date:      23 Jun 2000 00:38:11 +0200
From:      Assar Westerlund <assar@sics.se>
To:        current@FreeBSD.ORG
Cc:        kris@FreeBSD.ORG
Subject:   fixes for bin/19354 or ls and wierd characters
Message-ID:  <5lbt0t9wa4.fsf@assaris.sics.se>

next in thread | raw e-mail | index | archive | help
I have a proposed patch to ls that fixes bin/19354 and makes things
more consistent.  Comments?

/assar

Index: extern.h
===================================================================
RCS file: /home/ncvs/src/bin/ls/extern.h,v
retrieving revision 1.13
diff -u -w -r1.13 extern.h
--- extern.h	2000/06/17 14:19:31	1.13
+++ extern.h	2000/06/22 22:36:10
@@ -43,13 +43,13 @@
 int	 statcmp __P((const FTSENT *, const FTSENT *));
 int	 revstatcmp __P((const FTSENT *, const FTSENT *));
 
-void	 prcopy __P((char *, char *, int));
 void	 printcol __P((DISPLAY *));
 void	 printlong __P((DISPLAY *));
 void	 printscol __P((DISPLAY *));
 void	 usage __P((void));
-int	 len_octal __P((char *, int));
-int	 prn_octal __P((char *));
+int	 len_octal __P((const char *, int));
+int	 prn_octal __P((const char *));
+int	 prn_printable __P((const char *));
 #ifdef COLORLS
 void	 parsecolors __P((char *cs));
 void     colorquit __P((int));
Index: ls.c
===================================================================
RCS file: /home/ncvs/src/bin/ls/ls.c,v
retrieving revision 1.41
diff -u -w -r1.41 ls.c
--- ls.c	2000/06/17 14:19:31	1.41
+++ ls.c	2000/06/22 22:36:12
@@ -566,8 +566,6 @@
 				continue;
 			}
 		}
-		if (f_nonprint)
-			prcopy(cur->fts_name, cur->fts_name, cur->fts_namelen);
 		if (cur->fts_namelen > maxlen)
 			maxlen = cur->fts_namelen;
 		if (f_octal || f_octal_escape) {
Index: ls.h
===================================================================
RCS file: /home/ncvs/src/bin/ls/ls.h,v
retrieving revision 1.13
diff -u -w -r1.13 ls.h
--- ls.h	2000/06/05 02:14:01	1.13
+++ ls.h	2000/06/22 22:36:16
@@ -48,6 +48,7 @@
 extern int f_longform;		/* long listing format */
 extern int f_octal;		/* print unprintables in octal */
 extern int f_octal_escape;	/* like f_octal but use C escapes if possible */
+extern int f_nonprint;		/* show unprintables as ? */
 extern int f_sectime;		/* print the real time for all files */
 extern int f_size;		/* list size in short listing */
 extern int f_statustime;	/* use time of last mode change */
Index: print.c
===================================================================
RCS file: /home/ncvs/src/bin/ls/print.c,v
retrieving revision 1.35
diff -u -w -r1.35 print.c
--- print.c	2000/06/21 21:49:57	1.35
+++ print.c	2000/06/22 22:36:18
@@ -112,6 +112,21 @@
 	}
 }
 
+/*
+ * print name in current style
+ */
+static int
+printname(name)
+	const char *name;
+{
+	if (f_octal || f_octal_escape)
+		return prn_octal(name);
+	else if (f_nonprint)
+		return prn_printable(name);
+	else
+		return printf("%s", name);
+}
+
 void
 printlong(dp)
 	DISPLAY *dp;
@@ -166,8 +181,7 @@
 		if (f_color)
 			color_printed = colortype(sp->st_mode);
 #endif
-		if (f_octal || f_octal_escape) (void)prn_octal(p->fts_name);
-		else (void)printf("%s", p->fts_name);
+		(void)printname(p->fts_name);
 #ifdef COLORLS
 		if (f_color && color_printed)
 			endcolor(0);
@@ -278,8 +292,7 @@
 	if (f_color)
 		color_printed = colortype(sp->st_mode);
 #endif
-	chcnt += (f_octal || f_octal_escape) ? prn_octal(p->fts_name)
-	                                     : printf("%s", p->fts_name);
+	chcnt += printname(p->fts_name);
 #ifdef COLORLS
 	if (f_color && color_printed)
 		endcolor(0);
@@ -494,9 +507,6 @@
 		return;
 	}
 	path[lnklen] = '\0';
-	if (f_octal || f_octal_escape) {
 	        (void)printf(" -> ");
-	        (void)prn_octal(path);
-	}
-	else (void)printf(" -> %s", path);
+	printname(path);
 }
Index: util.c
===================================================================
RCS file: /home/ncvs/src/bin/ls/util.c,v
retrieving revision 1.21
diff -u -w -r1.21 util.c
--- util.c	2000/06/06 07:29:43	1.21
+++ util.c	2000/06/22 22:36:18
@@ -56,17 +56,19 @@
 #include "ls.h"
 #include "extern.h"
 
-void
-prcopy(src, dest, len)
-	char *src, *dest;
-	int len;
+int
+prn_printable(s)
+	const char *s;
 {
-	unsigned char ch;
+	unsigned char c;
+	int n;
 
-	while (len--) {
-		ch = *src++;
-		*dest++ = isprint(ch) ? ch : '?';
-	}
+	for (n = 0; (c = *s) != '\0'; ++s, ++n)
+		if (isprint(c))
+			putchar(c);
+		else
+			putchar('?');
+	return n;
 }
 
 /*
@@ -84,7 +86,7 @@
 
 int
 len_octal(s, len)
-        char *s;
+        const char *s;
 	int len;
 {
 	int r = 0;
@@ -96,7 +98,7 @@
 
 int
 prn_octal(s)
-        char *s;
+        const char *s;
 {
         unsigned char ch;
 	int len = 0;


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5lbt0t9wa4.fsf>