Skip to content

Commit f4898e3

Browse files
committed
[CHKDSK][VFATLIB] Chkdsk should not write unless started with the "-F" switch.
CORE-20539
1 parent 7c3d4a0 commit f4898e3

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

  • sdk/lib/fslib/vfatlib/check

sdk/lib/fslib/vfatlib/check/fat.c

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,27 +118,52 @@ void read_fat(DOS_FS * fs)
118118
second_ok = (second_media.value & FAT_EXTD(fs)) == FAT_EXTD(fs);
119119
if (first_ok && !second_ok) {
120120
printf("FATs differ - using first FAT.\n");
121+
#ifdef __REACTOS__
122+
if (rw)
123+
fs_write(fs->fat_start + fs->fat_size, eff_size, first);
124+
#else
121125
fs_write(fs->fat_start + fs->fat_size, eff_size, first);
126+
#endif
122127
}
123128
if (!first_ok && second_ok) {
124129
printf("FATs differ - using second FAT.\n");
130+
#ifdef __REACTOS__
131+
if (rw)
132+
fs_write(fs->fat_start, eff_size, second);
133+
#else
125134
fs_write(fs->fat_start, eff_size, second);
135+
#endif
126136
memcpy(first, second, eff_size);
127137
}
128138
if (first_ok && second_ok) {
129139
if (interactive) {
130140
printf("FATs differ but appear to be intact. Use which FAT ?\n"
131141
"1) Use first FAT\n2) Use second FAT\n");
132142
if (get_key("12", "?") == '1') {
143+
#ifdef __REACTOS__
144+
if (rw)
145+
fs_write(fs->fat_start + fs->fat_size, eff_size, first);
146+
#else
133147
fs_write(fs->fat_start + fs->fat_size, eff_size, first);
148+
#endif
134149
} else {
150+
#ifdef __REACTOS__
151+
if (rw)
152+
fs_write(fs->fat_start, eff_size, second);
153+
#else
135154
fs_write(fs->fat_start, eff_size, second);
155+
#endif
136156
memcpy(first, second, eff_size);
137157
}
138158
} else {
139159
printf("FATs differ but appear to be intact. Using first "
140160
"FAT.\n");
161+
#ifdef __REACTOS__
162+
if (rw)
163+
fs_write(fs->fat_start + fs->fat_size, eff_size, first);
164+
#else
141165
fs_write(fs->fat_start + fs->fat_size, eff_size, first);
166+
#endif
142167
}
143168
}
144169
if (!first_ok && !second_ok) {
@@ -249,7 +274,18 @@ void set_fat(DOS_FS * fs, uint32_t cluster, int32_t new)
249274
default:
250275
die("Bad FAT entry size: %d bits.", fs->fat_bits);
251276
}
277+
#ifdef __REACTOS__
278+
if (rw)
279+
{
280+
fs_write(offs, size, data);
281+
if (fs->nfats > 1)
282+
{
283+
fs_write(offs + fs->fat_size, size, data);
284+
}
285+
}
286+
#else
252287
fs_write(offs, size, data);
288+
#endif
253289
if (fs->nfats > 1) {
254290
fs_write(offs + fs->fat_size, size, data);
255291
}
@@ -514,7 +550,12 @@ void reclaim_file(DOS_FS * fs)
514550
de.size = htole32(le32toh(de.size) + fs->cluster_size);
515551
reclaimed++;
516552
}
553+
#ifdef __REACTOS__
554+
if (rw)
555+
fs_write(offset, sizeof(DIR_ENT), &de);
556+
#else
517557
fs_write(offset, sizeof(DIR_ENT), &de);
558+
#endif
518559
}
519560
if (reclaimed)
520561
printf("Reclaimed %d unused cluster%s (%llu bytes) in %d chain%s.\n",
@@ -580,8 +621,14 @@ uint32_t update_free(DOS_FS * fs)
580621
if (do_set) {
581622
uint32_t le_free = htole32(free);
582623
fs->free_clusters = free;
624+
#ifdef __REACTOS__
625+
if (rw)
626+
fs_write(fs->fsinfo_start + offsetof(struct info_sector, free_clusters),
627+
sizeof(le_free), &le_free);
628+
#else
583629
fs_write(fs->fsinfo_start + offsetof(struct info_sector, free_clusters),
584630
sizeof(le_free), &le_free);
631+
#endif
585632
}
586633

587634
return free;

0 commit comments

Comments
 (0)