free_alloc_chain() bugfix
parent
ebbcc9dd44
commit
416f0e372e
|
@ -423,6 +423,8 @@ int fs_truncate(int fildes, off_t length)
|
||||||
fat_idx = fat->table[fat_idx];
|
fat_idx = fat->table[fat_idx];
|
||||||
free_alloc_chain(fat_idx);
|
free_alloc_chain(fat_idx);
|
||||||
fat->table[eof_idx] = FAT_EOF;
|
fat->table[eof_idx] = FAT_EOF;
|
||||||
|
memset(disk + eof_idx * BLOCK_SIZE + length % BLOCK_SIZE, 0,
|
||||||
|
BLOCK_SIZE - (length % BLOCK_SIZE));
|
||||||
descriptors[idx].attr->size = length;
|
descriptors[idx].attr->size = length;
|
||||||
|
|
||||||
// ptr to final byte of truncated file
|
// ptr to final byte of truncated file
|
||||||
|
@ -534,13 +536,16 @@ int free_alloc_chain(int head)
|
||||||
memset(disk + head * BLOCK_SIZE, 0, BLOCK_SIZE);
|
memset(disk + head * BLOCK_SIZE, 0, BLOCK_SIZE);
|
||||||
|
|
||||||
/* either unused or probably hit the end of the chain */
|
/* either unused or probably hit the end of the chain */
|
||||||
if (idx == FAT_UNUSED || idx == FAT_EOF)
|
if (idx == FAT_UNUSED)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fat->table[head] = FAT_UNUSED;
|
fat->table[head] = FAT_UNUSED;
|
||||||
|
if (idx != FAT_EOF)
|
||||||
return free_alloc_chain(idx);
|
return free_alloc_chain(idx);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int find_avail_alloc_entry()
|
int find_avail_alloc_entry()
|
||||||
|
|
Loading…
Reference in New Issue