diff options
| author | Amjad Alsharafi <amjadsharafi10@gmail.com> | 2024-07-20 18:13:31 +0800 |
|---|---|---|
| committer | Kevin Wolf <kwolf@redhat.com> | 2024-08-06 20:12:39 +0200 |
| commit | 21b25a0e466a5bba0a45600bb8100ab564202ed1 (patch) | |
| tree | ea88db4a76e7a523b9211383fdec4aad8139a0c4 | |
| parent | b881cf00c99e03bc8a3648581f97736ff275b18b (diff) | |
| download | focaccia-qemu-21b25a0e466a5bba0a45600bb8100ab564202ed1.tar.gz focaccia-qemu-21b25a0e466a5bba0a45600bb8100ab564202ed1.zip | |
vvfat: Fix usage of `info.file.offset`
The field is marked as "the offset in the file (in clusters)", but it was being used like this `cluster_size*(nums)+mapping->info.file.offset`, which is incorrect. Signed-off-by: Amjad Alsharafi <amjadsharafi10@gmail.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Message-ID: <72f19a7903886dda1aa78bcae0e17702ee939262.1721470238.git.amjadsharafi10@gmail.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| -rw-r--r-- | block/vvfat.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/block/vvfat.c b/block/vvfat.c index a67cfa823b..cfde468c2e 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -1408,7 +1408,9 @@ read_cluster_directory: assert(s->current_fd); - offset=s->cluster_size*(cluster_num-s->current_mapping->begin)+s->current_mapping->info.file.offset; + offset = s->cluster_size * + ((cluster_num - s->current_mapping->begin) + + s->current_mapping->info.file.offset); if(lseek(s->current_fd, offset, SEEK_SET)!=offset) return -3; s->cluster=s->cluster_buffer; @@ -1929,8 +1931,9 @@ get_cluster_count_for_direntry(BDRVVVFATState* s, direntry_t* direntry, const ch (mapping->mode & MODE_DIRECTORY) == 0) { /* was modified in qcow */ - if (offset != mapping->info.file.offset + s->cluster_size - * (cluster_num - mapping->begin)) { + if (offset != s->cluster_size + * ((cluster_num - mapping->begin) + + mapping->info.file.offset)) { /* offset of this cluster in file chain has changed */ abort(); copy_it = 1; @@ -2404,7 +2407,7 @@ static int commit_mappings(BDRVVVFATState* s, (mapping->end - mapping->begin); } else next_mapping->info.file.offset = mapping->info.file.offset + - mapping->end - mapping->begin; + (mapping->end - mapping->begin); mapping = next_mapping; } |