- int fsi, fso;
- register int i;
- int status;
-
- argc--, argv++;
- while (argc > 0 && argv[0][0] == '-') {
- for (cp = &argv[0][1]; *cp; cp++)
- switch (*cp) {
-
- case 'N':
- Nflag++;
- break;
-
- 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 'a':
- if (argc < 1)
- fatal("-a: spare sectors per cylinder");
- argc--, argv++;
- cylspares = atoi(*argv);
- if (cylspares < 0)
- fatal("%s: bad spare sectors per cylinder", *argv);
- goto next;
-
- case 'b':
- if (argc < 1)
- fatal("-b: missing block size");
- argc--, argv++;
- bsize = atoi(*argv);
- if (bsize < MINBSIZE)
- fatal("%s: bad block 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);
- cpgflg++;
- goto next;
-
- case 'd':
- if (argc < 1)
- fatal("-d: missing sectors/track");
- argc--, argv++;
- nsectors = atoi(*argv);
- if (nsectors <= 0)
- fatal("%s: bad sectors/track", *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 'i':
- if (argc < 1)
- fatal("-i: missing bytes per inode\n");
- argc--, argv++;
- density = atoi(*argv);
- if (density <= 0)
- fatal("%s: bad bytes per inode\n",
- *argv);
- goto next;
-
- case 'k':
- if (argc < 1)
- fatal("-k: track skew");
- argc--, argv++;
- trackskew = atoi(*argv);
- if (trackskew < 0)
- fatal("%s: bad track skew", *argv);
- goto next;
-
- case 'l':
- if (argc < 1)
- fatal("-l: interleave");
- argc--, argv++;
- interleave = atoi(*argv);
- if (interleave <= 0)
- fatal("%s: bad interleave", *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 'o':
- if (argc < 1)
- fatal("-o: missing optimization preference");
- argc--, argv++;
- if (strcmp(*argv, "space") == 0)
+ struct statfs *mp;
+ int fsi, fso, len, n;
+ char *cp, *s1, *s2, *special, *opstring, buf[BUFSIZ];
+
+ if (progname = rindex(*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)