Lines Matching refs:wbpb

107 static void swap_pack_grabsebpb(bpb_t *wbpb, struct _boot_sector *bsp);
108 static void swap_pack_bpb32cpy(struct _boot_sector32 *bsp, bpb_t *wbpb);
109 static void swap_pack_sebpbcpy(struct _boot_sector *bsp, bpb_t *wbpb);
110 static void swap_pack_grabbpb(bpb_t *wbpb, struct _boot_sector *bsp);
111 static void swap_pack_bpbcpy(struct _boot_sector *bsp, bpb_t *wbpb);
114 static uchar_t *build_rootdir(bpb_t *wbpb, char *ffn, int fffd,
116 static uchar_t *build_fat(bpb_t *wbpb, struct fat_od_fsi *fsinfop,
123 bpb_t *wbpb, int *prtsize, int *prtspc, int *prtbpf, int *prtnsect,
127 bpb_t *wbpb);
128 static void compute_file_area_size(bpb_t *wbpb);
132 static void compute_cluster_size(bpb_t *wbpb);
133 static void find_fixed_details(int fd, bpb_t *wbpb);
135 static void floppy_bpb_fillin(bpb_t *wbpb,
137 static void read_existing_bpb(int fd, bpb_t *wbpb);
143 static void write_bootsects(int fd, boot_sector_t *bsp, bpb_t *wbpb,
145 static void fill_bpb_sizes(bpb_t *wbpb, struct ipart part[],
147 static void set_fat_string(bpb_t *wbpb, int fatsize);
151 static void lookup_floppy(struct fd_char *fdchar, bpb_t *wbpb);
152 static void label_volume(char *lbl, bpb_t *wbpb);
158 static void write_rest(bpb_t *wbpb, char *efn,
161 char *ffn, bpb_t *wbpb);
165 static int prepare_image_file(char *fn, bpb_t *wbpb);
168 static int open_and_examine(char *dn, bpb_t *wbpb);
171 static int open_and_seek(char *dn, bpb_t *wbpb, off64_t *seekto);
176 static int seek_nofdisk(int fd, bpb_t *wbpb, off64_t *seekto);
178 static int seek_partn(int fd, char *pn, bpb_t *wbpb, off64_t *seekto);
487 fill_fat32_bpb(bpb_t *wbpb) in fill_fat32_bpb() argument
511 wbpb->bpb32.ext_flags = 0x0; in fill_fat32_bpb()
517 wbpb->bpb32.fs_vers_lo = '\0'; in fill_fat32_bpb()
518 wbpb->bpb32.fs_vers_hi = '\0'; in fill_fat32_bpb()
525 wbpb->bpb32.fsinfosec = 1; in fill_fat32_bpb()
526 wbpb->bpb32.backupboot = 6; in fill_fat32_bpb()
531 fill_bpb_sizes(bpb_t *wbpb, struct ipart part[], int partno, off64_t offset) in fill_bpb_sizes() argument
553 wbpb->bpb.sectors_in_volume = 0; in fill_bpb_sizes()
555 wbpb->bpb.sectors_in_volume = usesize; in fill_bpb_sizes()
556 wbpb->bpb.sectors_in_logical_volume = usesize; in fill_bpb_sizes()
559 wbpb->bpb.hidden_sectors = offset; in fill_bpb_sizes()
564 wbpb->sunbpb.bs_offset_high = offset >> 16; in fill_bpb_sizes()
565 wbpb->sunbpb.bs_offset_low = offset & 0xFFFF; in fill_bpb_sizes()
614 seek_partn(int fd, char *pn, bpb_t *wbpb, off64_t *seekto) in seek_partn() argument
718 fill_bpb_sizes(wbpb, part, bootPart, *seekto); in seek_partn()
740 fill_bpb_sizes(wbpb, part, primaryPart, *seekto); in seek_partn()
857 fill_bpb_sizes(wbpb, part, extndDrives[driveIndex], in seek_partn()
898 fill_bpb_sizes(wbpb, part, extraDrives[driveIndex], *seekto); in seek_partn()
926 seek_nofdisk(int fd, bpb_t *wbpb, off64_t *seekto) in seek_nofdisk() argument
929 wbpb->bpb.sectors_in_volume = 0; in seek_nofdisk()
931 wbpb->bpb.sectors_in_volume = (short)TotSize; in seek_nofdisk()
932 wbpb->bpb.sectors_in_logical_volume = TotSize; in seek_nofdisk()
935 wbpb->bpb.hidden_sectors = RelOffset; in seek_nofdisk()
936 wbpb->sunbpb.bs_offset_high = RelOffset >> 16; in seek_nofdisk()
937 wbpb->sunbpb.bs_offset_low = RelOffset & 0xFFFF; in seek_nofdisk()
959 set_fat_string(bpb_t *wbpb, int fatsize) in set_fat_string() argument
962 (void) strncpy((char *)wbpb->ebpb.type, FAT12_TYPE_STRING, in set_fat_string()
965 (void) strncpy((char *)wbpb->ebpb.type, FAT16_TYPE_STRING, in set_fat_string()
968 (void) strncpy((char *)wbpb->ebpb.type, FAT32_TYPE_STRING, in set_fat_string()
981 prepare_image_file(char *fn, bpb_t *wbpb) in prepare_image_file() argument
993 wbpb->bpb.sectors_in_volume = 2 * 80 * 15; in prepare_image_file()
994 wbpb->bpb.sectors_in_logical_volume = 2 * 80 * 15; in prepare_image_file()
995 wbpb->bpb.sectors_per_track = 15; in prepare_image_file()
996 wbpb->bpb.heads = 2; in prepare_image_file()
997 wbpb->bpb.media = 0xF9; in prepare_image_file()
998 wbpb->bpb.num_root_entries = 224; in prepare_image_file()
999 wbpb->bpb.sectors_per_cluster = 1; in prepare_image_file()
1000 wbpb->bpb.sectors_per_fat = 7; in prepare_image_file()
1003 wbpb->bpb.sectors_in_volume = 2 * 80 * 18; in prepare_image_file()
1004 wbpb->bpb.sectors_in_logical_volume = 2 * 80 * 18; in prepare_image_file()
1005 wbpb->bpb.sectors_per_track = 18; in prepare_image_file()
1006 wbpb->bpb.heads = 2; in prepare_image_file()
1007 wbpb->bpb.media = 0xF0; in prepare_image_file()
1008 wbpb->bpb.num_root_entries = 224; in prepare_image_file()
1009 wbpb->bpb.sectors_per_cluster = 1; in prepare_image_file()
1010 wbpb->bpb.sectors_per_fat = 9; in prepare_image_file()
1017 if (lseek(fd, (wbpb->bpb.sectors_in_volume * BPSEC)-1, SEEK_SET) < 0) { in prepare_image_file()
1036 set_fat_string(wbpb, Fatentsize); in prepare_image_file()
1038 wbpb->ebpb.phys_drive_num = 0; in prepare_image_file()
1040 wbpb->sunbpb.bs_offset_high = 0; in prepare_image_file()
1041 wbpb->sunbpb.bs_offset_low = 0; in prepare_image_file()
1094 floppy_bpb_fillin(bpb_t *wbpb, int diam, int hds, int spt) in floppy_bpb_fillin() argument
1102 wbpb->bpb.media = 0xF9; in floppy_bpb_fillin()
1103 wbpb->bpb.num_root_entries = 112; in floppy_bpb_fillin()
1104 wbpb->bpb.sectors_per_cluster = 2; in floppy_bpb_fillin()
1105 wbpb->bpb.sectors_per_fat = 3; in floppy_bpb_fillin()
1108 wbpb->bpb.media = 0xF0; in floppy_bpb_fillin()
1109 wbpb->bpb.num_root_entries = 224; in floppy_bpb_fillin()
1110 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1111 wbpb->bpb.sectors_per_fat = 9; in floppy_bpb_fillin()
1114 wbpb->bpb.media = 0xF0; in floppy_bpb_fillin()
1115 wbpb->bpb.num_root_entries = 240; in floppy_bpb_fillin()
1116 wbpb->bpb.sectors_per_cluster = 2; in floppy_bpb_fillin()
1117 wbpb->bpb.sectors_per_fat = 9; in floppy_bpb_fillin()
1140 wbpb->bpb.media = 0xF9; in floppy_bpb_fillin()
1141 wbpb->bpb.num_root_entries = 224; in floppy_bpb_fillin()
1142 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1143 wbpb->bpb.sectors_per_fat = 7; in floppy_bpb_fillin()
1146 wbpb->bpb.media = 0xFD; in floppy_bpb_fillin()
1147 wbpb->bpb.num_root_entries = 112; in floppy_bpb_fillin()
1148 wbpb->bpb.sectors_per_cluster = 2; in floppy_bpb_fillin()
1149 wbpb->bpb.sectors_per_fat = 2; in floppy_bpb_fillin()
1152 wbpb->bpb.media = 0xFF; in floppy_bpb_fillin()
1153 wbpb->bpb.num_root_entries = 112; in floppy_bpb_fillin()
1154 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1155 wbpb->bpb.sectors_per_fat = 2; in floppy_bpb_fillin()
1168 wbpb->bpb.media = 0xFC; in floppy_bpb_fillin()
1169 wbpb->bpb.num_root_entries = 64; in floppy_bpb_fillin()
1170 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1171 wbpb->bpb.sectors_per_fat = 2; in floppy_bpb_fillin()
1174 wbpb->bpb.media = 0xFE; in floppy_bpb_fillin()
1175 wbpb->bpb.num_root_entries = 64; in floppy_bpb_fillin()
1176 wbpb->bpb.sectors_per_cluster = 1; in floppy_bpb_fillin()
1177 wbpb->bpb.sectors_per_fat = 1; in floppy_bpb_fillin()
1210 lookup_floppy(struct fd_char *fdchar, bpb_t *wbpb) in lookup_floppy() argument
1226 wbpb->bpb.sectors_in_logical_volume = tsize; in lookup_floppy()
1228 wbpb->bpb.sectors_in_logical_volume = in lookup_floppy()
1233 wbpb->bpb.sectors_in_volume = in lookup_floppy()
1234 (short)wbpb->bpb.sectors_in_logical_volume; in lookup_floppy()
1237 wbpb->bpb.sectors_per_track = spt; in lookup_floppy()
1239 wbpb->bpb.sectors_per_track = in lookup_floppy()
1243 spt = wbpb->bpb.sectors_per_track; in lookup_floppy()
1247 wbpb->bpb.heads = hds; in lookup_floppy()
1249 wbpb->bpb.heads = in lookup_floppy()
1253 hds = wbpb->bpb.heads; in lookup_floppy()
1260 set_fat_string(wbpb, Fatentsize); in lookup_floppy()
1262 wbpb->ebpb.phys_drive_num = 0; in lookup_floppy()
1264 wbpb->bpb.hidden_sectors = 0; in lookup_floppy()
1265 wbpb->sunbpb.bs_offset_high = 0; in lookup_floppy()
1266 wbpb->sunbpb.bs_offset_low = 0; in lookup_floppy()
1268 floppy_bpb_fillin(wbpb, diam, hds, spt); in lookup_floppy()
1287 compute_cluster_size(bpb_t *wbpb) in compute_cluster_size() argument
1301 volsize = wbpb->bpb.sectors_in_volume ? wbpb->bpb.sectors_in_volume : in compute_cluster_size()
1302 wbpb->bpb.sectors_in_logical_volume; in compute_cluster_size()
1303 volsize -= wbpb->bpb.resv_sectors; in compute_cluster_size()
1385 rds = ((wbpb->bpb.num_root_entries * 32) + in compute_cluster_size()
1386 (wbpb->bpb.bytes_sector - 1)) / wbpb->bpb.bytes_sector; in compute_cluster_size()
1423 wbpb->bpb.sectors_per_cluster = spc; in compute_cluster_size()
1443 set_fat_string(wbpb, Fatentsize); in compute_cluster_size()
1462 tmpval1 = volsize - (wbpb->bpb.resv_sectors + rds); in compute_cluster_size()
1464 tmpval2 = (256 * wbpb->bpb.sectors_per_cluster) + wbpb->bpb.num_fats; in compute_cluster_size()
1474 wbpb->bpb.sectors_per_fat = 0; in compute_cluster_size()
1475 wbpb->bpb32.big_sectors_per_fat = fatsz; in compute_cluster_size()
1478 "FAT32 = %d\n", wbpb->bpb32.big_sectors_per_fat); in compute_cluster_size()
1482 wbpb->bpb.sectors_per_fat = (ushort_t)(fatsz & 0x0000FFFF); in compute_cluster_size()
1485 "FAT16 = %d\n", wbpb->bpb.sectors_per_fat); in compute_cluster_size()
1492 find_fixed_details(int fd, bpb_t *wbpb) in find_fixed_details() argument
1512 wbpb->bpb.heads = (GetTPC ? dginfo.dkg_nhead : TrkPerCyl); in find_fixed_details()
1513 wbpb->bpb.sectors_per_track = (GetSPT ? dginfo.dkg_nsect : SecPerTrk); in find_fixed_details()
1533 wbpb->bpb.media = 0xF8; in find_fixed_details()
1535 wbpb->bpb.num_root_entries = 0; in find_fixed_details()
1537 wbpb->bpb.num_root_entries = 512; in find_fixed_details()
1538 wbpb->ebpb.phys_drive_num = 0x80; in find_fixed_details()
1539 compute_cluster_size(wbpb); in find_fixed_details()
1571 compute_file_area_size(bpb_t *wbpb) in compute_file_area_size() argument
1577 ((wbpb->bpb.num_root_entries * 32) + (wbpb->bpb.bytes_sector - 1)) / in compute_file_area_size()
1578 wbpb->bpb.bytes_sector; in compute_file_area_size()
1580 if (wbpb->bpb.sectors_per_fat) { in compute_file_area_size()
1584 FATSz = wbpb->bpb.sectors_per_fat; in compute_file_area_size()
1585 TotSec = wbpb->bpb.sectors_in_volume; in compute_file_area_size()
1590 FATSz = wbpb->bpb32.big_sectors_per_fat; in compute_file_area_size()
1591 TotSec = wbpb->bpb.sectors_in_logical_volume; in compute_file_area_size()
1595 (wbpb->bpb.resv_sectors + (wbpb->bpb.num_fats * FATSz) + in compute_file_area_size()
1602 TotalClusters = DataSec / wbpb->bpb.sectors_per_cluster; in compute_file_area_size()
1607 "bytes.\n"), TotalClusters, wbpb->bpb.sectors_per_cluster, in compute_file_area_size()
1608 TotalClusters * wbpb->bpb.sectors_per_cluster * BPSEC); in compute_file_area_size()
1625 swap_pack_bpbcpy(struct _boot_sector *bsp, bpb_t *wbpb) in swap_pack_bpbcpy() argument
1631 store_16_bits(&fillp, wbpb->bpb.bytes_sector); in swap_pack_bpbcpy()
1632 *fillp++ = wbpb->bpb.sectors_per_cluster; in swap_pack_bpbcpy()
1633 store_16_bits(&fillp, wbpb->bpb.resv_sectors); in swap_pack_bpbcpy()
1634 *fillp++ = wbpb->bpb.num_fats; in swap_pack_bpbcpy()
1635 store_16_bits(&fillp, wbpb->bpb.num_root_entries); in swap_pack_bpbcpy()
1636 store_16_bits(&fillp, wbpb->bpb.sectors_in_volume); in swap_pack_bpbcpy()
1637 *fillp++ = wbpb->bpb.media; in swap_pack_bpbcpy()
1638 store_16_bits(&fillp, wbpb->bpb.sectors_per_fat); in swap_pack_bpbcpy()
1639 store_16_bits(&fillp, wbpb->bpb.sectors_per_track); in swap_pack_bpbcpy()
1640 store_16_bits(&fillp, wbpb->bpb.heads); in swap_pack_bpbcpy()
1641 store_32_bits(&fillp, wbpb->bpb.hidden_sectors); in swap_pack_bpbcpy()
1642 store_32_bits(&fillp, wbpb->bpb.sectors_in_logical_volume); in swap_pack_bpbcpy()
1644 *fillp++ = wbpb->ebpb.phys_drive_num; in swap_pack_bpbcpy()
1645 *fillp++ = wbpb->ebpb.reserved; in swap_pack_bpbcpy()
1646 *fillp++ = wbpb->ebpb.ext_signature; in swap_pack_bpbcpy()
1647 store_32_bits(&fillp, wbpb->ebpb.volume_id); in swap_pack_bpbcpy()
1648 (void) strncpy((char *)fillp, (char *)wbpb->ebpb.volume_label, 11); in swap_pack_bpbcpy()
1650 (void) strncpy((char *)fillp, (char *)wbpb->ebpb.type, 8); in swap_pack_bpbcpy()
1655 swap_pack_bpb32cpy(struct _boot_sector32 *bsp, bpb_t *wbpb) in swap_pack_bpb32cpy() argument
1662 store_16_bits(&fillp, wbpb->bpb.bytes_sector); in swap_pack_bpb32cpy()
1663 *fillp++ = wbpb->bpb.sectors_per_cluster; in swap_pack_bpb32cpy()
1664 store_16_bits(&fillp, wbpb->bpb.resv_sectors); in swap_pack_bpb32cpy()
1665 *fillp++ = wbpb->bpb.num_fats; in swap_pack_bpb32cpy()
1666 store_16_bits(&fillp, wbpb->bpb.num_root_entries); in swap_pack_bpb32cpy()
1667 store_16_bits(&fillp, wbpb->bpb.sectors_in_volume); in swap_pack_bpb32cpy()
1668 *fillp++ = wbpb->bpb.media; in swap_pack_bpb32cpy()
1669 store_16_bits(&fillp, wbpb->bpb.sectors_per_fat); in swap_pack_bpb32cpy()
1670 store_16_bits(&fillp, wbpb->bpb.sectors_per_track); in swap_pack_bpb32cpy()
1671 store_16_bits(&fillp, wbpb->bpb.heads); in swap_pack_bpb32cpy()
1672 store_32_bits(&fillp, wbpb->bpb.hidden_sectors); in swap_pack_bpb32cpy()
1673 store_32_bits(&fillp, wbpb->bpb.sectors_in_logical_volume); in swap_pack_bpb32cpy()
1675 store_32_bits(&fillp, wbpb->bpb32.big_sectors_per_fat); in swap_pack_bpb32cpy()
1676 store_16_bits(&fillp, wbpb->bpb32.ext_flags); in swap_pack_bpb32cpy()
1677 *fillp++ = wbpb->bpb32.fs_vers_lo; in swap_pack_bpb32cpy()
1678 *fillp++ = wbpb->bpb32.fs_vers_hi; in swap_pack_bpb32cpy()
1679 store_32_bits(&fillp, wbpb->bpb32.root_dir_clust); in swap_pack_bpb32cpy()
1680 store_16_bits(&fillp, wbpb->bpb32.fsinfosec); in swap_pack_bpb32cpy()
1681 store_16_bits(&fillp, wbpb->bpb32.backupboot); in swap_pack_bpb32cpy()
1683 store_16_bits(&fillp, wbpb->bpb32.reserved[r]); in swap_pack_bpb32cpy()
1685 *fillp++ = wbpb->ebpb.phys_drive_num; in swap_pack_bpb32cpy()
1686 *fillp++ = wbpb->ebpb.reserved; in swap_pack_bpb32cpy()
1687 *fillp++ = wbpb->ebpb.ext_signature; in swap_pack_bpb32cpy()
1688 store_32_bits(&fillp, wbpb->ebpb.volume_id); in swap_pack_bpb32cpy()
1689 (void) strncpy((char *)fillp, (char *)wbpb->ebpb.volume_label, 11); in swap_pack_bpb32cpy()
1691 (void) strncpy((char *)fillp, (char *)wbpb->ebpb.type, 8); in swap_pack_bpb32cpy()
1696 swap_pack_sebpbcpy(struct _boot_sector *bsp, bpb_t *wbpb) in swap_pack_sebpbcpy() argument
1701 store_16_bits(&fillp, wbpb->sunbpb.bs_offset_high); in swap_pack_sebpbcpy()
1702 store_16_bits(&fillp, wbpb->sunbpb.bs_offset_low); in swap_pack_sebpbcpy()
1707 swap_pack_grabbpb(bpb_t *wbpb, struct _boot_sector *bsp) in swap_pack_grabbpb() argument
1713 ((uchar_t *)&(wbpb->bpb.bytes_sector))[1] = *grabp++; in swap_pack_grabbpb()
1714 ((uchar_t *)&(wbpb->bpb.bytes_sector))[0] = *grabp++; in swap_pack_grabbpb()
1715 wbpb->bpb.sectors_per_cluster = *grabp++; in swap_pack_grabbpb()
1716 ((uchar_t *)&(wbpb->bpb.resv_sectors))[1] = *grabp++; in swap_pack_grabbpb()
1717 ((uchar_t *)&(wbpb->bpb.resv_sectors))[0] = *grabp++; in swap_pack_grabbpb()
1718 wbpb->bpb.num_fats = *grabp++; in swap_pack_grabbpb()
1719 ((uchar_t *)&(wbpb->bpb.num_root_entries))[1] = *grabp++; in swap_pack_grabbpb()
1720 ((uchar_t *)&(wbpb->bpb.num_root_entries))[0] = *grabp++; in swap_pack_grabbpb()
1721 ((uchar_t *)&(wbpb->bpb.sectors_in_volume))[1] = *grabp++; in swap_pack_grabbpb()
1722 ((uchar_t *)&(wbpb->bpb.sectors_in_volume))[0] = *grabp++; in swap_pack_grabbpb()
1723 wbpb->bpb.media = *grabp++; in swap_pack_grabbpb()
1724 ((uchar_t *)&(wbpb->bpb.sectors_per_fat))[1] = *grabp++; in swap_pack_grabbpb()
1725 ((uchar_t *)&(wbpb->bpb.sectors_per_fat))[0] = *grabp++; in swap_pack_grabbpb()
1726 ((uchar_t *)&(wbpb->bpb.sectors_per_track))[1] = *grabp++; in swap_pack_grabbpb()
1727 ((uchar_t *)&(wbpb->bpb.sectors_per_track))[0] = *grabp++; in swap_pack_grabbpb()
1728 ((uchar_t *)&(wbpb->bpb.heads))[1] = *grabp++; in swap_pack_grabbpb()
1729 ((uchar_t *)&(wbpb->bpb.heads))[0] = *grabp++; in swap_pack_grabbpb()
1730 ((uchar_t *)&(wbpb->bpb.hidden_sectors))[3] = *grabp++; in swap_pack_grabbpb()
1731 ((uchar_t *)&(wbpb->bpb.hidden_sectors))[2] = *grabp++; in swap_pack_grabbpb()
1732 ((uchar_t *)&(wbpb->bpb.hidden_sectors))[1] = *grabp++; in swap_pack_grabbpb()
1733 ((uchar_t *)&(wbpb->bpb.hidden_sectors))[0] = *grabp++; in swap_pack_grabbpb()
1734 ((uchar_t *)&(wbpb->bpb.sectors_in_logical_volume))[3] = *grabp++; in swap_pack_grabbpb()
1735 ((uchar_t *)&(wbpb->bpb.sectors_in_logical_volume))[2] = *grabp++; in swap_pack_grabbpb()
1736 ((uchar_t *)&(wbpb->bpb.sectors_in_logical_volume))[1] = *grabp++; in swap_pack_grabbpb()
1737 ((uchar_t *)&(wbpb->bpb.sectors_in_logical_volume))[0] = *grabp++; in swap_pack_grabbpb()
1738 wbpb->ebpb.phys_drive_num = *grabp++; in swap_pack_grabbpb()
1739 wbpb->ebpb.reserved = *grabp++; in swap_pack_grabbpb()
1740 wbpb->ebpb.ext_signature = *grabp++; in swap_pack_grabbpb()
1741 ((uchar_t *)&(wbpb->ebpb.volume_id))[3] = *grabp++; in swap_pack_grabbpb()
1742 ((uchar_t *)&(wbpb->ebpb.volume_id))[2] = *grabp++; in swap_pack_grabbpb()
1743 ((uchar_t *)&(wbpb->ebpb.volume_id))[1] = *grabp++; in swap_pack_grabbpb()
1744 ((uchar_t *)&(wbpb->ebpb.volume_id))[0] = *grabp++; in swap_pack_grabbpb()
1746 (void) strncpy((char *)wbpb->ebpb.volume_label, (char *)grabp, 11); in swap_pack_grabbpb()
1748 (void) strncpy((char *)wbpb->ebpb.type, (char *)grabp, 8); in swap_pack_grabbpb()
1753 swap_pack_grabsebpb(bpb_t *wbpb, struct _boot_sector *bsp) in swap_pack_grabsebpb() argument
1758 ((uchar_t *)&(wbpb->sunbpb.bs_offset_high))[1] = *grabp++; in swap_pack_grabsebpb()
1759 ((uchar_t *)&(wbpb->sunbpb.bs_offset_high))[0] = *grabp++; in swap_pack_grabsebpb()
1760 ((uchar_t *)&(wbpb->sunbpb.bs_offset_low))[1] = *grabp++; in swap_pack_grabsebpb()
1761 ((uchar_t *)&(wbpb->sunbpb.bs_offset_low))[0] = *grabp++; in swap_pack_grabsebpb()
1766 swap_pack_grab32bpb(bpb_t *wbpb, struct _boot_sector *bsp) in swap_pack_grab32bpb() argument
1772 ((uchar_t *)&(wbpb->bpb32.big_sectors_per_fat))[3] = *grabp++; in swap_pack_grab32bpb()
1773 ((uchar_t *)&(wbpb->bpb32.big_sectors_per_fat))[2] = *grabp++; in swap_pack_grab32bpb()
1774 ((uchar_t *)&(wbpb->bpb32.big_sectors_per_fat))[1] = *grabp++; in swap_pack_grab32bpb()
1775 ((uchar_t *)&(wbpb->bpb32.big_sectors_per_fat))[0] = *grabp++; in swap_pack_grab32bpb()
1776 ((uchar_t *)&(wbpb->bpb32.ext_flags))[1] = *grabp++; in swap_pack_grab32bpb()
1777 ((uchar_t *)&(wbpb->bpb32.ext_flags))[0] = *grabp++; in swap_pack_grab32bpb()
1778 wbpb->bpb32.fs_vers_lo = *grabp++; in swap_pack_grab32bpb()
1779 wbpb->bpb32.fs_vers_hi = *grabp++; in swap_pack_grab32bpb()
1780 ((uchar_t *)&(wbpb->bpb32.root_dir_clust))[3] = *grabp++; in swap_pack_grab32bpb()
1781 ((uchar_t *)&(wbpb->bpb32.root_dir_clust))[2] = *grabp++; in swap_pack_grab32bpb()
1782 ((uchar_t *)&(wbpb->bpb32.root_dir_clust))[1] = *grabp++; in swap_pack_grab32bpb()
1783 ((uchar_t *)&(wbpb->bpb32.root_dir_clust))[0] = *grabp++; in swap_pack_grab32bpb()
1784 ((uchar_t *)&(wbpb->bpb32.fsinfosec))[1] = *grabp++; in swap_pack_grab32bpb()
1785 ((uchar_t *)&(wbpb->bpb32.fsinfosec))[0] = *grabp++; in swap_pack_grab32bpb()
1786 ((uchar_t *)&(wbpb->bpb32.backupboot))[1] = *grabp++; in swap_pack_grab32bpb()
1787 ((uchar_t *)&(wbpb->bpb32.backupboot))[0] = *grabp++; in swap_pack_grab32bpb()
1788 ((uchar_t *)&(wbpb->bpb32.reserved[0]))[1] = *grabp++; in swap_pack_grab32bpb()
1789 ((uchar_t *)&(wbpb->bpb32.reserved[0]))[0] = *grabp++; in swap_pack_grab32bpb()
1790 ((uchar_t *)&(wbpb->bpb32.reserved[1]))[1] = *grabp++; in swap_pack_grab32bpb()
1791 ((uchar_t *)&(wbpb->bpb32.reserved[1]))[0] = *grabp++; in swap_pack_grab32bpb()
1792 ((uchar_t *)&(wbpb->bpb32.reserved[2]))[1] = *grabp++; in swap_pack_grab32bpb()
1793 ((uchar_t *)&(wbpb->bpb32.reserved[2]))[0] = *grabp++; in swap_pack_grab32bpb()
1794 ((uchar_t *)&(wbpb->bpb32.reserved[3]))[1] = *grabp++; in swap_pack_grab32bpb()
1795 ((uchar_t *)&(wbpb->bpb32.reserved[3]))[0] = *grabp++; in swap_pack_grab32bpb()
1796 ((uchar_t *)&(wbpb->bpb32.reserved[4]))[1] = *grabp++; in swap_pack_grab32bpb()
1797 ((uchar_t *)&(wbpb->bpb32.reserved[4]))[0] = *grabp++; in swap_pack_grab32bpb()
1798 ((uchar_t *)&(wbpb->bpb32.reserved[5]))[1] = *grabp++; in swap_pack_grab32bpb()
1799 ((uchar_t *)&(wbpb->bpb32.reserved[5]))[0] = *grabp++; in swap_pack_grab32bpb()
1823 read_existing_bpb(int fd, bpb_t *wbpb) in read_existing_bpb() argument
1839 (void) memcpy(&(wbpb->bpb), &(ubpb.bs.bs_front.bs_bpb), in read_existing_bpb()
1840 sizeof (wbpb->bpb)); in read_existing_bpb()
1841 (void) memcpy(&(wbpb->ebpb), &(ubpb.bs.bs_ebpb), sizeof (wbpb->ebpb)); in read_existing_bpb()
1843 swap_pack_grabbpb(wbpb, &(ubpb.bs)); in read_existing_bpb()
1847 (void) memcpy(&(wbpb->sunbpb), &(ubpb.bs.bs_sebpb), in read_existing_bpb()
1848 sizeof (wbpb->sunbpb)); in read_existing_bpb()
1850 swap_pack_grabsebpb(wbpb, &(ubpb.bs)); in read_existing_bpb()
1853 if (wbpb->bpb.bytes_sector != BPSEC) { in read_existing_bpb()
1856 if (!(ISP2(wbpb->bpb.bytes_sector) && in read_existing_bpb()
1857 IN_RANGE(wbpb->bpb.bytes_sector, 1, BPSEC * 8))) { in read_existing_bpb()
1869 wbpb->bpb.bytes_sector); in read_existing_bpb()
1874 if (!(ISP2(wbpb->bpb.sectors_per_cluster) && in read_existing_bpb()
1875 IN_RANGE(wbpb->bpb.sectors_per_cluster, 1, 128))) { in read_existing_bpb()
1885 if (wbpb->bpb.sectors_per_fat == 0) { in read_existing_bpb()
1887 (void) memcpy(&(wbpb->bpb32), &(ubpb.bs32.bs_bpb32), in read_existing_bpb()
1888 sizeof (wbpb->bpb32)); in read_existing_bpb()
1890 swap_pack_grab32bpb(wbpb, &(ubpb.bs)); in read_existing_bpb()
1892 compute_file_area_size(wbpb); in read_existing_bpb()
1893 if ((wbpb->bpb32.big_sectors_per_fat * BPSEC / 4) >= in read_existing_bpb()
1900 compute_file_area_size(wbpb); in read_existing_bpb()
1922 bpb_t *wbpb, int *prtsize, int *prtspc, int *prtbpf, int *prtnsect, in compare_existing_with_computed() argument
1936 compare = *wbpb; in compare_existing_with_computed()
1951 if (compare.bpb.heads != wbpb->bpb.heads) { in compare_existing_with_computed()
1956 wbpb->bpb.sectors_per_track) { in compare_existing_with_computed()
1976 if (dginfo.dkg_nhead != wbpb->bpb.heads) { in compare_existing_with_computed()
1981 wbpb->bpb.sectors_per_track) { in compare_existing_with_computed()
1990 if (!*prtfdisk && TotSize != wbpb->bpb.sectors_in_volume && in compare_existing_with_computed()
1991 TotSize != wbpb->bpb.sectors_in_logical_volume) { in compare_existing_with_computed()
1996 if (compare.bpb.sectors_per_cluster != wbpb->bpb.sectors_per_cluster) { in compare_existing_with_computed()
2001 if (compare.bpb.hidden_sectors != wbpb->bpb.hidden_sectors) { in compare_existing_with_computed()
2006 if (compare.bpb.resv_sectors != wbpb->bpb.resv_sectors) { in compare_existing_with_computed()
2021 fatents = wbpb->bpb.sectors_per_fat * BPSEC * 2 / 3; in compare_existing_with_computed()
2022 if (fatents >= TotalClusters && wbpb->ebpb.type[4] == '2') in compare_existing_with_computed()
2035 print_reproducing_command(int fd, char *actualdisk, char *suffix, bpb_t *wbpb) in print_reproducing_command() argument
2049 compare_existing_with_computed(fd, suffix, wbpb, in print_reproducing_command()
2059 ll = min(11, (int)strlen((char *)wbpb->ebpb.volume_label)); in print_reproducing_command()
2066 while (wbpb->ebpb.volume_label[--i] == ' ') in print_reproducing_command()
2076 toupper((int)(wbpb->ebpb.volume_label[i]))) { in print_reproducing_command()
2088 (void) printf("%c", wbpb->ebpb.volume_label[i]); in print_reproducing_command()
2109 (void) printf("size=%u", wbpb->bpb.sectors_in_volume ? in print_reproducing_command()
2110 wbpb->bpb.sectors_in_volume : in print_reproducing_command()
2111 wbpb->bpb.sectors_in_logical_volume); in print_reproducing_command()
2116 (void) printf("nsect=%d", wbpb->bpb.sectors_per_track); in print_reproducing_command()
2121 (void) printf("spc=%d", wbpb->bpb.sectors_per_cluster); in print_reproducing_command()
2126 (void) printf("ntrack=%d", wbpb->bpb.heads); in print_reproducing_command()
2136 (void) printf("hidden=%u", wbpb->bpb.hidden_sectors); in print_reproducing_command()
2141 (void) printf("reserve=%d", wbpb->bpb.resv_sectors); in print_reproducing_command()
2163 open_and_examine(char *dn, bpb_t *wbpb) in open_and_examine() argument
2208 if (suffix && !(seek_partn(fd, suffix, wbpb, &ignored))) { in open_and_examine()
2213 read_existing_bpb(fd, wbpb); in open_and_examine()
2214 print_reproducing_command(fd, actualdisk, suffix, wbpb); in open_and_examine()
2231 open_and_seek(char *dn, bpb_t *wbpb, off64_t *seekto) in open_and_seek() argument
2248 wbpb->bpb.num_fats = 2; in open_and_seek()
2249 wbpb->bpb.bytes_sector = BPSEC; in open_and_seek()
2257 wbpb->bpb.resv_sectors = 32; in open_and_seek()
2259 wbpb->bpb.resv_sectors = 1; in open_and_seek()
2261 wbpb->bpb.resv_sectors = Resrvd; in open_and_seek()
2263 wbpb->ebpb.ext_signature = 0x29; /* Magic number for modern format */ in open_and_seek()
2264 wbpb->ebpb.volume_id = 0; in open_and_seek()
2267 fill_fat32_bpb(wbpb); in open_and_seek()
2274 return (fd = prepare_image_file(dn, wbpb)); in open_and_seek()
2322 if (suffix && !(seek_partn(fd, suffix, wbpb, seekto))) { in open_and_seek()
2341 if (!(seek_nofdisk(fd, wbpb, seekto))) { in open_and_seek()
2345 find_fixed_details(fd, wbpb); in open_and_seek()
2368 lookup_floppy(&fdchar, wbpb); in open_and_seek()
2379 lookup_floppy(&fdchar, wbpb); in open_and_seek()
2382 find_fixed_details(fd, wbpb); in open_and_seek()
2561 label_volume(char *lbl, bpb_t *wbpb) in label_volume() argument
2571 wbpb->ebpb.volume_label[i] = toupper(lbl[i]); in label_volume()
2574 wbpb->ebpb.volume_label[i] = ' '; in label_volume()
2645 build_fat(bpb_t *wbpb, struct fat_od_fsi *fsinfop, ulong_t bootblksize, in build_fat() argument
2657 wbpb->bpb.sectors_per_fat ? wbpb->bpb.sectors_per_fat : in build_fat()
2658 wbpb->bpb32.big_sectors_per_fat); in build_fat()
2662 *fatsize = BPSEC * wbpb->bpb32.big_sectors_per_fat; in build_fat()
2664 *fatsize = BPSEC * wbpb->bpb.sectors_per_fat; in build_fat()
2675 *fatp = wbpb->bpb.media; in build_fat()
2709 numclust = idivceil(numsect, wbpb->bpb.sectors_per_cluster); in build_fat()
2724 wbpb->bpb32.root_dir_clust = nextfree++; in build_fat()
2734 numclust = idivceil(numsect, wbpb->bpb.sectors_per_cluster); in build_fat()
2862 build_rootdir(bpb_t *wbpb, char *ffn, int fffd, in build_rootdir() argument
2877 *rdirsize = wbpb->bpb.sectors_per_cluster * BPSEC; in build_rootdir()
2879 *rdirsize = wbpb->bpb.num_root_entries * sizeof (struct pcdir); in build_rootdir()
2934 write_rest(bpb_t *wbpb, char *efn, int dfd, int sfd, int remaining) in write_rest() argument
2946 numclust = idivceil(numsect, wbpb->bpb.sectors_per_cluster); in write_rest()
2948 wnumsect = numclust * wbpb->bpb.sectors_per_cluster; in write_rest()
3020 write_bootsects(int fd, boot_sector_t *bsp, bpb_t *wbpb, in write_bootsects() argument
3026 (void) memcpy(&(bsp->bs32.bs_front.bs_bpb), &(wbpb->bpb), in write_bootsects()
3027 sizeof (wbpb->bpb)); in write_bootsects()
3028 (void) memcpy(&(bsp->bs32.bs_bpb32), &(wbpb->bpb32), in write_bootsects()
3029 sizeof (wbpb->bpb32)); in write_bootsects()
3030 (void) memcpy(&(bsp->bs32.bs_ebpb), &(wbpb->ebpb), in write_bootsects()
3031 sizeof (wbpb->ebpb)); in write_bootsects()
3033 swap_pack_bpb32cpy(&(bsp->bs32), wbpb); in write_bootsects()
3038 (void) memcpy(&(bsp->bs.bs_front.bs_bpb), &(wbpb->bpb), in write_bootsects()
3039 sizeof (wbpb->bpb)); in write_bootsects()
3040 (void) memcpy(&(bsp->bs.bs_ebpb), &(wbpb->ebpb), in write_bootsects()
3041 sizeof (wbpb->ebpb)); in write_bootsects()
3043 swap_pack_bpbcpy(&(bsp->bs), wbpb); in write_bootsects()
3049 (void) memcpy(&(bsp->bs.bs_sebpb), &(wbpb->sunbpb), in write_bootsects()
3050 sizeof (wbpb->sunbpb)); in write_bootsects()
3052 swap_pack_sebpbcpy(&(bsp->bs), wbpb); in write_bootsects()
3075 write_fat(int fd, off64_t seekto, char *fn, char *lbl, char *ffn, bpb_t *wbpb) in write_fat() argument
3085 compute_file_area_size(wbpb); in write_fat()
3088 label_volume(lbl, wbpb); in write_fat()
3092 fatp = build_fat(wbpb, &fsinfo, bootblksize, &fatsize, in write_fat()
3095 write_bootsects(fd, &bootsect, wbpb, &fsinfo, seekto); in write_fat()
3098 seekto + (BPSEC * wbpb->bpb.resv_sectors), SEEK_SET) < 0) { in write_fat()
3107 fatsize, wbpb->bpb.num_fats); in write_fat()
3110 for (nf = 0; nf < (int)wbpb->bpb.num_fats; nf++) in write_fat()
3124 rdirp = build_rootdir(wbpb, ffn, fffd, ffsize, ffsc, &rdirsize); in write_fat()
3150 write_rest(wbpb, fn, fd, bsfd, bootblksize - BPSEC); in write_fat()
3170 write_rest(wbpb, ffn, fd, fffd, ffsize); in write_fat()