From owner-freebsd-current Thu Jun 22 15:38: 3 2000 Delivered-To: freebsd-current@freebsd.org Received: from assaris.sics.se (assaris.sics.se [193.10.66.234]) by hub.freebsd.org (Postfix) with ESMTP id 422B637B752; Thu, 22 Jun 2000 15:37:53 -0700 (PDT) (envelope-from assar@assaris.sics.se) Received: (from assar@localhost) by assaris.sics.se (8.9.3/8.9.3) id AAA09324; Fri, 23 Jun 2000 00:38:11 +0200 (CEST) (envelope-from assar) To: current@FreeBSD.ORG Cc: kris@FreeBSD.ORG Subject: fixes for bin/19354 or ls and wierd characters From: Assar Westerlund Date: 23 Jun 2000 00:38:11 +0200 Message-ID: <5lbt0t9wa4.fsf@assaris.sics.se> Lines: 174 User-Agent: Gnus/5.070098 (Pterodactyl Gnus v0.98) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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