[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] block-vvfat RW patch
From: |
Roger Lathrop |
Subject: |
[Qemu-devel] block-vvfat RW patch |
Date: |
Mon, 4 Sep 2006 19:57:29 -0400 |
Attached patch fixes 3 issues I found while trying to write files from guest
to a vfat drive using this configuration:
Host: Windows XP (NTFS)
Guest: DOS 5 (yeah, really!)
Compiler: gcc version 3.4.2 (mingw-special)
Qemu Version: 0.8.2
Command line: qemu ....-hdb fat:rw:c:\dev\qemu\work...
Problem: Qemu would fault when copying files from guest to d:\
Changes:
1) Fixed assert macro for mingw. Original causes spurious faults when
there's a dangling else after the assert.
2) Added O_BINARY to open call in commit_one_file(). Without it, binary
files get LF-->CR/LF translations on Windows.
3) Changed sector2cluster to return a signed int, and added type casts to
force the division to be signed.
First 2 changes are straight forward and should be safe. 3'rd solved my
problem, but should be looked at by someone who understands vvfat better
than me. I've only tested on the above configuration.
The problem I saw was DOS writing to sectors less than s->faked_sectors. The
unsigned divide returned a large positive number, which would fault in this
bit of code in vvfat_write:
if (i >= 0)
s->used_clusters[i] |= USED_ALLOCATED;
This fix seems reasonable, since the callers of sector2cluster seem to
expect a signed result. I suppose an alternate fix would be to test for the
special case and always return -1. But I hate special cases ;-)
Patch is against 0.8.2, not current CVS, sorry. Doesn't appear to have been
fixed since 0.8.2
Good to have this working. Our app is an embedded system with really crude
(read, no TCP/IP) network support. Until now, getting log files off the
guest has been a pain. So, a big THANKS to whoever wrote block-vvfat,
despite the little buglets.
Roger
block-vvfat.c.patch
Description: Binary data
- [Qemu-devel] block-vvfat RW patch,
Roger Lathrop <=