mirror of https://github.com/xemu-project/xemu.git
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>
This commit is contained in:
parent
b881cf00c9
commit
21b25a0e46
|
@ -1408,7 +1408,9 @@ read_cluster_directory:
|
||||||
|
|
||||||
assert(s->current_fd);
|
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)
|
if(lseek(s->current_fd, offset, SEEK_SET)!=offset)
|
||||||
return -3;
|
return -3;
|
||||||
s->cluster=s->cluster_buffer;
|
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) {
|
(mapping->mode & MODE_DIRECTORY) == 0) {
|
||||||
|
|
||||||
/* was modified in qcow */
|
/* was modified in qcow */
|
||||||
if (offset != mapping->info.file.offset + s->cluster_size
|
if (offset != s->cluster_size
|
||||||
* (cluster_num - mapping->begin)) {
|
* ((cluster_num - mapping->begin)
|
||||||
|
+ mapping->info.file.offset)) {
|
||||||
/* offset of this cluster in file chain has changed */
|
/* offset of this cluster in file chain has changed */
|
||||||
abort();
|
abort();
|
||||||
copy_it = 1;
|
copy_it = 1;
|
||||||
|
@ -2404,7 +2407,7 @@ static int commit_mappings(BDRVVVFATState* s,
|
||||||
(mapping->end - mapping->begin);
|
(mapping->end - mapping->begin);
|
||||||
} else
|
} else
|
||||||
next_mapping->info.file.offset = mapping->info.file.offset +
|
next_mapping->info.file.offset = mapping->info.file.offset +
|
||||||
mapping->end - mapping->begin;
|
(mapping->end - mapping->begin);
|
||||||
|
|
||||||
mapping = next_mapping;
|
mapping = next_mapping;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue