1 /*-
2 * Copyright (c) 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Ralph Campbell.
7 *
8 * %sccs.include.redist.c%
9 *
10 * @(#)dec_label.c 8.1 (Berkeley) 06/10/93
11 */
12
13 #include <stdio.h>
14 #include <unistd.h>
15 #include <sys/param.h>
16 #include <sys/fcntl.h>
17 #include <sys/ioctl.h>
18 #include <sys/disklabel.h>
19
20 #include <pmax/stand/dec_boot.h>
21
22 struct disklabel label;
23 struct Dec_DiskLabel dec_label;
24
25 /*
26 * This program creates or updates the DEC label after 'disklabel'
27 * has initialized the Berkeley disk label.
28 * This program may be useful in sharing ULTRIX disks with 4.4 BSD but it
29 * hasn't been tested much. Use at your own risk.
30 *
31 * Usage: dec_label <disk>
32 */
33
main(argc,argv)34 main(argc, argv)
35 int argc;
36 char *argv[];
37 {
38 register int i;
39 int fd;
40
41 if (argc != 2) {
42 fprintf(stderr, "Usage: dec_label <disk>\n");
43 exit(1);
44 }
45 if ((fd = open(argv[1], O_RDWR, 0)) < 0)
46 err(1, "%s", argv[1]);
47 if (ioctl(fd, DIOCGDINFO, &label) < 0)
48 err(1, "ioctl DIOCGDINFO");
49
50 /* fill in DEC label */
51 dec_label.magic = DEC_LABEL_MAGIC;
52 dec_label.isPartitioned = 1;
53 for (i = 0; i < DEC_NUM_DISK_PARTS; i++) {
54 dec_label.map[i].numBlocks = label.d_partitions[i].p_size;
55 dec_label.map[i].startBlock = label.d_partitions[i].p_offset;
56 printf("%d: start %d size %d\n", i, dec_label.map[i].startBlock,
57 dec_label.map[i].numBlocks);
58 }
59 if (lseek(fd, (off_t)DEC_LABEL_SECTOR * label.d_secsize, SEEK_SET) == -1)
60 err(1, "lseek");
61 if (write(fd, &dec_label, sizeof(dec_label)) != sizeof(dec_label))
62 err(1, "write label");
63 return (0);
64 }
65