From d20227c14aa5d041424e92db94f0d2e0a96d1dd4 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sat, 17 Sep 2005 07:08:43 +0000 Subject: [PATCH] Add an option, -y, which displays the 64 bit FSMID for a file or directory. --- bin/ls/ls.1 | 6 +++++- bin/ls/ls.c | 36 +++++++++++++++++++++++++++++++----- bin/ls/ls.h | 5 ++++- bin/ls/print.c | 4 +++- 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/bin/ls/ls.1 b/bin/ls/ls.1 index 23b5251afa..f780174401 100644 --- a/bin/ls/ls.1 +++ b/bin/ls/ls.1 @@ -34,7 +34,7 @@ .\" .\" @(#)ls.1 8.7 (Berkeley) 7/29/94 .\" $FreeBSD: src/bin/ls/ls.1,v 1.33.2.21 2003/05/07 23:56:14 trhodes Exp $ -.\" $DragonFly: src/bin/ls/ls.1,v 1.2 2003/06/17 04:22:50 dillon Exp $ +.\" $DragonFly: src/bin/ls/ls.1,v 1.3 2005/09/17 07:08:43 dillon Exp $ .\" .Dd July 8, 2002 .Dt LS 1 @@ -242,6 +242,10 @@ The same as .Fl C , except that the multi-column output is produced with entries sorted across, rather than down, the columns. +.It Fl y +Include the FSMID field in a long +.Pq Fl l +output. .It Fl 1 (The numeric digit .Dq one . ) diff --git a/bin/ls/ls.c b/bin/ls/ls.c index 0fbfa72c1e..ee9a94dda7 100644 --- a/bin/ls/ls.c +++ b/bin/ls/ls.c @@ -36,7 +36,7 @@ * @(#) Copyright (c) 1989, 1993, 1994 The Regents of the University of California. All rights reserved. * @(#)ls.c 8.5 (Berkeley) 4/2/94 * $FreeBSD: src/bin/ls/ls.c,v 1.32.2.8 2002/11/17 10:27:34 tjr Exp $ - * $DragonFly: src/bin/ls/ls.c,v 1.6 2004/11/07 20:54:51 eirikn Exp $ + * $DragonFly: src/bin/ls/ls.c,v 1.7 2005/09/17 07:08:43 dillon Exp $ */ #include @@ -84,6 +84,7 @@ int termwidth = 80; /* default terminal width */ /* flags */ int f_accesstime; /* use time of last access */ int f_flags; /* show flags associated with a file */ + int f_fsmid; /* show FSMID associated with a file */ int f_humanval; /* show human-readable file sizes */ int f_inode; /* print inode */ static int f_kblocks; /* print size in kilobytes */ @@ -157,7 +158,7 @@ main(int argc, char *argv[]) f_listdot = 1; fts_options = FTS_PHYSICAL; - while ((ch = getopt(argc, argv, "1ABCFGHLPRTWabcdfghiklmnopqrstuwx")) + while ((ch = getopt(argc, argv, "1ABCFGHLPRTWabcdfghiklmnopqrstuwxy")) != -1) { switch (ch) { /* @@ -187,6 +188,11 @@ main(int argc, char *argv[]) f_longform = 0; f_singlecol = 0; break; + case 'y': +#ifdef _ST_FSMID_PRESENT_ + f_fsmid = 1; +#endif + break; /* The -c and -u options override each other. */ case 'c': f_statustime = 1; @@ -495,11 +501,12 @@ display(FTSENT *p, FTSENT *list) int bcfile, maxflags; gid_t maxgroup; uid_t maxuser; - size_t flen, ulen, glen; + size_t fsmidlen, flen, ulen, glen; char *initmax; int entries, needstats; const char *user, *group; char *flags; + int64_t fsmid; char buf[STRBUF_SIZEOF(u_quad_t) + 1]; char ngroup[STRBUF_SIZEOF(uid_t) + 1]; char nuser[STRBUF_SIZEOF(gid_t) + 1]; @@ -664,11 +671,23 @@ display(FTSENT *p, FTSENT *list) flen = strlen(flags); if (flen > (size_t)maxflags) maxflags = flen; - } else + } else { flen = 0; + } +#ifdef _ST_FSMID_PRESENT_ + if (f_fsmid) { + fsmid = sp->st_fsmid; + fsmidlen = 18; + } else { + fsmid = 0; + fsmidlen = 0; + } +#else + fsmidlen = 0; +#endif if ((np = malloc(sizeof(NAMES) + - ulen + glen + flen + 3)) == NULL) + ulen + glen + flen + fsmidlen + 4)) == NULL) err(1, NULL); np->user = &np->data[0]; @@ -685,6 +704,13 @@ display(FTSENT *p, FTSENT *list) strcpy(np->flags, flags); free(flags); } +#ifdef _ST_FSMID_PRESENT_ + if (f_fsmid) { + np->fsmid = np->data + ulen + glen + flen + 3; + snprintf(np->fsmid, fsmidlen + 1, + "%016llx", fsmid); + } +#endif cur->fts_pointer = np; } } diff --git a/bin/ls/ls.h b/bin/ls/ls.h index 1b43a77fed..ecf7099542 100644 --- a/bin/ls/ls.h +++ b/bin/ls/ls.h @@ -36,7 +36,7 @@ * * from: @(#)ls.h 8.1 (Berkeley) 5/31/93 * $FreeBSD: src/bin/ls/ls.h,v 1.11.2.4 2002/07/08 06:59:27 tjr Exp $ - * $DragonFly: src/bin/ls/ls.h,v 1.3 2004/09/26 15:53:25 asmodai Exp $ + * $DragonFly: src/bin/ls/ls.h,v 1.4 2005/09/17 07:08:43 dillon Exp $ */ #define NO_PRINT 1 @@ -46,6 +46,7 @@ extern int termwidth; extern int f_accesstime; /* use time of last access */ extern int f_flags; /* show flags associated with a file */ +extern int f_fsmid; /* show FSMID associated with a file */ extern int f_humanval; /* show human-readable file sizes */ extern int f_inode; /* print inode */ extern int f_longform; /* long listing format */ @@ -71,6 +72,7 @@ typedef struct { int maxlen; u_int s_block; u_int s_flags; + u_int s_fsmid; u_int s_group; u_int s_inode; u_int s_nlink; @@ -82,5 +84,6 @@ typedef struct { char *user; char *group; char *flags; + char *fsmid; char data[1]; } NAMES; diff --git a/bin/ls/print.c b/bin/ls/print.c index e79ee5f73d..dff819a25b 100644 --- a/bin/ls/print.c +++ b/bin/ls/print.c @@ -35,7 +35,7 @@ * * @(#)print.c 8.4 (Berkeley) 4/17/94 * $FreeBSD: src/bin/ls/print.c,v 1.19.2.7 2002/11/17 10:27:34 tjr Exp $ - * $DragonFly: src/bin/ls/print.c,v 1.7 2004/11/07 20:54:51 eirikn Exp $ + * $DragonFly: src/bin/ls/print.c,v 1.8 2005/09/17 07:08:43 dillon Exp $ */ #include @@ -176,6 +176,8 @@ printlong(DISPLAY *dp) printf("%s %*u %-*s %-*s ", buf, dp->s_nlink, sp->st_nlink, dp->s_user, np->user, dp->s_group, np->group); + if (f_fsmid) + printf("%s ", np->fsmid); if (f_flags) printf("%-*s ", dp->s_flags, np->flags); if (S_ISCHR(sp->st_mode) || S_ISBLK(sp->st_mode)) -- 2.35.2