mirror of
https://github.com/wiiu-env/libfat.git
synced 2024-11-22 18:09:17 +01:00
fix cluster over allocation, skip cluster alignment write if already aligned
This commit is contained in:
parent
18d059aaec
commit
b7dcf2ce33
@ -36,7 +36,6 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "file_allocation_table.h"
|
#include "file_allocation_table.h"
|
||||||
@ -728,7 +727,7 @@ ssize_t _FAT_write_r (struct _reent *r, int fd, const char *ptr, size_t len) {
|
|||||||
tempVar = remain / BYTES_PER_READ;
|
tempVar = remain / BYTES_PER_READ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((tempVar > 0) && flagNoError) {
|
if ((tempVar > 0 && tempVar < partition->sectorsPerCluster) && flagNoError) {
|
||||||
if (!_FAT_cache_writeSectors (cache,
|
if (!_FAT_cache_writeSectors (cache,
|
||||||
_FAT_fat_clusterToSector (partition, position.cluster) + position.sector, tempVar, ptr))
|
_FAT_fat_clusterToSector (partition, position.cluster) + position.sector, tempVar, ptr))
|
||||||
{
|
{
|
||||||
@ -741,6 +740,7 @@ ssize_t _FAT_write_r (struct _reent *r, int fd, const char *ptr, size_t len) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ((position.sector >= partition->sectorsPerCluster) && flagNoError && (remain > 0)) {
|
if ((position.sector >= partition->sectorsPerCluster) && flagNoError && (remain > 0)) {
|
||||||
position.sector = 0;
|
position.sector = 0;
|
||||||
tempNextCluster = _FAT_fat_nextCluster(partition, position.cluster);
|
tempNextCluster = _FAT_fat_nextCluster(partition, position.cluster);
|
||||||
@ -757,11 +757,12 @@ ssize_t _FAT_write_r (struct _reent *r, int fd, const char *ptr, size_t len) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t chunkSize = partition->bytesPerCluster;
|
||||||
|
|
||||||
// Write whole clusters
|
// Write whole clusters
|
||||||
while ((remain >= partition->bytesPerCluster) && flagNoError) {
|
while ((remain >= partition->bytesPerCluster) && flagNoError) {
|
||||||
uint32_t chunkEnd;
|
uint32_t chunkEnd;
|
||||||
uint32_t nextChunkStart = position.cluster;
|
uint32_t nextChunkStart = position.cluster;
|
||||||
size_t chunkSize = 0;
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
chunkEnd = nextChunkStart;
|
chunkEnd = nextChunkStart;
|
||||||
|
Loading…
Reference in New Issue
Block a user