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>
