Home | History | Annotate | Download | only in fsck_msdos

Lines Matching defs:fsinfo

49 	u_char *fsinfo;
106 fsinfo = calloc(2, secsize);
107 if (fsinfo == NULL)
130 boot->FSInfo = block[48] + (block[49] << 8);
133 if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
134 != boot->FSInfo * boot->BytesPerSec
135 || (size_t)read(dosfs, fsinfo, 2 * secsize)
137 perr("could not read fsinfo block");
140 if (memcmp(fsinfo, "RRaA", 4)
141 || memcmp(fsinfo + 0x1e4, "rrAa", 4)
142 || fsinfo[0x1fc]
143 || fsinfo[0x1fd]
144 || fsinfo[0x1fe] != 0x55
145 || fsinfo[0x1ff] != 0xaa
146 || fsinfo[0x3fc]
147 || fsinfo[0x3fd]
148 || fsinfo[0x3fe] != 0x55
149 || fsinfo[0x3ff] != 0xaa) {
150 pwarn("Invalid signature in fsinfo block\n");
152 memcpy(fsinfo, "RRaA", 4);
153 memcpy(fsinfo + 0x1e4, "rrAa", 4);
154 fsinfo[0x1fc] = fsinfo[0x1fd] = 0;
155 fsinfo[0x1fe] = 0x55;
156 fsinfo[0x1ff] = 0xaa;
157 fsinfo[0x3fc] = fsinfo[0x3fd] = 0;
158 fsinfo[0x3fe] = 0x55;
159 fsinfo[0x3ff] = 0xaa;
160 if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
161 != boot->FSInfo * boot->BytesPerSec
162 || (size_t)write(dosfs, fsinfo, 2 * secsize)
164 perr("Unable to write FSInfo");
165 free(fsinfo);
172 boot->FSInfo = 0;
174 if (boot->FSInfo) {
175 boot->FSFree = fsinfo[0x1e8] + (fsinfo[0x1e9] << 8)
176 + (fsinfo[0x1ea] << 16)
177 + ((uint32_t)fsinfo[0x1eb] << 24);
178 boot->FSNext = fsinfo[0x1ec] + (fsinfo[0x1ed] << 8)
179 + (fsinfo[0x1ee] << 16)
180 + ((uint32_t)fsinfo[0x1ef] << 24);
187 free(fsinfo);
211 /* Check backup FSInfo? XXX */
214 free(fsinfo);
303 u_char *fsinfo;
305 fsinfo = calloc(2, boot->BytesPerSec);
306 if (fsinfo == NULL)
309 if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
310 != boot->FSInfo * boot->BytesPerSec
311 || (size_t)read(dosfs, fsinfo, 2 * boot->BytesPerSec)
313 perr("could not read fsinfo block");
314 free(fsinfo);
317 fsinfo[0x1e8] = (u_char)boot->FSFree;
318 fsinfo[0x1e9] = (u_char)(boot->FSFree >> 8);
319 fsinfo[0x1ea] = (u_char)(boot->FSFree >> 16);
320 fsinfo[0x1eb] = (u_char)(boot->FSFree >> 24);
321 fsinfo[0x1ec] = (u_char)boot->FSNext;
322 fsinfo[0x1ed] = (u_char)(boot->FSNext >> 8);
323 fsinfo[0x1ee] = (u_char)(boot->FSNext >> 16);
324 fsinfo[0x1ef] = (u_char)(boot->FSNext >> 24);
325 if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
326 != boot->FSInfo * boot->BytesPerSec
327 || (size_t)write(dosfs, fsinfo, 2 * boot->BytesPerSec)
329 perr("Unable to write FSInfo");
330 free(fsinfo);
334 free(fsinfo);
340 * support for FAT32) doesn't maintain the FSINFO block
343 * Therefore, we handle the FSINFO block only informally,