+ /*
+ * Read in the pack label.
+ */
+ lp->d_nsectors = NRKSECT;
+ lp->d_secpercyl = NRKTRK*NRKSECT;
+ tio = *io;
+ tio.i_bn = LABELSECTOR;
+ tio.i_ma = lbuf;
+ tio.i_cc = SECTSIZ;
+ tio.i_flgs |= F_RDDATA;
+ if (rkstrategy(&tio, READ) != SECTSIZ) {
+ printf("can't read disk label");
+ return (EIO);
+ }
+ *lp = *(struct disklabel *)(lbuf + LABELOFFSET);
+ if (lp->d_magic != DISKMAGIC || lp->d_magic2 != DISKMAGIC) {
+ printf("hk%d: unlabeled\n", io->i_unit);
+#ifdef COMPAT_42
+ rkmaptype(io, lp);
+#else
+ return (ENXIO);
+#endif
+ }
+ if ((unsigned)io->i_boff >= lp->d_npartitions ||
+ (io->i_boff = lp->d_partitions[io->i_boff].p_offset) == -1) {
+ printf("rk: bad partition");
+ return (EUNIT);
+ }
+ return (0);