static char sccsid
[] = "@(#)newfs.c 4.6 2/20/83";
* newfs: friendly front end to mkfs
#define BOOTDIR "/usr/mdec" /* directory for boot blocks */
int verbose
; /* show mkfs line before exec */
int fssize
; /* file system size */
int fsize
; /* fragment size */
int bsize
; /* block size */
int ntracks
; /* # tracks/cylinder */
int nsectors
; /* # sectors/track */
int sectorsize
; /* bytes/sector */
int cpg
; /* cylinders/cylinder group */
int minfree
; /* free space threshold */
int rpm
; /* revolutions/minute of drive */
char *av
[20]; /* argv array and buffers for exec */
register struct disktab
*dp
;
register struct partition
*pp
;
while (argc
> 0 && argv
[0][0] == '-') {
for (cp
= &argv
[0][1]; *cp
; cp
++)
fatal("-s: missing file system size");
fatal("%s: bad file system size",
fatal("-t: missing track total");
fatal("%s: bad total tracks", *argv
);
fatal("-b: missing block size");
if (bsize
< 0 || bsize
< MINBSIZE
)
fatal("%s: bad block size", *argv
);
fatal("-f: missing frag size");
fatal("%s: bad frag size", *argv
);
fatal("-S: missing sector size");
sectorsize
= atoi(*argv
);
fatal("%s: bad sector size", *argv
);
fatal("-c: missing cylinders/group");
fatal("%s: bad cylinders/group", *argv
);
fatal("-m: missing free space %%\n");
if (minfree
< 0 || minfree
> 99)
fatal("%s: bad free space %%\n",
fatal("-r: missing revs/minute\n");
fatal("%s: bad revs/minute\n", *argv
);
fatal("-%c: unknown flag", cp
);
fprintf(stderr
, "usage: newfs [ -v ] [ mkfs-options ] %s\n",
"special-device device-type");
fprintf(stderr
, "where mkfs-options are:\n");
fprintf(stderr
, "\t-s file system size (sectors)\n");
fprintf(stderr
, "\t-b block size\n");
fprintf(stderr
, "\t-f frag size\n");
fprintf(stderr
, "\t-t tracks/cylinder\n");
fprintf(stderr
, "\t-c cylinders/group\n");
fprintf(stderr
, "\t-m minimum free space %%\n");
fprintf(stderr
, "\t-r revolutions/minute\n");
fprintf(stderr
, "\t-S sector size\n");
if (stat(special
, &st
) < 0) {
special
= sprintf(device
, "/dev/r%s", special
);
fprintf(stderr
, "newfs: "); perror(special
);
if ((st
.st_mode
& S_IFMT
) != S_IFBLK
&&
(st
.st_mode
& S_IFMT
) != S_IFCHR
)
fatal("%s: not a block or character device", special
);
dp
= getdiskbyname(argv
[1]);
fatal("%s: unknown disk type", argv
[1]);
cp
= index(argv
[0], '\0') - 1;
if (cp
== 0 || *cp
< 'a' || *cp
> 'h')
fatal("%s: can't figure out file system partition", argv
[0]);
pp
= &dp
->d_partitions
[*cp
- 'a'];
fatal("%s: no default size for `%c' partition",
nsectors
= dp
->d_nsectors
;
fatal("%s: no default #sectors/track", argv
[1]);
fatal("%s: no default #tracks", argv
[1]);
sectorsize
= dp
->d_secsize
;
fatal("%s: no default sector size", argv
[1]);
fatal("%s: no default block size for `%c' partition",
fatal("%s: no default frag size for `%c' partition",
fatal("%s: no default revolutions/minute value",
av
[i
++] = sprintf(a2
, "%d", fssize
);
av
[i
++] = sprintf(a3
, "%d", nsectors
);
av
[i
++] = sprintf(a4
, "%d", ntracks
);
av
[i
++] = sprintf(a5
, "%d", bsize
);
av
[i
++] = sprintf(a6
, "%d", fsize
);
av
[i
++] = sprintf(a7
, "%d", cpg
);
av
[i
++] = sprintf(a8
, "%d", minfree
);
av
[i
++] = sprintf(a9
, "%d", rpm
/ 60);
sprintf(cmd
, "/etc/mkfs %s", special
);
for (i
= 0; av
[i
] != 0; i
++) {
if (status
= system(cmd
))
cp
= rindex(special
, '/');
fatal("%s: can't figure out disk type from name",
installboot(special
, type
);
char bootblock
[MAXPATHLEN
], standalonecode
[MAXPATHLEN
];
sprintf(bootblock
, "%s/%sboot", BOOTDIR
, type
);
sprintf(standalonecode
, "%s/boot%s", BOOTDIR
, type
);
printf("installing boot code\n");
printf("sector 0 boot = %s\n", bootblock
);
printf("1st level boot = %s\n", standalonecode
);
fprintf(stderr
, "newfs: "); perror(bootblock
);
if (read(fd
, bootimage
, DEV_BSIZE
) < 0) {
fprintf(stderr
, "newfs: "); perror(bootblock
);
fd
= open(standalonecode
, 0);
fprintf(stderr
, "newfs: "); perror(standalonecode
);
if (read(fd
, &bootimage
[DEV_BSIZE
], BBSIZE
- DEV_BSIZE
) < 0) {
fprintf(stderr
, "newfs: "); perror(standalonecode
);
fprintf(stderr
, "newfs: "); perror(dev
);
if (write(fd
, bootimage
, BBSIZE
) != BBSIZE
) {
fprintf(stderr
, "newfs: "); perror(dev
);
fprintf(stderr
, "newfs: ");
fprintf(stderr
, fmt
, arg1
, arg2
);