Lines Matching refs:wbpb

109 static void swap_pack_grabsebpb(bpb_t *wbpb, struct _boot_sector *bsp);
110 static void swap_pack_bpb32cpy(struct _boot_sector32 *bsp, bpb_t *wbpb);
111 static void swap_pack_sebpbcpy(struct _boot_sector *bsp, bpb_t *wbpb);
112 static void swap_pack_grabbpb(bpb_t *wbpb, struct _boot_sector *bsp);
113 static void swap_pack_bpbcpy(struct _boot_sector *bsp, bpb_t *wbpb);
116 static uchar_t *build_rootdir(bpb_t *wbpb, char *ffn, int fffd,
118 static uchar_t *build_fat(bpb_t *wbpb, struct fat_od_fsi *fsinfop,
125 bpb_t *wbpb, int *prtsize, int *prtspc, int *prtbpf, int *prtnsect,
129 bpb_t *wbpb);
130 static void compute_file_area_size(bpb_t *wbpb);
134 static void compute_cluster_size(bpb_t *wbpb);
135 static void find_fixed_details(int fd, bpb_t *wbpb);
137 static void floppy_bpb_fillin(bpb_t *wbpb,
139 static void read_existing_bpb(int fd, bpb_t *wbpb);
145 static void write_bootsects(int fd, boot_sector_t *bsp, bpb_t *wbpb,
147 static void fill_bpb_sizes(bpb_t *wbpb, struct ipart part[],
149 static void set_fat_string(bpb_t *wbpb, int fatsize);
153 static void lookup_floppy(struct fd_char *fdchar, bpb_t *wbpb);
154 static void label_volume(char *lbl, bpb_t *wbpb);
160 static void write_rest(bpb_t *wbpb, char *efn,
163 char *ffn, bpb_t *wbpb);
167 static int prepare_image_file(char *fn, bpb_t *wbpb);
170 static int open_and_examine(char *dn, bpb_t *wbpb);
173 static int open_and_seek(char *dn, bpb_t *wbpb, off64_t *seekto);
178 static int seek_nofdisk(int fd, bpb_t *wbpb, off64_t *seekto);
180 static int seek_partn(int fd, char *pn, bpb_t *wbpb, off64_t *seekto);
489 fill_fat32_bpb(bpb_t *wbpb) in fill_fat32_bpb() argument
513 wbpb->bpb32.ext_flags = 0x0; in fill_fat32_bpb()
519 wbpb->bpb32.fs_vers_lo = '\0'; in fill_fat32_bpb()
520 wbpb->bpb32.fs_vers_hi = '\0'; in fill_fat32_bpb()
527 wbpb->bpb32.fsinfosec = 1; in fill_fat32_bpb()
528 wbpb->bpb32.backupboot = 6; in fill_fat32_bpb()
533 fill_bpb_sizes(bpb_t *wbpb, struct ipart part[], int partno, off64_t offset) in fill_bpb_sizes() argument
555 wbpb->bpb.sectors_in_volume = 0; in fill_bpb_sizes()
557 wbpb->bpb.sectors_in_volume = usesize; in fill_bpb_sizes()
558 wbpb->bpb.sectors_in_logical_volume = usesize; in fill_bpb_sizes()
561 wbpb->bpb.hidden_sectors = offset; in fill_bpb_sizes()
566 wbpb->sunbpb.bs_offset_high = offset >> 16; in fill_bpb_sizes()
567 wbpb->sunbpb.bs_offset_low = offset & 0xFFFF; in fill_bpb_sizes()
616 seek_partn(int fd, char *pn, bpb_t *wbpb, off64_t *seekto) in seek_partn() argument
720 fill_bpb_sizes(wbpb, part, bootPart, *seekto); in seek_partn()
742 fill_bpb_sizes(wbpb, part, primaryPart, *seekto); in seek_partn()
859 fill_bpb_sizes(wbpb, part, extndDrives[driveIndex], in seek_partn()
900 fill_bpb_sizes(wbpb, part, extraDrives[driveIndex], *seekto); in seek_partn()
928 seek_nofdisk(int fd, bpb_t *wbpb, off64_t *seekto) in seek_nofdisk() argument
931 wbpb->bpb.sectors_in_volume = 0; in seek_nofdisk()
933 wbpb->bpb.sectors_in_volume = (short)TotSize; in seek_nofdisk()
934 wbpb->bpb.sectors_in_logical_volume = TotSize; in seek_nofdisk()
937 wbpb->bpb.hidden_sectors = RelOffset; in seek_nofdisk()
938 wbpb->sunbpb.bs_offset_high = RelOffset >> 16; in seek_nofdisk()
939 wbpb->sunbpb.bs_offset_low = RelOffset & 0xFFFF; in seek_nofdisk()
961 set_fat_string(bpb_t *wbpb, int fatsize) in set_fat_string() argument
964 (void) strncpy((char *)wbpb->ebpb.type, FAT12_TYPE_STRING, in set_fat_string()
967 (void) strncpy((char *)wbpb->ebpb.type, FAT16_TYPE_STRING, in set_fat_string()
970 (void) strncpy((char *)wbpb->ebpb.type, FAT32_TYPE_STRING, in set_fat_string()
983 prepare_image_file(char *fn, bpb_t *wbpb) in prepare_image_file() argument
995 wbpb->bpb.sectors_in_volume = 2 * 80 * 15; in prepare_image_file()
996 wbpb->bpb.sectors_in_logical_volume = 2 * 80 * 15; in prepare_image_file()
997 wbpb->bpb.sectors_per_track = 15; in prepare_image_file()
998 wbpb->bpb.heads = 2; in prepare_image_file()
999 wbpb->bpb.media = 0xF9; in prepare_image_file()
1000 wbpb->bpb.num_root_entries = 224; in prepare_image_file()
1001 wbpb->bpb.sectors_per_cluster = 1; in prepare_image_file()
1002 wbpb->bpb.sectors_per_fat = 7; in prepare_image_file()
1005 wbpb->bpb.sectors_in_volume = 2 * 80 * 18; in prepare_image_file()
1006 wbpb->bpb.sectors_in_logical_volume = 2 * 80 * 18; in prepare_image_file()
1007 wbpb->bpb.sectors_per_track = 18; in prepare_image_file()
1008 wbpb->bpb.heads = 2; in prepare_image_file()
1009 wbpb->bpb.media = 0xF0; in prepare_image_file()
1010 wbpb->bpb.num_root_entries = 224; in prepare_image_file()
1011 wbpb->bpb.sectors_per_cluster = 1; in prepare_image_file()
1012 wbpb->bpb.sectors_per_fat = 9; in prepare_image_file()
1019 if (lseek(fd, (wbpb->bpb.sectors_in_volume * BPSEC)-1, SEEK_SET) < 0) { in prepare_image_file()
1038 set_fat_string(wbpb, Fatentsize); in prepare_image_file()
1040 wbpb->ebpb.phys_drive_num = 0; in prepare_image_file()
1042 wbpb->sunbpb.bs_offset_high = 0; in prepare_image_file()
1043 wbpb->sunbpb.bs_offset_low = 0; in prepare_image_file()
1096 floppy_bpb_fillin(bpb_t *wbpb, int diam, int hds, int spt) in floppy_bpb_fillin() argument
1104 wbpb->bpb.media = 0xF9; in floppy_bpb_fillin()
1105 wbpb->bpb.num_root_entries = 112; in floppy_bpb_fillin()
1106 wbpb->bpb.sectors_per_cluster = 2; in floppy_bpb_fillin()
1107 wbpb->bpb.sectors_per_fat = 3; in floppy_bpb_fillin()
1110 wbpb->bpb.media = 0xF0; in floppy_bpb_fillin()
1111 wbpb->bpb.num_root_entries = 224; in floppy_bpb_fillin()
1112 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1113 wbpb->bpb.sectors_per_fat = 9; in floppy_bpb_fillin()
1116 wbpb->bpb.media = 0xF0; in floppy_bpb_fillin()
1117 wbpb->bpb.num_root_entries = 240; in floppy_bpb_fillin()
1118 wbpb->bpb.sectors_per_cluster = 2; in floppy_bpb_fillin()
1119 wbpb->bpb.sectors_per_fat = 9; in floppy_bpb_fillin()
1142 wbpb->bpb.media = 0xF9; in floppy_bpb_fillin()
1143 wbpb->bpb.num_root_entries = 224; in floppy_bpb_fillin()
1144 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1145 wbpb->bpb.sectors_per_fat = 7; in floppy_bpb_fillin()
1148 wbpb->bpb.media = 0xFD; in floppy_bpb_fillin()
1149 wbpb->bpb.num_root_entries = 112; in floppy_bpb_fillin()
1150 wbpb->bpb.sectors_per_cluster = 2; in floppy_bpb_fillin()
1151 wbpb->bpb.sectors_per_fat = 2; in floppy_bpb_fillin()
1154 wbpb->bpb.media = 0xFF; in floppy_bpb_fillin()
1155 wbpb->bpb.num_root_entries = 112; in floppy_bpb_fillin()
1156 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1157 wbpb->bpb.sectors_per_fat = 2; in floppy_bpb_fillin()
1170 wbpb->bpb.media = 0xFC; in floppy_bpb_fillin()
1171 wbpb->bpb.num_root_entries = 64; in floppy_bpb_fillin()
1172 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1173 wbpb->bpb.sectors_per_fat = 2; in floppy_bpb_fillin()
1176 wbpb->bpb.media = 0xFE; in floppy_bpb_fillin()
1177 wbpb->bpb.num_root_entries = 64; in floppy_bpb_fillin()
1178 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1179 wbpb->bpb.sectors_per_fat = 1; in floppy_bpb_fillin()
1212 lookup_floppy(struct fd_char *fdchar, bpb_t *wbpb) in lookup_floppy() argument
1228 wbpb->bpb.sectors_in_logical_volume = tsize; in lookup_floppy()
1230 wbpb->bpb.sectors_in_logical_volume = in lookup_floppy()
1235 wbpb->bpb.sectors_in_volume = in lookup_floppy()
1236 (short)wbpb->bpb.sectors_in_logical_volume; in lookup_floppy()
1239 wbpb->bpb.sectors_per_track = spt; in lookup_floppy()
1241 wbpb->bpb.sectors_per_track = in lookup_floppy()
1245 spt = wbpb->bpb.sectors_per_track; in lookup_floppy()
1249 wbpb->bpb.heads = hds; in lookup_floppy()
1251 wbpb->bpb.heads = in lookup_floppy()
1255 hds = wbpb->bpb.heads; in lookup_floppy()
1262 set_fat_string(wbpb, Fatentsize); in lookup_floppy()
1264 wbpb->ebpb.phys_drive_num = 0; in lookup_floppy()
1266 wbpb->bpb.hidden_sectors = 0; in lookup_floppy()
1267 wbpb->sunbpb.bs_offset_high = 0; in lookup_floppy()
1268 wbpb->sunbpb.bs_offset_low = 0; in lookup_floppy()
1270 floppy_bpb_fillin(wbpb, diam, hds, spt); in lookup_floppy()
1289 compute_cluster_size(bpb_t *wbpb) in compute_cluster_size() argument
1303 volsize = wbpb->bpb.sectors_in_volume ? wbpb->bpb.sectors_in_volume : in compute_cluster_size()
1304 wbpb->bpb.sectors_in_logical_volume; in compute_cluster_size()
1305 volsize -= wbpb->bpb.resv_sectors; in compute_cluster_size()
1387 rds = ((wbpb->bpb.num_root_entries * 32) + in compute_cluster_size()
1388 (wbpb->bpb.bytes_sector - 1)) / wbpb->bpb.bytes_sector; in compute_cluster_size()
1425 wbpb->bpb.sectors_per_cluster = spc; in compute_cluster_size()
1445 set_fat_string(wbpb, Fatentsize); in compute_cluster_size()
1464 tmpval1 = volsize - (wbpb->bpb.resv_sectors + rds); in compute_cluster_size()
1466 tmpval2 = (256 * wbpb->bpb.sectors_per_cluster) + wbpb->bpb.num_fats; in compute_cluster_size()
1476 wbpb->bpb.sectors_per_fat = 0; in compute_cluster_size()
1477 wbpb->bpb32.big_sectors_per_fat = fatsz; in compute_cluster_size()
1480 "FAT32 = %d\n", wbpb->bpb32.big_sectors_per_fat); in compute_cluster_size()
1484 wbpb->bpb.sectors_per_fat = (ushort_t)(fatsz & 0x0000FFFF); in compute_cluster_size()
1487 "FAT16 = %d\n", wbpb->bpb.sectors_per_fat); in compute_cluster_size()
1494 find_fixed_details(int fd, bpb_t *wbpb) in find_fixed_details() argument
1514 wbpb->bpb.heads = (GetTPC ? dginfo.dkg_nhead : TrkPerCyl); in find_fixed_details()
1515 wbpb->bpb.sectors_per_track = (GetSPT ? dginfo.dkg_nsect : SecPerTrk); in find_fixed_details()
1535 wbpb->bpb.media = 0xF8; in find_fixed_details()
1537 wbpb->bpb.num_root_entries = 0; in find_fixed_details()
1539 wbpb->bpb.num_root_entries = 512; in find_fixed_details()
1540 wbpb->ebpb.phys_drive_num = 0x80; in find_fixed_details()
1541 compute_cluster_size(wbpb); in find_fixed_details()
1573 compute_file_area_size(bpb_t *wbpb) in compute_file_area_size() argument
1579 ((wbpb->bpb.num_root_entries * 32) + (wbpb->bpb.bytes_sector - 1)) / in compute_file_area_size()
1580 wbpb->bpb.bytes_sector; in compute_file_area_size()
1582 if (wbpb->bpb.sectors_per_fat) { in compute_file_area_size()
1586 FATSz = wbpb->bpb.sectors_per_fat; in compute_file_area_size()
1587 TotSec = wbpb->bpb.sectors_in_volume; in compute_file_area_size()
1592 FATSz = wbpb->bpb32.big_sectors_per_fat; in compute_file_area_size()
1593 TotSec = wbpb->bpb.sectors_in_logical_volume; in compute_file_area_size()
1597 (wbpb->bpb.resv_sectors + (wbpb->bpb.num_fats * FATSz) + in compute_file_area_size()
1604 TotalClusters = DataSec / wbpb->bpb.sectors_per_cluster; in compute_file_area_size()
1609 "bytes.\n"), TotalClusters, wbpb->bpb.sectors_per_cluster, in compute_file_area_size()
1610 TotalClusters * wbpb->bpb.sectors_per_cluster * BPSEC); in compute_file_area_size()
1627 swap_pack_bpbcpy(struct _boot_sector *bsp, bpb_t *wbpb) in swap_pack_bpbcpy() argument
1633 store_16_bits(&fillp, wbpb->bpb.bytes_sector); in swap_pack_bpbcpy()
1634 *fillp++ = wbpb->bpb.sectors_per_cluster; in swap_pack_bpbcpy()
1635 store_16_bits(&fillp, wbpb->bpb.resv_sectors); in swap_pack_bpbcpy()
1636 *fillp++ = wbpb->bpb.num_fats; in swap_pack_bpbcpy()
1637 store_16_bits(&fillp, wbpb->bpb.num_root_entries); in swap_pack_bpbcpy()
1638 store_16_bits(&fillp, wbpb->bpb.sectors_in_volume); in swap_pack_bpbcpy()
1639 *fillp++ = wbpb->bpb.media; in swap_pack_bpbcpy()
1640 store_16_bits(&fillp, wbpb->bpb.sectors_per_fat); in swap_pack_bpbcpy()
1641 store_16_bits(&fillp, wbpb->bpb.sectors_per_track); in swap_pack_bpbcpy()
1642 store_16_bits(&fillp, wbpb->bpb.heads); in swap_pack_bpbcpy()
1643 store_32_bits(&fillp, wbpb->bpb.hidden_sectors); in swap_pack_bpbcpy()
1644 store_32_bits(&fillp, wbpb->bpb.sectors_in_logical_volume); in swap_pack_bpbcpy()
1646 *fillp++ = wbpb->ebpb.phys_drive_num; in swap_pack_bpbcpy()
1647 *fillp++ = wbpb->ebpb.reserved; in swap_pack_bpbcpy()
1648 *fillp++ = wbpb->ebpb.ext_signature; in swap_pack_bpbcpy()
1649 store_32_bits(&fillp, wbpb->ebpb.volume_id); in swap_pack_bpbcpy()
1650 (void) strncpy((char *)fillp, (char *)wbpb->ebpb.volume_label, 11); in swap_pack_bpbcpy()
1652 (void) strncpy((char *)fillp, (char *)wbpb->ebpb.type, 8); in swap_pack_bpbcpy()
1657 swap_pack_bpb32cpy(struct _boot_sector32 *bsp, bpb_t *wbpb) in swap_pack_bpb32cpy() argument
1664 store_16_bits(&fillp, wbpb->bpb.bytes_sector); in swap_pack_bpb32cpy()
1665 *fillp++ = wbpb->bpb.sectors_per_cluster; in swap_pack_bpb32cpy()
1666 store_16_bits(&fillp, wbpb->bpb.resv_sectors); in swap_pack_bpb32cpy()
1667 *fillp++ = wbpb->bpb.num_fats; in swap_pack_bpb32cpy()
1668 store_16_bits(&fillp, wbpb->bpb.num_root_entries); in swap_pack_bpb32cpy()
1669 store_16_bits(&fillp, wbpb->bpb.sectors_in_volume); in swap_pack_bpb32cpy()
1670 *fillp++ = wbpb->bpb.media; in swap_pack_bpb32cpy()
1671 store_16_bits(&fillp, wbpb->bpb.sectors_per_fat); in swap_pack_bpb32cpy()
1672 store_16_bits(&fillp, wbpb->bpb.sectors_per_track); in swap_pack_bpb32cpy()
1673 store_16_bits(&fillp, wbpb->bpb.heads); in swap_pack_bpb32cpy()
1674 store_32_bits(&fillp, wbpb->bpb.hidden_sectors); in swap_pack_bpb32cpy()
1675 store_32_bits(&fillp, wbpb->bpb.sectors_in_logical_volume); in swap_pack_bpb32cpy()
1677 store_32_bits(&fillp, wbpb->bpb32.big_sectors_per_fat); in swap_pack_bpb32cpy()
1678 store_16_bits(&fillp, wbpb->bpb32.ext_flags); in swap_pack_bpb32cpy()
1679 *fillp++ = wbpb->bpb32.fs_vers_lo; in swap_pack_bpb32cpy()
1680 *fillp++ = wbpb->bpb32.fs_vers_hi; in swap_pack_bpb32cpy()
1681 store_32_bits(&fillp, wbpb->bpb32.root_dir_clust); in swap_pack_bpb32cpy()
1682 store_16_bits(&fillp, wbpb->bpb32.fsinfosec); in swap_pack_bpb32cpy()
1683 store_16_bits(&fillp, wbpb->bpb32.backupboot); in swap_pack_bpb32cpy()
1685 store_16_bits(&fillp, wbpb->bpb32.reserved[r]); in swap_pack_bpb32cpy()
1687 *fillp++ = wbpb->ebpb.phys_drive_num; in swap_pack_bpb32cpy()
1688 *fillp++ = wbpb->ebpb.reserved; in swap_pack_bpb32cpy()
1689 *fillp++ = wbpb->ebpb.ext_signature; in swap_pack_bpb32cpy()
1690 store_32_bits(&fillp, wbpb->ebpb.volume_id); in swap_pack_bpb32cpy()
1691 (void) strncpy((char *)fillp, (char *)wbpb->ebpb.volume_label, 11); in swap_pack_bpb32cpy()
1693 (void) strncpy((char *)fillp, (char *)wbpb->ebpb.type, 8); in swap_pack_bpb32cpy()
1698 swap_pack_sebpbcpy(struct _boot_sector *bsp, bpb_t *wbpb) in swap_pack_sebpbcpy() argument
1703 store_16_bits(&fillp, wbpb->sunbpb.bs_offset_high); in swap_pack_sebpbcpy()
1704 store_16_bits(&fillp, wbpb->sunbpb.bs_offset_low); in swap_pack_sebpbcpy()
1709 swap_pack_grabbpb(bpb_t *wbpb, struct _boot_sector *bsp) in swap_pack_grabbpb() argument
1715 ((uchar_t *)&(wbpb->bpb.bytes_sector))[1] = *grabp++; in swap_pack_grabbpb()
1716 ((uchar_t *)&(wbpb->bpb.bytes_sector))[0] = *grabp++; in swap_pack_grabbpb()
1717 wbpb->bpb.sectors_per_cluster = *grabp++; in swap_pack_grabbpb()
1718 ((uchar_t *)&(wbpb->bpb.resv_sectors))[1] = *grabp++; in swap_pack_grabbpb()
1719 ((uchar_t *)&(wbpb->bpb.resv_sectors))[0] = *grabp++; in swap_pack_grabbpb()
1720 wbpb->bpb.num_fats = *grabp++; in swap_pack_grabbpb()
1721 ((uchar_t *)&(wbpb->bpb.num_root_entries))[1] = *grabp++; in swap_pack_grabbpb()
1722 ((uchar_t *)&(wbpb->bpb.num_root_entries))[0] = *grabp++; in swap_pack_grabbpb()
1723 ((uchar_t *)&(wbpb->bpb.sectors_in_volume))[1] = *grabp++; in swap_pack_grabbpb()
1724 ((uchar_t *)&(wbpb->bpb.sectors_in_volume))[0] = *grabp++; in swap_pack_grabbpb()
1725 wbpb->bpb.media = *grabp++; in swap_pack_grabbpb()
1726 ((uchar_t *)&(wbpb->bpb.sectors_per_fat))[1] = *grabp++; in swap_pack_grabbpb()
1727 ((uchar_t *)&(wbpb->bpb.sectors_per_fat))[0] = *grabp++; in swap_pack_grabbpb()
1728 ((uchar_t *)&(wbpb->bpb.sectors_per_track))[1] = *grabp++; in swap_pack_grabbpb()
1729 ((uchar_t *)&(wbpb->bpb.sectors_per_track))[0] = *grabp++; in swap_pack_grabbpb()
1730 ((uchar_t *)&(wbpb->bpb.heads))[1] = *grabp++; in swap_pack_grabbpb()
1731 ((uchar_t *)&(wbpb->bpb.heads))[0] = *grabp++; in swap_pack_grabbpb()
1732 ((uchar_t *)&(wbpb->bpb.hidden_sectors))[3] = *grabp++; in swap_pack_grabbpb()
1733 ((uchar_t *)&(wbpb->bpb.hidden_sectors))[2] = *grabp++; in swap_pack_grabbpb()
1734 ((uchar_t *)&(wbpb->bpb.hidden_sectors))[1] = *grabp++; in swap_pack_grabbpb()
1735 ((uchar_t *)&(wbpb->bpb.hidden_sectors))[0] = *grabp++; in swap_pack_grabbpb()
1736 ((uchar_t *)&(wbpb->bpb.sectors_in_logical_volume))[3] = *grabp++; in swap_pack_grabbpb()
1737 ((uchar_t *)&(wbpb->bpb.sectors_in_logical_volume))[2] = *grabp++; in swap_pack_grabbpb()
1738 ((uchar_t *)&(wbpb->bpb.sectors_in_logical_volume))[1] = *grabp++; in swap_pack_grabbpb()
1739 ((uchar_t *)&(wbpb->bpb.sectors_in_logical_volume))[0] = *grabp++; in swap_pack_grabbpb()
1740 wbpb->ebpb.phys_drive_num = *grabp++; in swap_pack_grabbpb()
1741 wbpb->ebpb.reserved = *grabp++; in swap_pack_grabbpb()
1742 wbpb->ebpb.ext_signature = *grabp++; in swap_pack_grabbpb()
1743 ((uchar_t *)&(wbpb->ebpb.volume_id))[3] = *grabp++; in swap_pack_grabbpb()
1744 ((uchar_t *)&(wbpb->ebpb.volume_id))[2] = *grabp++; in swap_pack_grabbpb()
1745 ((uchar_t *)&(wbpb->ebpb.volume_id))[1] = *grabp++; in swap_pack_grabbpb()
1746 ((uchar_t *)&(wbpb->ebpb.volume_id))[0] = *grabp++; in swap_pack_grabbpb()
1748 (void) strncpy((char *)wbpb->ebpb.volume_label, (char *)grabp, 11); in swap_pack_grabbpb()
1750 (void) strncpy((char *)wbpb->ebpb.type, (char *)grabp, 8); in swap_pack_grabbpb()
1755 swap_pack_grabsebpb(bpb_t *wbpb, struct _boot_sector *bsp) in swap_pack_grabsebpb() argument
1760 ((uchar_t *)&(wbpb->sunbpb.bs_offset_high))[1] = *grabp++; in swap_pack_grabsebpb()
1761 ((uchar_t *)&(wbpb->sunbpb.bs_offset_high))[0] = *grabp++; in swap_pack_grabsebpb()
1762 ((uchar_t *)&(wbpb->sunbpb.bs_offset_low))[1] = *grabp++; in swap_pack_grabsebpb()
1763 ((uchar_t *)&(wbpb->sunbpb.bs_offset_low))[0] = *grabp++; in swap_pack_grabsebpb()
1768 swap_pack_grab32bpb(bpb_t *wbpb, struct _boot_sector *bsp) in swap_pack_grab32bpb() argument
1774 ((uchar_t *)&(wbpb->bpb32.big_sectors_per_fat))[3] = *grabp++; in swap_pack_grab32bpb()
1775 ((uchar_t *)&(wbpb->bpb32.big_sectors_per_fat))[2] = *grabp++; in swap_pack_grab32bpb()
1776 ((uchar_t *)&(wbpb->bpb32.big_sectors_per_fat))[1] = *grabp++; in swap_pack_grab32bpb()
1777 ((uchar_t *)&(wbpb->bpb32.big_sectors_per_fat))[0] = *grabp++; in swap_pack_grab32bpb()
1778 ((uchar_t *)&(wbpb->bpb32.ext_flags))[1] = *grabp++; in swap_pack_grab32bpb()
1779 ((uchar_t *)&(wbpb->bpb32.ext_flags))[0] = *grabp++; in swap_pack_grab32bpb()
1780 wbpb->bpb32.fs_vers_lo = *grabp++; in swap_pack_grab32bpb()
1781 wbpb->bpb32.fs_vers_hi = *grabp++; in swap_pack_grab32bpb()
1782 ((uchar_t *)&(wbpb->bpb32.root_dir_clust))[3] = *grabp++; in swap_pack_grab32bpb()
1783 ((uchar_t *)&(wbpb->bpb32.root_dir_clust))[2] = *grabp++; in swap_pack_grab32bpb()
1784 ((uchar_t *)&(wbpb->bpb32.root_dir_clust))[1] = *grabp++; in swap_pack_grab32bpb()
1785 ((uchar_t *)&(wbpb->bpb32.root_dir_clust))[0] = *grabp++; in swap_pack_grab32bpb()
1786 ((uchar_t *)&(wbpb->bpb32.fsinfosec))[1] = *grabp++; in swap_pack_grab32bpb()
1787 ((uchar_t *)&(wbpb->bpb32.fsinfosec))[0] = *grabp++; in swap_pack_grab32bpb()
1788 ((uchar_t *)&(wbpb->bpb32.backupboot))[1] = *grabp++; in swap_pack_grab32bpb()
1789 ((uchar_t *)&(wbpb->bpb32.backupboot))[0] = *grabp++; in swap_pack_grab32bpb()
1790 ((uchar_t *)&(wbpb->bpb32.reserved[0]))[1] = *grabp++; in swap_pack_grab32bpb()
1791 ((uchar_t *)&(wbpb->bpb32.reserved[0]))[0] = *grabp++; in swap_pack_grab32bpb()
1792 ((uchar_t *)&(wbpb->bpb32.reserved[1]))[1] = *grabp++; in swap_pack_grab32bpb()
1793 ((uchar_t *)&(wbpb->bpb32.reserved[1]))[0] = *grabp++; in swap_pack_grab32bpb()
1794 ((uchar_t *)&(wbpb->bpb32.reserved[2]))[1] = *grabp++; in swap_pack_grab32bpb()
1795 ((uchar_t *)&(wbpb->bpb32.reserved[2]))[0] = *grabp++; in swap_pack_grab32bpb()
1796 ((uchar_t *)&(wbpb->bpb32.reserved[3]))[1] = *grabp++; in swap_pack_grab32bpb()
1797 ((uchar_t *)&(wbpb->bpb32.reserved[3]))[0] = *grabp++; in swap_pack_grab32bpb()
1798 ((uchar_t *)&(wbpb->bpb32.reserved[4]))[1] = *grabp++; in swap_pack_grab32bpb()
1799 ((uchar_t *)&(wbpb->bpb32.reserved[4]))[0] = *grabp++; in swap_pack_grab32bpb()
1800 ((uchar_t *)&(wbpb->bpb32.reserved[5]))[1] = *grabp++; in swap_pack_grab32bpb()
1801 ((uchar_t *)&(wbpb->bpb32.reserved[5]))[0] = *grabp++; in swap_pack_grab32bpb()
1825 read_existing_bpb(int fd, bpb_t *wbpb) in read_existing_bpb() argument
1841 (void) memcpy(&(wbpb->bpb), &(ubpb.bs.bs_front.bs_bpb), in read_existing_bpb()
1842 sizeof (wbpb->bpb)); in read_existing_bpb()
1843 (void) memcpy(&(wbpb->ebpb), &(ubpb.bs.bs_ebpb), sizeof (wbpb->ebpb)); in read_existing_bpb()
1845 swap_pack_grabbpb(wbpb, &(ubpb.bs)); in read_existing_bpb()
1849 (void) memcpy(&(wbpb->sunbpb), &(ubpb.bs.bs_sebpb), in read_existing_bpb()
1850 sizeof (wbpb->sunbpb)); in read_existing_bpb()
1852 swap_pack_grabsebpb(wbpb, &(ubpb.bs)); in read_existing_bpb()
1855 if (wbpb->bpb.bytes_sector != BPSEC) { in read_existing_bpb()
1858 if (!(ISP2(wbpb->bpb.bytes_sector) && in read_existing_bpb()
1859 IN_RANGE(wbpb->bpb.bytes_sector, 1, BPSEC * 8))) { in read_existing_bpb()
1871 wbpb->bpb.bytes_sector); in read_existing_bpb()
1876 if (!(ISP2(wbpb->bpb.sectors_per_cluster) && in read_existing_bpb()
1877 IN_RANGE(wbpb->bpb.sectors_per_cluster, 1, 128))) { in read_existing_bpb()
1887 if (wbpb->bpb.sectors_per_fat == 0) { in read_existing_bpb()
1889 (void) memcpy(&(wbpb->bpb32), &(ubpb.bs32.bs_bpb32), in read_existing_bpb()
1890 sizeof (wbpb->bpb32)); in read_existing_bpb()
1892 swap_pack_grab32bpb(wbpb, &(ubpb.bs)); in read_existing_bpb()
1894 compute_file_area_size(wbpb); in read_existing_bpb()
1895 if ((wbpb->bpb32.big_sectors_per_fat * BPSEC / 4) >= in read_existing_bpb()
1902 compute_file_area_size(wbpb); in read_existing_bpb()
1924 bpb_t *wbpb, int *prtsize, int *prtspc, int *prtbpf, int *prtnsect, in compare_existing_with_computed() argument
1938 compare = *wbpb; in compare_existing_with_computed()
1953 if (compare.bpb.heads != wbpb->bpb.heads) { in compare_existing_with_computed()
1958 wbpb->bpb.sectors_per_track) { in compare_existing_with_computed()
1978 if (dginfo.dkg_nhead != wbpb->bpb.heads) { in compare_existing_with_computed()
1983 wbpb->bpb.sectors_per_track) { in compare_existing_with_computed()
1992 if (!*prtfdisk && TotSize != wbpb->bpb.sectors_in_volume && in compare_existing_with_computed()
1993 TotSize != wbpb->bpb.sectors_in_logical_volume) { in compare_existing_with_computed()
1998 if (compare.bpb.sectors_per_cluster != wbpb->bpb.sectors_per_cluster) { in compare_existing_with_computed()
2003 if (compare.bpb.hidden_sectors != wbpb->bpb.hidden_sectors) { in compare_existing_with_computed()
2008 if (compare.bpb.resv_sectors != wbpb->bpb.resv_sectors) { in compare_existing_with_computed()
2023 fatents = wbpb->bpb.sectors_per_fat * BPSEC * 2 / 3; in compare_existing_with_computed()
2024 if (fatents >= TotalClusters && wbpb->ebpb.type[4] == '2') in compare_existing_with_computed()
2037 print_reproducing_command(int fd, char *actualdisk, char *suffix, bpb_t *wbpb) in print_reproducing_command() argument
2051 compare_existing_with_computed(fd, suffix, wbpb, in print_reproducing_command()
2061 ll = min(11, (int)strlen((char *)wbpb->ebpb.volume_label)); in print_reproducing_command()
2068 while (wbpb->ebpb.volume_label[--i] == ' ') in print_reproducing_command()
2078 toupper((int)(wbpb->ebpb.volume_label[i]))) { in print_reproducing_command()
2090 (void) printf("%c", wbpb->ebpb.volume_label[i]); in print_reproducing_command()
2111 (void) printf("size=%u", wbpb->bpb.sectors_in_volume ? in print_reproducing_command()
2112 wbpb->bpb.sectors_in_volume : in print_reproducing_command()
2113 wbpb->bpb.sectors_in_logical_volume); in print_reproducing_command()
2118 (void) printf("nsect=%d", wbpb->bpb.sectors_per_track); in print_reproducing_command()
2123 (void) printf("spc=%d", wbpb->bpb.sectors_per_cluster); in print_reproducing_command()
2128 (void) printf("ntrack=%d", wbpb->bpb.heads); in print_reproducing_command()
2138 (void) printf("hidden=%u", wbpb->bpb.hidden_sectors); in print_reproducing_command()
2143 (void) printf("reserve=%d", wbpb->bpb.resv_sectors); in print_reproducing_command()
2165 open_and_examine(char *dn, bpb_t *wbpb) in open_and_examine() argument
2210 if (suffix && !(seek_partn(fd, suffix, wbpb, &ignored))) { in open_and_examine()
2215 read_existing_bpb(fd, wbpb); in open_and_examine()
2216 print_reproducing_command(fd, actualdisk, suffix, wbpb); in open_and_examine()
2378 open_and_seek(char *dn, bpb_t *wbpb, off64_t *seekto) in open_and_seek() argument
2393 wbpb->bpb.num_fats = 2; in open_and_seek()
2394 wbpb->bpb.bytes_sector = BPSEC; in open_and_seek()
2402 wbpb->bpb.resv_sectors = 32; in open_and_seek()
2404 wbpb->bpb.resv_sectors = 1; in open_and_seek()
2406 wbpb->bpb.resv_sectors = Resrvd; in open_and_seek()
2408 wbpb->ebpb.ext_signature = 0x29; /* Magic number for modern format */ in open_and_seek()
2409 wbpb->ebpb.volume_id = 0; in open_and_seek()
2412 fill_fat32_bpb(wbpb); in open_and_seek()
2419 return (prepare_image_file(dn, wbpb)); in open_and_seek()
2440 if (suffix && !(seek_partn(fd, suffix, wbpb, seekto))) in open_and_seek()
2457 if (!(seek_nofdisk(fd, wbpb, seekto))) in open_and_seek()
2460 find_fixed_details(fd, wbpb); in open_and_seek()
2483 lookup_floppy(&fdchar, wbpb); in open_and_seek()
2493 lookup_floppy(&fdchar, wbpb); in open_and_seek()
2496 find_fixed_details(fd, wbpb); in open_and_seek()
2679 label_volume(char *lbl, bpb_t *wbpb) in label_volume() argument
2689 wbpb->ebpb.volume_label[i] = toupper(lbl[i]); in label_volume()
2692 wbpb->ebpb.volume_label[i] = ' '; in label_volume()
2763 build_fat(bpb_t *wbpb, struct fat_od_fsi *fsinfop, ulong_t bootblksize, in build_fat() argument
2775 wbpb->bpb.sectors_per_fat ? wbpb->bpb.sectors_per_fat : in build_fat()
2776 wbpb->bpb32.big_sectors_per_fat); in build_fat()
2780 *fatsize = BPSEC * wbpb->bpb32.big_sectors_per_fat; in build_fat()
2782 *fatsize = BPSEC * wbpb->bpb.sectors_per_fat; in build_fat()
2793 *fatp = wbpb->bpb.media; in build_fat()
2827 numclust = idivceil(numsect, wbpb->bpb.sectors_per_cluster); in build_fat()
2842 wbpb->bpb32.root_dir_clust = nextfree++; in build_fat()
2852 numclust = idivceil(numsect, wbpb->bpb.sectors_per_cluster); in build_fat()
2980 build_rootdir(bpb_t *wbpb, char *ffn, int fffd, in build_rootdir() argument
2995 *rdirsize = wbpb->bpb.sectors_per_cluster * BPSEC; in build_rootdir()
2997 *rdirsize = wbpb->bpb.num_root_entries * sizeof (struct pcdir); in build_rootdir()
3052 write_rest(bpb_t *wbpb, char *efn, int dfd, int sfd, int remaining) in write_rest() argument
3064 numclust = idivceil(numsect, wbpb->bpb.sectors_per_cluster); in write_rest()
3066 wnumsect = numclust * wbpb->bpb.sectors_per_cluster; in write_rest()
3138 write_bootsects(int fd, boot_sector_t *bsp, bpb_t *wbpb, in write_bootsects() argument
3144 (void) memcpy(&(bsp->bs32.bs_front.bs_bpb), &(wbpb->bpb), in write_bootsects()
3145 sizeof (wbpb->bpb)); in write_bootsects()
3146 (void) memcpy(&(bsp->bs32.bs_bpb32), &(wbpb->bpb32), in write_bootsects()
3147 sizeof (wbpb->bpb32)); in write_bootsects()
3148 (void) memcpy(&(bsp->bs32.bs_ebpb), &(wbpb->ebpb), in write_bootsects()
3149 sizeof (wbpb->ebpb)); in write_bootsects()
3151 swap_pack_bpb32cpy(&(bsp->bs32), wbpb); in write_bootsects()
3156 (void) memcpy(&(bsp->bs.bs_front.bs_bpb), &(wbpb->bpb), in write_bootsects()
3157 sizeof (wbpb->bpb)); in write_bootsects()
3158 (void) memcpy(&(bsp->bs.bs_ebpb), &(wbpb->ebpb), in write_bootsects()
3159 sizeof (wbpb->ebpb)); in write_bootsects()
3161 swap_pack_bpbcpy(&(bsp->bs), wbpb); in write_bootsects()
3167 (void) memcpy(&(bsp->bs.bs_sebpb), &(wbpb->sunbpb), in write_bootsects()
3168 sizeof (wbpb->sunbpb)); in write_bootsects()
3170 swap_pack_sebpbcpy(&(bsp->bs), wbpb); in write_bootsects()
3193 write_fat(int fd, off64_t seekto, char *fn, char *lbl, char *ffn, bpb_t *wbpb) in write_fat() argument
3203 compute_file_area_size(wbpb); in write_fat()
3206 label_volume(lbl, wbpb); in write_fat()
3210 fatp = build_fat(wbpb, &fsinfo, bootblksize, &fatsize, in write_fat()
3213 write_bootsects(fd, &bootsect, wbpb, &fsinfo, seekto); in write_fat()
3216 seekto + (BPSEC * wbpb->bpb.resv_sectors), SEEK_SET) < 0) { in write_fat()
3225 fatsize, wbpb->bpb.num_fats); in write_fat()
3228 for (nf = 0; nf < (int)wbpb->bpb.num_fats; nf++) in write_fat()
3242 rdirp = build_rootdir(wbpb, ffn, fffd, ffsize, ffsc, &rdirsize); in write_fat()
3268 write_rest(wbpb, fn, fd, bsfd, bootblksize - BPSEC); in write_fat()
3288 write_rest(wbpb, ffn, fd, fffd, ffsize); in write_fat()