Add -n option to print numeric user and group IDs instead of names

in a long (-l) listing.

MFC-jockies should make sure that bde's concerns regarding the number
of digits required to represent a uid_t and the use of snprintf
on the associated PR have been addressed before going wild.

PR:	12866
Reported by:	Philip Kizer <pckizer@nostrum.com>
Obtained from:	NetBSD
This commit is contained in:
Sheldon Hearn 1999-08-02 14:55:58 +00:00
parent 2faae814fb
commit f3a6a64e4a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=49373
3 changed files with 31 additions and 9 deletions

View File

@ -33,7 +33,7 @@
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.\" @(#)ls.1 8.7 (Berkeley) 7/29/94 .\" @(#)ls.1 8.7 (Berkeley) 7/29/94
.\" $Id: ls.1,v 1.27 1999/04/27 23:33:52 hoek Exp $ .\" $Id: ls.1,v 1.28 1999/05/08 10:20:27 kris Exp $
.\" .\"
.Dd July 29, 1994 .Dd July 29, 1994
.Dt LS 1 .Dt LS 1
@ -148,6 +148,11 @@ not blocks. This option overrides the environment variable BLOCKSIZE.
(The lowercase letter ``ell.'') List in long format. (See below.) (The lowercase letter ``ell.'') List in long format. (See below.)
If the output is to a terminal, a total sum for all the file If the output is to a terminal, a total sum for all the file
sizes is output on a line before the long listing. sizes is output on a line before the long listing.
.It Fl n
Display user and group IDs numerically rather than converting to a user
or group name in a long
.Pq Fl l
output.
.It Fl o .It Fl o
Include the file flags in a long Include the file flags in a long
.Pq Fl l .Pq Fl l
@ -247,7 +252,10 @@ If the modification time of the file is more than 6 months
in the past or future, then the year of the last modification in the past or future, then the year of the last modification
is displayed in place of the hour and minute fields. is displayed in place of the hour and minute fields.
.Pp .Pp
If the owner or group names are not a known user or group name If the owner or group names are not a known user or group name,
or the
.Fl n
option is given,
the numeric ID's are displayed. the numeric ID's are displayed.
.Pp .Pp
If the file is a character special or block special file, If the file is a character special or block special file,

View File

@ -45,7 +45,7 @@ static const char copyright[] =
static char sccsid[] = "@(#)ls.c 8.5 (Berkeley) 4/2/94"; static char sccsid[] = "@(#)ls.c 8.5 (Berkeley) 4/2/94";
#else #else
static const char rcsid[] = static const char rcsid[] =
"$Id: ls.c,v 1.23 1998/08/02 22:47:11 hoek Exp $"; "$Id: ls.c,v 1.24 1999/05/08 10:20:30 kris Exp $";
#endif #endif
#endif /* not lint */ #endif /* not lint */
@ -88,6 +88,7 @@ int f_listdot; /* list files beginning with . */
int f_longform; /* long listing format */ int f_longform; /* long listing format */
int f_nonprint; /* show unprintables as ? */ int f_nonprint; /* show unprintables as ? */
int f_nosort; /* don't sort output */ int f_nosort; /* don't sort output */
int f_numericonly; /* don't convert uid/gid to name */
int f_octal; /* show unprintables as \xxx */ int f_octal; /* show unprintables as \xxx */
int f_octal_escape; /* like f_octal but use C escapes if possible */ int f_octal_escape; /* like f_octal but use C escapes if possible */
int f_recursive; /* ls subdirectories also */ int f_recursive; /* ls subdirectories also */
@ -137,7 +138,7 @@ main(argc, argv)
f_listdot = 1; f_listdot = 1;
fts_options = FTS_PHYSICAL; fts_options = FTS_PHYSICAL;
while ((ch = getopt(argc, argv, "1ABCFHLPRTWabcdfgikloqrstu")) != -1) { while ((ch = getopt(argc, argv, "1ABCFHLPRTWabcdfgiklnoqrstu")) != -1) {
switch (ch) { switch (ch) {
/* /*
* The -1, -C and -l options all override each other so shell * The -1, -C and -l options all override each other so shell
@ -209,6 +210,9 @@ main(argc, argv)
case 'k': case 'k':
f_kblocks = 1; f_kblocks = 1;
break; break;
case 'n':
f_numericonly = 1;
break;
case 'o': case 'o':
f_flags = 1; f_flags = 1;
break; break;
@ -400,7 +404,8 @@ display(p, list)
int bcfile, flen, glen, ulen, maxflags, maxgroup, maxuser; int bcfile, flen, glen, ulen, maxflags, maxgroup, maxuser;
char *initmax; char *initmax;
int entries, needstats; int entries, needstats;
char *user, *group, *flags, buf[20]; /* 32 bits == 10 digits */ char *user, *group, *flags;
char nuser[12], ngroup[12], buf[21]; /* 32 bits == 10 digits */
/* /*
* If list is NULL there are two possibilities: that the parent * If list is NULL there are two possibilities: that the parent
@ -512,10 +517,19 @@ display(p, list)
btotal += sp->st_blocks; btotal += sp->st_blocks;
if (f_longform) { if (f_longform) {
user = user_from_uid(sp->st_uid, 0); if (f_numericonly) {
(void)snprintf(nuser, sizeof(nuser),
"%u", sp->st_uid);
(void)snprintf(ngroup, sizeof(ngroup),
"%u", sp->st_gid);
user = nuser;
group = ngroup;
} else {
user = user_from_uid(sp->st_uid, 0);
group = group_from_gid(sp->st_gid, 0);
}
if ((ulen = strlen(user)) > maxuser) if ((ulen = strlen(user)) > maxuser)
maxuser = ulen; maxuser = ulen;
group = group_from_gid(sp->st_gid, 0);
if ((glen = strlen(group)) > maxgroup) if ((glen = strlen(group)) > maxgroup)
maxgroup = glen; maxgroup = glen;
if (f_flags) { if (f_flags) {

View File

@ -39,7 +39,7 @@
static char sccsid[] = "@(#)util.c 8.3 (Berkeley) 4/2/94"; static char sccsid[] = "@(#)util.c 8.3 (Berkeley) 4/2/94";
#else #else
static const char rcsid[] = static const char rcsid[] =
"$Id: util.c,v 1.17 1998/04/25 00:12:32 ache Exp $"; "$Id: util.c,v 1.18 1998/10/13 12:19:31 des Exp $";
#endif #endif
#endif /* not lint */ #endif /* not lint */
@ -158,7 +158,7 @@ prn_octal(s)
void void
usage() usage()
{ {
(void)fprintf(stderr, "usage: ls [-ACFHLPRTWacdfgikloqrstu1]" (void)fprintf(stderr, "usage: ls [-ACFHLPRTWacdfgiklnoqrstu1]"
" [file ...]\n"); " [file ...]\n");
exit(1); exit(1);
} }