@@ -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