Lines Matching refs:sl

110 static int check_label(struct sun_disklabel *sl);
111 static void read_label(struct sun_disklabel *sl, const char *disk);
112 static void write_label(struct sun_disklabel *sl, const char *disk,
114 static void edit_label(struct sun_disklabel *sl, const char *disk,
116 static int parse_label(struct sun_disklabel *sl, const char *file);
117 static void print_label(struct sun_disklabel *sl, const char *disk, FILE *out);
119 static int parse_size(struct sun_disklabel *sl, int part, char *size);
120 static int parse_offset(struct sun_disklabel *sl, int part, char *offset);
124 static unsigned int parse_flag(struct sun_disklabel *sl, int part,
126 static unsigned int parse_tag(struct sun_disklabel *sl, int part,
163 struct sun_disklabel sl;
216 bzero(&sl, sizeof(sl));
221 read_label(&sl, disk);
222 bzero(sl.sl_part, sizeof(sl.sl_part));
223 sl.sl_part[SUN_RAWPART].sdkp_cyloffset = 0;
224 sl.sl_part[SUN_RAWPART].sdkp_nsectors = sl.sl_ncylinders *
225 sl.sl_ntracks * sl.sl_nsectors;
226 write_label(&sl, disk, bootpath);
230 read_label(&sl, disk);
231 if (sl.sl_magic != SUN_DKMAGIC)
233 edit_label(&sl, disk, bootpath);
238 read_label(&sl, disk);
239 if (parse_label(&sl, proto) != 0)
241 write_label(&sl, disk, bootpath);
243 read_label(&sl, disk);
244 if (sl.sl_magic != SUN_DKMAGIC)
246 write_label(&sl, disk, bootpath);
248 read_label(&sl, disk);
249 if (sl.sl_magic != SUN_DKMAGIC)
251 print_label(&sl, disk, stdout);
257 check_label(struct sun_disklabel *sl)
269 havevtoc = sl->sl_vtoc_sane == SUN_VTOC_SANE;
271 nsectors = sl->sl_ncylinders * sl->sl_ntracks * sl->sl_nsectors;
272 if (sl->sl_part[SUN_RAWPART].sdkp_cyloffset != 0 ||
273 sl->sl_part[SUN_RAWPART].sdkp_nsectors != nsectors) {
278 if (havevtoc && sl->sl_vtoc_map[2].svtoc_tag != VTOC_BACKUP) {
283 if (i == 2 || sl->sl_part[i].sdkp_nsectors == 0)
285 start = (uint64_t)sl->sl_part[i].sdkp_cyloffset *
286 sl->sl_ntracks * sl->sl_nsectors;
287 end = start + sl->sl_part[i].sdkp_nsectors;
294 if (sl->sl_vtoc_map[i].svtoc_tag == VTOC_BACKUP) {
306 ((sl->sl_vtoc_map[i].svtoc_flag & VTOC_UNMNT) != 0 ||
307 (sl->sl_vtoc_map[j].svtoc_flag & VTOC_UNMNT) != 0);
310 sl->sl_part[j].sdkp_nsectors == 0)
312 ostart = (uint64_t)sl->sl_part[j].sdkp_cyloffset *
313 sl->sl_ntracks * sl->sl_nsectors;
314 oend = ostart + sl->sl_part[j].sdkp_nsectors;
329 read_label(struct sun_disklabel *sl, const char *disk)
342 error = sunlabel_dec(buf, sl);
353 bzero(sl, sizeof(*sl));
364 sl->sl_rpm = 3600;
365 sl->sl_pcylinders = mediasize / (fwsectors * fwheads *
367 sl->sl_sparespercyl = 0;
368 sl->sl_interleave = 1;
369 sl->sl_ncylinders = sl->sl_pcylinders - 2;
370 sl->sl_acylinders = 2;
371 sl->sl_nsectors = fwsectors;
372 sl->sl_ntracks = fwheads;
373 sl->sl_part[SUN_RAWPART].sdkp_cyloffset = 0;
374 sl->sl_part[SUN_RAWPART].sdkp_nsectors = sl->sl_ncylinders *
375 sl->sl_ntracks * sl->sl_nsectors;
377 sprintf(sl->sl_text,
381 sl->sl_ncylinders, sl->sl_acylinders,
382 sl->sl_ntracks, sl->sl_nsectors);
384 sprintf(sl->sl_text,
387 sl->sl_ncylinders, sl->sl_acylinders,
388 sl->sl_ntracks, sl->sl_nsectors);
395 write_label(struct sun_disklabel *sl, const char *disk, const char *bootpath)
407 sl->sl_magic = SUN_DKMAGIC;
409 if (check_label(sl) != 0)
413 sunlabel_enc(buf, sl);
416 print_label(sl, disk, stdout);
459 if (sl->sl_part[i].sdkp_nsectors == 0)
461 off = sl->sl_part[i].sdkp_cyloffset *
462 sl->sl_ntracks * sl->sl_nsectors * 512;
481 edit_label(struct sun_disklabel *sl, const char *disk, const char *bootpath)
496 print_label(sl, disk, fp);
511 if (parse_label(sl, tmpfil) == 0) {
514 write_label(sl, disk, bootpath);
536 parse_label(struct sun_disklabel *sl, const char *file)
558 sl1 = *sl;
698 *sl = sl1;
699 return (check_label(sl));
703 parse_size(struct sun_disklabel *sl, int part, char *size)
715 total = sl->sl_ncylinders * sl->sl_ntracks *
716 sl->sl_nsectors;
720 nsectors += sl->sl_part[i].sdkp_nsectors;
724 n = n * sl->sl_ntracks * sl->sl_nsectors;
727 sl->sl_ntracks * sl->sl_nsectors);
730 sl->sl_ntracks * sl->sl_nsectors);
735 sl->sl_ntracks * sl->sl_nsectors);
739 n = n * sl->sl_ntracks * sl->sl_nsectors;
741 sl->sl_part[part].sdkp_nsectors = n;
746 parse_offset(struct sun_disklabel *sl, int part, char *offset)
760 nsectors += sl->sl_part[i].sdkp_nsectors;
762 n = nsectors / (sl->sl_nsectors * sl->sl_ntracks);
766 sl->sl_part[part].sdkp_cyloffset = n;
771 print_label(struct sun_disklabel *sl, const char *disk, FILE *out)
779 havevtoc = sl->sl_vtoc_sane == SUN_VTOC_SANE;
780 secpercyl = sl->sl_nsectors * sl->sl_ntracks;
788 sl->sl_text,
797 secpercyl * sl->sl_ncylinders);
798 if (havevtoc && sl->sl_vtoc_volname[0] != '\0') {
800 if (sl->sl_vtoc_volname[i] == '\0')
802 if (isprint(sl->sl_vtoc_volname[i]))
803 volname[j++] = sl->sl_vtoc_volname[i];
806 sl->sl_vtoc_volname[i]);
847 if (sl->sl_part[i].sdkp_nsectors == 0)
853 sl->sl_part[i].sdkp_nsectors * 512));
856 sl->sl_part[i].sdkp_cyloffset * 512
861 sl->sl_part[i].sdkp_nsectors / (cflag? secpercyl: 1),
862 sl->sl_part[i].sdkp_cyloffset);
866 tagname(sl->sl_vtoc_map[i].svtoc_tag),
867 flagname(sl->sl_vtoc_map[i].svtoc_flag));
935 parse_tag(struct sun_disklabel *sl, int part, const char *tag)
946 sl->sl_vtoc_map[part].svtoc_tag = (uint16_t)tp->id;
952 sl->sl_vtoc_map[part].svtoc_tag = (uint16_t)l;
960 parse_flag(struct sun_disklabel *sl, int part, const char *flag)
971 sl->sl_vtoc_map[part].svtoc_flag = (uint16_t)tp->id;
977 sl->sl_vtoc_map[part].svtoc_flag = (uint16_t)l;