diff options
-rw-r--r-- | fs/fat/fat_write.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index c9ecee588ae..53f3a5838f5 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -824,15 +824,7 @@ static int new_dir_table(fat_itr *itr) int dir_oldclust = itr->clust; unsigned int bytesperclust = mydata->clust_size * mydata->sect_size; - if (mydata->fatsize == 32) { - dir_newclust = find_empty_cluster(mydata); - } else { - dir_newclust = itr->clust + 1; - if (dir_newclust > 1) { - printf("error: fail to get empty clust for directory entry\n"); - return -1; - } - } + dir_newclust = find_empty_cluster(mydata); /* * Flush before updating FAT to ensure valid directory structure @@ -844,10 +836,13 @@ static int new_dir_table(fat_itr *itr) if (flush_dir(itr)) return -EIO; - if (mydata->fatsize == 32) { - set_fatent_value(mydata, dir_oldclust, dir_newclust); + set_fatent_value(mydata, dir_oldclust, dir_newclust); + if (mydata->fatsize == 32) set_fatent_value(mydata, dir_newclust, 0xffffff8); - } + else if (mydata->fatsize == 16) + set_fatent_value(mydata, dir_newclust, 0xfff8); + else if (mydata->fatsize == 12) + set_fatent_value(mydata, dir_newclust, 0xff8); if (flush_dirty_fat_buffer(mydata) < 0) return -EIO; |