• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/msdosfs-209.1.1/fsck_msdos.tproj/

Lines Matching refs:boot

69 readboot(dosfs, boot)
71 struct bootblock *boot;
83 perr("could not read boot block");
101 pfatal("Invalid BS_jmpBoot in boot block: %02x%02x%02x\n", block[0], block[1], block[2]);
105 memset(boot, 0, sizeof *boot);
106 boot->ValidFat = -1;
109 boot->BytesPerSec = block[11] + (block[12] << 8);
110 boot->SecPerClust = block[13];
111 boot->ResSectors = block[14] + (block[15] << 8);
112 boot->FATs = block[16];
113 boot->RootDirEnts = block[17] + (block[18] << 8);
114 boot->Sectors = block[19] + (block[20] << 8);
115 boot->Media = block[21];
116 boot->FATsmall = block[22] + (block[23] << 8);
117 boot->SecPerTrack = block[24] + (block[25] << 8);
118 boot->Heads = block[26] + (block[27] << 8);
119 boot->HiddenSecs = block[28] + (block[29] << 8) + (block[30] << 16) + (block[31] << 24);
120 boot->HugeSectors = block[32] + (block[33] << 8) + (block[34] << 16) + (block[35] << 24);
122 boot->FATsecs = boot->FATsmall;
123 boot->ClusterSize = boot->BytesPerSec * boot->SecPerClust;
129 if (boot->BytesPerSec < DOSBOOTBLOCKSIZE || boot->BytesPerSec > MAX_SECTOR_SIZE ||
130 (boot->BytesPerSec & (boot->BytesPerSec - 1)) != 0)
132 pfatal("Invalid sector size: %u\n", boot->BytesPerSec);
144 if (boot->SecPerClust == 0 ||
145 (boot->SecPerClust & (boot->SecPerClust - 1)) != 0)
147 pfatal("Invalid sectors per cluster: %u\n", boot->SecPerClust);
151 if (!boot->RootDirEnts)
152 boot->flags |= FAT32;
153 if (boot->flags & FAT32) {
154 boot->FATsecs = block[36] + (block[37] << 8)
157 boot->ValidFat = block[40] & 0x0f;
166 boot->RootCl = block[44] + (block[45] << 8)
168 boot->FSInfo = block[48] + (block[49] << 8);
169 boot->Backup = block[50] + (block[51] << 8);
171 if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
172 != boot->FSInfo * boot->BytesPerSec
173 || read(dosfs, fsinfo, boot->BytesPerSec)
174 != boot->BytesPerSec) {
194 if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
195 != boot->FSInfo * boot->BytesPerSec
196 || write(dosfs, fsinfo, boot->BytesPerSec)
197 != boot->BytesPerSec) {
203 boot->FSInfo = 0;
207 if (boot->FSInfo) {
208 boot->FSFree = fsinfo[0x1e8] + (fsinfo[0x1e9] << 8)
211 boot->FSNext = fsinfo[0x1ec] + (fsinfo[0x1ed] << 8)
217 boot->ClusterOffset = (boot->RootDirEnts * 32 + boot->BytesPerSec - 1)
218 / boot->BytesPerSec
219 + boot->ResSectors
220 + boot->FATs * boot->FATsecs
221 - CLUST_FIRST * boot->SecPerClust;
223 if (boot->Sectors) {
224 boot->HugeSectors = 0;
225 boot->NumSectors = boot->Sectors;
227 boot->NumSectors = boot->HugeSectors;
235 boot->NumClusters = (boot->NumSectors - boot->ClusterOffset) / boot->SecPerClust;
238 if (boot->flags&FAT32)
239 boot->ClustMask = CLUST32_MASK;
240 else if (boot->NumClusters < (4085+2))
241 boot->ClustMask = CLUST12_MASK;
242 else if (boot->NumClusters < (65526+2)) /* Windows allows 65525 clusters, so we should, too */
243 boot->ClustMask = CLUST16_MASK;
246 boot->NumClusters-2);
250 switch (boot->ClustMask) {
252 boot->NumFatEntries = (boot->FATsecs * boot->BytesPerSec) / 4;
255 boot->NumFatEntries = (boot->FATsecs * boot->BytesPerSec) / 2;
258 boot->NumFatEntries = (boot->FATsecs * boot->BytesPerSec * 2) / 3;
267 if (boot->NumFatEntries < boot->NumClusters) {
269 boot->NumClusters, boot->FATsecs);
270 boot->NumClusters = boot->NumFatEntries;
273 boot->NumSectors = (boot->NumClusters * boot->SecPerClust) + boot->ClusterOffset;
274 if (boot->Sectors) {
275 boot->Sectors = boot->NumSectors;
276 block[19] = boot->NumSectors & 0xFF;
277 block[20] = (boot->NumSectors >> 8) & 0xFF;
279 boot->HugeSectors = boot->NumSectors;
280 block[32] = boot->NumSectors & 0xFF;
281 block[33] = (boot->NumSectors >> 8) & 0xFF;
282 block[34] = (boot->NumSectors >> 16) & 0xFF;
283 block[35] = (boot->NumSectors >> 24) & 0xFF;
286 write(dosfs, block, boot->BytesPerSec) != boot->BytesPerSec)
288 perr("could not write boot sector");
293 pwarn("Continuing, assuming %u clusters\n", boot->NumFatEntries-2);
304 boot->NumFree = 0;
310 writefsinfo(dosfs, boot)
312 struct bootblock *boot;
316 if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
317 != boot->FSInfo * boot->BytesPerSec
318 || read(dosfs, fsinfo, boot->BytesPerSec) != boot->BytesPerSec) {
322 fsinfo[0x1e8] = (u_char)boot->FSFree;
323 fsinfo[0x1e9] = (u_char)(boot->FSFree >> 8);
324 fsinfo[0x1ea] = (u_char)(boot->FSFree >> 16);
325 fsinfo[0x1eb] = (u_char)(boot->FSFree >> 24);
326 fsinfo[0x1ec] = (u_char)boot->FSNext;
327 fsinfo[0x1ed] = (u_char)(boot->FSNext >> 8);
328 fsinfo[0x1ee] = (u_char)(boot->FSNext >> 16);
329 fsinfo[0x1ef] = (u_char)(boot->FSNext >> 24);
330 if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
331 != boot->FSInfo * boot->BytesPerSec
332 || write(dosfs, fsinfo, boot->BytesPerSec)
333 != boot->BytesPerSec) {