summaryrefslogtreecommitdiff
path: root/sbin/newfs
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/newfs')
-rw-r--r--sbin/newfs/newfs.811
-rw-r--r--sbin/newfs/newfs.c43
-rw-r--r--sbin/newfs/pathnames.h34
3 files changed, 78 insertions, 10 deletions
diff --git a/sbin/newfs/newfs.8 b/sbin/newfs/newfs.8
index a995f43eebd..dbc6c339774 100644
--- a/sbin/newfs/newfs.8
+++ b/sbin/newfs/newfs.8
@@ -1,4 +1,4 @@
-.\" $OpenBSD: newfs.8,v 1.3 1996/06/23 14:31:46 deraadt Exp $
+.\" $OpenBSD: newfs.8,v 1.4 1996/12/04 08:38:58 deraadt Exp $
.\" $NetBSD: newfs.8,v 1.12 1995/03/18 14:58:41 cgd Exp $
.\"
.\" Copyright (c) 1983, 1987, 1991, 1993, 1994
@@ -60,9 +60,10 @@
.Op Fl p Ar sectors
.Op Fl r Ar revolutions
.Op Fl s Ar size
-.Op Fl t Ar tracks
+.Op Fl t Ar fstype
.Op Fl u Ar sectors
.Op Fl x Ar sectors
+.Op Fl z Ar tracks
.Ar special
.Nm mount_mfs
.Op Fl N
@@ -226,9 +227,13 @@ They are not counted as part of the sectors/track
since they are not available to the file system for data allocation.
.It Fl r Ar revolutions/minute
The speed of the disk in revolutions per minute.
-.It Fl t Ar #tracks/cylinder
+.It Fl z Ar #tracks/cylinder
The number of tracks/cylinder available for data allocation by the file
system.
+.It Fl t Ar fstype
+Set the filesystem type of which filesystem you wish to create.
+.Nm newfs
+will be smart enough to run the alternate newfs_XXX program instead.
.It Fl u Ar sectors/track
The number of sectors per track available for data allocation by the file
system.
diff --git a/sbin/newfs/newfs.c b/sbin/newfs/newfs.c
index 05b24156e2d..4c0a5b30909 100644
--- a/sbin/newfs/newfs.c
+++ b/sbin/newfs/newfs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: newfs.c,v 1.5 1996/11/24 23:46:44 millert Exp $ */
+/* $OpenBSD: newfs.c,v 1.6 1996/12/04 08:38:59 deraadt Exp $ */
/* $NetBSD: newfs.c,v 1.20 1996/05/16 07:13:03 thorpej Exp $ */
/*
@@ -44,7 +44,7 @@ static char copyright[] =
#if 0
static char sccsid[] = "@(#)newfs.c 8.8 (Berkeley) 4/18/94";
#else
-static char rcsid[] = "$OpenBSD: newfs.c,v 1.5 1996/11/24 23:46:44 millert Exp $";
+static char rcsid[] = "$OpenBSD: newfs.c,v 1.6 1996/12/04 08:38:59 deraadt Exp $";
#endif
#endif /* not lint */
@@ -79,6 +79,7 @@ static char rcsid[] = "$OpenBSD: newfs.c,v 1.5 1996/11/24 23:46:44 millert Exp $
#endif
#include "mntopts.h"
+#include "pathnames.h"
struct mntopt mopts[] = {
MOPT_STDOPTS,
@@ -205,6 +206,9 @@ main(argc, argv)
struct statfs *mp;
int fsi, fso, len, n, maxpartitions;
char *cp, *s1, *s2, *special, *opstring, buf[BUFSIZ];
+ char *fstype = NULL;
+ char **saveargv = argv;
+ int ffs = 1;
if (progname = strrchr(*argv, '/'))
++progname;
@@ -222,8 +226,8 @@ main(argc, argv)
opstring = mfs ?
"NT:a:b:c:d:e:f:i:m:o:s:" :
- "NOS:T:a:b:c:d:e:f:i:k:l:m:n:o:p:r:s:t:u:x:";
- while ((ch = getopt(argc, argv, opstring)) != EOF)
+ "NOS:T:a:b:c:d:e:f:i:k:l:m:n:o:p:r:s:t:u:x:z:";
+ while ((ch = getopt(argc, argv, opstring)) != EOF) {
switch (ch) {
case 'N':
Nflag = 1;
@@ -313,9 +317,14 @@ main(argc, argv)
if ((fssize = atoi(optarg)) <= 0)
fatal("%s: bad file system size", optarg);
break;
- case 't':
+ case 'z':
+
if ((ntracks = atoi(optarg)) <= 0)
fatal("%s: bad total tracks", optarg);
+ case 't':
+ fstype = optarg;
+ if (strcmp(fstype, "ffs"))
+ ffs = 0;
break;
case 'u':
if ((nsectors = atoi(optarg)) <= 0)
@@ -330,13 +339,33 @@ main(argc, argv)
default:
usage();
}
+ if (!ffs)
+ break;
+ }
argc -= optind;
argv += optind;
- if (argc != 2 && (mfs || argc != 1))
+ if (ffs && argc != 2 && (mfs || argc != 1))
usage();
special = argv[0];
+ if (!mfs) {
+ char name[MAXPATHLEN];
+
+ if (fstype == NULL)
+ fstype = readlabelfs(special);
+ if (fstype == NULL || strcmp(fstype, "ffs")) {
+ snprintf(name, sizeof name, "%s/newfs_%s", _PATH_SBIN,
+ fstype);
+ saveargv[0] = name;
+ (void)execv(name, saveargv);
+ snprintf(name, sizeof name, "%s/newfs_%s", _PATH_USRSBIN,
+ fstype);
+ (void)execv(name, saveargv);
+ err(1, "%s not found", name);
+ }
+ }
+
if (mfs && !strcmp(special, "swap")) {
/*
* it's an MFS, mounted on "swap." fake up a label.
@@ -725,8 +754,8 @@ usage()
fprintf(stderr, "\t-p spare sectors per track\n");
fprintf(stderr, "\t-s file system size (sectors)\n");
fprintf(stderr, "\t-r revolutions/minute\n");
- fprintf(stderr, "\t-t tracks/cylinder\n");
fprintf(stderr, "\t-u sectors/track\n");
fprintf(stderr, "\t-x spare sectors per cylinder\n");
+ fprintf(stderr, "\t-z tracks/cylinder\n");
exit(1);
}
diff --git a/sbin/newfs/pathnames.h b/sbin/newfs/pathnames.h
new file mode 100644
index 00000000000..86ca8484504
--- /dev/null
+++ b/sbin/newfs/pathnames.h
@@ -0,0 +1,34 @@
+/* $OpenBSD: pathnames.h,v 1.1 1996/12/04 08:38:59 deraadt Exp $ */
+/* $NetBSD: pathnames.h,v 1.1 1996/09/11 20:27:15 christos Exp $ */
+
+/*
+ * Copyright (c) 1996 Christos Zoulas. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Christos Zoulas.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define _PATH_SBIN "/sbin"
+#define _PATH_USRSBIN "/usr/sbin"