newfs - add volume name support
authorAlex Hornung <ahornung@gmail.com>
Wed, 24 Nov 2010 17:20:42 +0000 (17:20 +0000)
committerAlex Hornung <ahornung@gmail.com>
Wed, 24 Nov 2010 17:20:42 +0000 (17:20 +0000)
Obtained-from: FreeBSD

sbin/newfs/mkfs.c
sbin/newfs/newfs.8
sbin/newfs/newfs.c

index 8bff74a..c007689 100644 (file)
@@ -66,6 +66,7 @@
 extern int     mfs;            /* run as the memory based filesystem */
 extern char    *mfs_mtpt;      /* mount point for mfs          */ 
 extern struct stat mfs_mtstat; /* stat prior to mount          */
+extern int     Lflag;          /* add a volume label */
 extern int     Nflag;          /* run mkfs without writing file system */
 extern int     Oflag;          /* format as an 4.3BSD file system */
 extern int     Uflag;          /* enable soft updates for file system */
@@ -96,6 +97,7 @@ extern int    avgfilesize;    /* expected average file size */
 extern int     avgfilesperdir; /* expected number of files per directory */
 extern caddr_t membase;        /* start address of memory based filesystem */
 extern char *  filename;
+extern u_char  *volumelabel;   /* volume label for filesystem */
 extern struct disktab geom;
 
 extern void fatal(const char *fmt, ...);
@@ -232,6 +234,8 @@ mkfs(char *fsys, int fi, int fo, const char *mfscopy)
        }
        if (Uflag)
                sblock.fs_flags |= FS_DOSOFTDEP;
+       if (Lflag)
+               strlcpy(sblock.fs_volname, volumelabel, MAXVOLLEN);
        /*
         * Validate the given file system size.
         * Verify that its last block can actually be accessed.
index 9d26273..693eb66 100644 (file)
@@ -33,7 +33,7 @@
 .\" $FreeBSD: src/sbin/newfs/newfs.8,v 1.26.2.15 2003/05/13 12:16:08 joerg Exp $
 .\" $DragonFly: src/sbin/newfs/newfs.8,v 1.7 2007/05/20 19:29:21 dillon Exp $
 .\"
-.Dd May 13, 2003
+.Dd November 24, 2010
 .Dt NEWFS 8
 .Os
 .Sh NAME
@@ -42,6 +42,7 @@
 .Nd construct a new UFS file system
 .Sh SYNOPSIS
 .Nm
+.Op Fl L Ar volname
 .Op Fl NCOU
 .Op Fl S Ar sector-size
 .Op Fl T Ar disktype
@@ -153,6 +154,8 @@ Tell
 .Nm Mount_mfs
 to copy the underlying filesystem into the MFS mount being created
 over it.
+.It Fl L Ar volname
+Add a volume label to the new file system.
 .It Fl N
 Cause the file system parameters to be printed out
 without really creating the file system.
index 99d0776..cb7b5ad 100644 (file)
@@ -157,6 +157,7 @@ void        fatal(const char *fmt, ...);
 int    mfs;                    /* run as the memory based filesystem */
 char   *mfs_mtpt;              /* mount point for mfs          */
 struct stat mfs_mtstat;                /* stat prior to mount          */
+int    Lflag;                  /* add a volume label */
 int    Nflag;                  /* run without writing file system */
 int    Oflag;                  /* format as an 4.3BSD file system */
 int    Cflag;                  /* copy underlying filesystem (mfs only) */
@@ -194,6 +195,7 @@ int mntflags = MNT_ASYNC;   /* flags to be passed to mount */
 int    t_or_u_flag = 0;        /* user has specified -t or -u */
 caddr_t        membase;                /* start address of memory based filesystem */
 char   *filename;
+u_char *volumelabel = NULL;    /* volume label for filesystem */
 #ifdef COMPAT
 char   *disktype;
 int    unlabeled;
@@ -208,7 +210,7 @@ static void mfsintr(int signo);
 int
 main(int argc, char **argv)
 {
-       int ch;
+       int ch, i;
        struct disktab geom;            /* disk geometry data */
        struct stat st;
        struct statfs *mp;
@@ -233,10 +235,22 @@ main(int argc, char **argv)
        }
 
        opstring = mfs ?
-           "NCF:T:Ua:b:c:d:e:f:g:h:i:m:o:s:v" :
-           "NOS:T:Ua:b:c:d:e:f:g:h:i:k:l:m:n:o:p:r:s:t:u:vx:";
+           "L:NCF:T:Ua:b:c:d:e:f:g:h:i:m:o:s:v" :
+           "L:NOS:T:Ua:b:c:d:e:f:g:h:i:k:l:m:n:o:p:r:s:t:u:vx:";
        while ((ch = getopt(argc, argv, opstring)) != -1) {
                switch (ch) {
+               case 'L':
+                       volumelabel = optarg;
+                       i = -1;
+                       while (isalnum(volumelabel[++i]))
+                               ;
+                       if (volumelabel[i] != '\0')
+                               errx(1, "bad volume label. Valid characters are alphanumerics.");
+                       if (strlen(volumelabel) >= MAXVOLLEN)
+                               errx(1, "bad volume label. Length is longer than %d.",
+                                   MAXVOLLEN);
+                       Lflag = 1;
+                       break;
                case 'N':
                        Nflag = 1;
                        break;
@@ -701,6 +715,7 @@ usage(void)
 #endif
        fprintf(stderr, "where fsoptions are:\n");
        fprintf(stderr, "\t-C (mfs) Copy the underlying filesystem to the MFS mount\n");
+       fprintf(stderr, "\t-L volume name\n");
        fprintf(stderr,
            "\t-N do not create file system, just print out parameters\n");
        fprintf(stderr, "\t-O create a 4.3BSD format filesystem\n");