- register int i;
- int status;
-
- argc--, argv++;
- while (argc > 0 && argv[0][0] == '-') {
- for (cp = &argv[0][1]; *cp; cp++)
- switch (*cp) {
-
- case 'v':
- verbose++;
- break;
-
- case 'n':
- noboot++;
- break;
-
- case 's':
- if (argc < 1)
- fatal("-s: missing file system size");
- argc--, argv++;
- fssize = atoi(*argv);
- if (fssize < 0)
- fatal("%s: bad file system size",
- *argv);
- goto next;
-
- case 't':
- if (argc < 1)
- fatal("-t: missing track total");
- argc--, argv++;
- ntracks = atoi(*argv);
- if (ntracks < 0)
- fatal("%s: bad total tracks", *argv);
- goto next;
-
- case 'b':
- if (argc < 1)
- fatal("-b: missing block size");
- argc--, argv++;
- bsize = atoi(*argv);
- if (bsize < 0 || bsize < MINBSIZE)
- fatal("%s: bad block size", *argv);
- goto next;
-
- case 'f':
- if (argc < 1)
- fatal("-f: missing frag size");
- argc--, argv++;
- fsize = atoi(*argv);
- if (fsize < 0)
- fatal("%s: bad frag size", *argv);
- goto next;
-
- case 'S':
- if (argc < 1)
- fatal("-S: missing sector size");
- argc--, argv++;
- sectorsize = atoi(*argv);
- if (sectorsize < 0)
- fatal("%s: bad sector size", *argv);
- goto next;
-
- case 'c':
- if (argc < 1)
- fatal("-c: missing cylinders/group");
- argc--, argv++;
- cpg = atoi(*argv);
- if (cpg < 0)
- fatal("%s: bad cylinders/group", *argv);
- goto next;
-
- case 'm':
- if (argc < 1)
- fatal("-m: missing free space %%\n");
- argc--, argv++;
- minfree = atoi(*argv);
- if (minfree < 0 || minfree > 99)
- fatal("%s: bad free space %%\n",
- *argv);
- goto next;
-
- case 'r':
- if (argc < 1)
- fatal("-r: missing revs/minute\n");
- argc--, argv++;
- rpm = atoi(*argv);
- if (rpm < 0)
- fatal("%s: bad revs/minute\n", *argv);
- goto next;
-
- default:
- fatal("-%c: unknown flag", cp);
+ struct statfs *mp;
+ int fsi, fso, len, n;
+ char *cp, *s1, *s2, *special, *opstring, buf[BUFSIZ];
+
+ if (progname = strrchr(*argv, '/'))
+ ++progname;
+ else
+ progname = *argv;
+
+ if (strstr(progname, "mfs")) {
+ mfs = 1;
+ Nflag++;
+ }
+
+ 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)
+ switch (ch) {
+ case 'N':
+ Nflag = 1;
+ break;
+ case 'O':
+ Oflag = 1;
+ break;
+ case 'S':
+ if ((sectorsize = atoi(optarg)) <= 0)
+ fatal("%s: bad sector size", optarg);
+ break;
+#ifdef COMPAT
+ case 'T':
+ disktype = optarg;
+ break;
+#endif
+ case 'a':
+ if ((maxcontig = atoi(optarg)) <= 0)
+ fatal("%s: bad maximum contiguous blocks\n",
+ optarg);
+ break;
+ case 'b':
+ if ((bsize = atoi(optarg)) < MINBSIZE)
+ fatal("%s: bad block size", optarg);
+ break;
+ case 'c':
+ if ((cpg = atoi(optarg)) <= 0)
+ fatal("%s: bad cylinders/group", optarg);
+ cpgflg++;
+ break;
+ case 'd':
+ if ((rotdelay = atoi(optarg)) < 0)
+ fatal("%s: bad rotational delay\n", optarg);
+ break;
+ case 'e':
+ if ((maxbpg = atoi(optarg)) <= 0)
+ fatal("%s: bad blocks per file in a cylinder group\n",
+ optarg);
+ break;
+ case 'f':
+ if ((fsize = atoi(optarg)) <= 0)
+ fatal("%s: bad fragment size", optarg);
+ break;
+ case 'i':
+ if ((density = atoi(optarg)) <= 0)
+ fatal("%s: bad bytes per inode\n", optarg);
+ break;
+ case 'k':
+ if ((trackskew = atoi(optarg)) < 0)
+ fatal("%s: bad track skew", optarg);
+ break;
+ case 'l':
+ if ((interleave = atoi(optarg)) <= 0)
+ fatal("%s: bad interleave", optarg);
+ break;
+ case 'm':
+ if ((minfree = atoi(optarg)) < 0 || minfree > 99)
+ fatal("%s: bad free space %%\n", optarg);
+ break;
+ case 'n':
+ if ((nrpos = atoi(optarg)) <= 0)
+ fatal("%s: bad rotational layout count\n",
+ optarg);
+ break;
+ case 'o':
+ if (mfs)
+ getmntopts(optarg, mopts, &mntflags);
+ else {
+ if (strcmp(optarg, "space") == 0)
+ opt = FS_OPTSPACE;
+ else if (strcmp(optarg, "time") == 0)
+ opt = FS_OPTTIME;
+ else
+ fatal("%s: unknown optimization preference: use `space' or `time'.");