Add an option, -y, which displays the 64 bit FSMID for a file or directory.
authorMatthew Dillon <dillon@dragonflybsd.org>
Sat, 17 Sep 2005 07:08:43 +0000 (07:08 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sat, 17 Sep 2005 07:08:43 +0000 (07:08 +0000)
bin/ls/ls.1
bin/ls/ls.c
bin/ls/ls.h
bin/ls/print.c

index 23b5251..f780174 100644 (file)
@@ -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 . )
index 0fbfa72..ee9a94d 100644 (file)
@@ -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 <sys/types.h>
@@ -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;
                        }
                }
index 1b43a77..ecf7099 100644 (file)
@@ -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;
index e79ee5f..dff819a 100644 (file)
@@ -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 <sys/param.h>
@@ -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))