PWB1/sys/source/s8/labelit.c
#include "stdio.h"
#include "filsys.h"
#define DEV 1
#define FSNAME 2
#define VOLUME 3
/* write fsname, volume # on disk superblock */
struct {
char fill1[512];
struct filsys fs;
char fill2[5120-1024];
} super;
main(argc, argv) char **argv; {
int fsi, fso;
long curtime;
int i;
if(argc!=4 && argc!=2 && argc!=5) {
showusage:
fprintf(stderr,"Usage: labelit /dev/r??? [fsname volume [-n]]\n");
exit(1);
}
if(argc==5) {
if(strcmp(argv[4], "-n")!=0)
goto showusage;
printf("Skipping label check!\n");
goto do_it;
}
if((fsi = open(argv[DEV],0)) < 1)
fprintf(stderr, "Cannot open device\n");
if((i=read(fsi, &super, 5120)) != 5120) {
fprintf(stderr, "Cannot read 5120 char block.\n");
}
printf("Current fsname: %.6s, Current volname: %.6s\n",
super.fs.s_fname,super.fs.s_fpack);
printf("Date last mounted: %s", ctime(&super.fs.s_time));
if(argc==2)
exit(0);
do_it:
printf("NEW fsname = %.6s, NEW volname = %.6s -- DEL if wrong!!\n",
argv[FSNAME], argv[VOLUME]);
sleep(10);
sprintf(super.fs.s_fname, "%.6s", argv[FSNAME]);
sprintf(super.fs.s_fpack, "%.6s", argv[VOLUME]);
close(fsi);
fso = open(argv[DEV],1);
if(write(fso, &super, 5120) < 0) {
fprintf(stderr, "Cannot write label\n");
exit(1);
}
exit(0);
}