Date: Sun, 22 Aug 2004 05:10:45 GMT From: Paul <pprocacci@datapipe.com> To: freebsd-gnats-submit@FreeBSD.org Subject: standards/70813: [PATCH] ls not Posix compliant Message-ID: <200408220510.i7M5Ajfq046470@www.freebsd.org> Resent-Message-ID: <200408220520.i7M5KMsM060288@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 70813 >Category: standards >Synopsis: [PATCH] ls not Posix compliant >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-standards >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sun Aug 22 05:20:21 GMT 2004 >Closed-Date: >Last-Modified: >Originator: Paul >Release: 5.2.1-RELEASE-p8 >Organization: datapipe >Environment: FreeBSD Lucky 5.2.1-RELEASE-p8 FreeBSD 5.2.1-RELEASE-p8 #0: Tue Jun 29 12:04:24 EST 2004 root@Lucky:/usr/obj/usr/src/sys/LUCKY i386 >Description: The bin utility 'ls' does not conform to Posix standards. Specially the options g, n and o. SHORT DESCIPTIONS from Posix: -g "The same as -l, except that the owner shall not be written." -n "The same as -l, except that the owner's UID and GID numbers shall be written , rather than the associated character strings." -o "The same as -l, except that the group shall not be written." Current Desciption from freebsd, man page: man ls Please note that, in the manpage for ls, the -n option is currect, however the l s utility doesn't actually follow the rule. Also currently, the -o options is used to show the file flags. With my included patch, I changed it to '-O', but I'm sure you guys would want to keep some comp atibility somewhere. I just wasn't sure how you guys wanted to implement this, so I arbitrarily picked an unused letter. >How-To-Repeat: ls -g ls -n ls -o >Fix: http://hostsentry.net/ls.diff diff -u ls.orig/ls.c ls/ls.c --- ls.orig/ls.c Sun Aug 22 00:52:45 2004 +++ ls/ls.c Sun Aug 22 00:52:15 2004 @@ -126,8 +126,10 @@ int f_sectime; /* print the real time for all files */ static int f_singlecol; /* use single column output */ int f_size; /* list size in short listing */ + int f_sgroup; /* Show group on output */ int f_slash; /* similar to f_type, but only for dirs */ int f_sortacross; /* sort across rows, not down columns */ + int f_sowner; /* Show owner in output */ int f_statustime; /* use time of last mode change */ static int f_stream; /* stream the output, separate with commas */ static int f_timesort; /* sort by time vice name */ @@ -208,6 +210,9 @@ f_singlecol = 0; f_stream = 0; break; + case 'O': + f_flags = 1; + break; case 'x': f_sortacross = 1; f_longform = 0; @@ -259,6 +264,14 @@ f_nosort = 1; break; case 'g': /* Compatibility with 4.3BSD. */ +#ifndef COMPAT_43 + f_longform = 1; + f_singlecol = 0; + f_stream = 0; + f_sowner = 1; +#else + f_sowner = 0; +#endif break; case 'h': f_humanval = 1; @@ -277,9 +290,15 @@ break; case 'n': f_numericonly = 1; + f_longform = 1; + f_singlecol = 0; + f_stream = 0; break; case 'o': - f_flags = 1; + f_longform = 1; + f_singlecol = 0; + f_stream = 0; + f_sgroup = 1; break; case 'p': f_slash = 1; diff -u ls.orig/ls.h ls/ls.h --- ls.orig/ls.h Sun Aug 22 00:52:45 2004 +++ ls/ls.h Sun Aug 22 00:52:15 2004 @@ -53,8 +53,10 @@ 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_sgroup; /* Show group on output */ extern int f_slash; /* append a '/' if the file is a directory */ extern int f_sortacross; /* sort across rows, not down columns */ +extern int f_sowner; /* Show owner on output */ extern int f_statustime; /* use time of last mode change */ extern int f_notabs; /* don't use tab-separated multi-col output */ extern int f_type; /* add type character for non-regular files */ diff -u ls.orig/print.c ls/print.c --- ls.orig/print.c Sun Aug 22 00:52:45 2004 +++ ls/print.c Sun Aug 22 00:52:15 2004 @@ -191,9 +191,11 @@ prevdev = sp->st_dev; } np = p->fts_pointer; - (void)printf("%s %*u %-*s %-*s ", buf, dp->s_nlink, - sp->st_nlink, dp->s_user, np->user, dp->s_group, - np->group); + (void)printf("%s %u ", buf, dp->s_nlink); + if(!f_sowner) + (void)printf("%-*s ", dp->s_user, np->user); + if(!f_sgroup) + (void)printf("%-*s ", dp->s_group, np->group); if (f_flags) (void)printf("%-*s ", dp->s_flags, np->flags); if (f_label) >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200408220510.i7M5Ajfq046470>