Corrupted file problem Wine20040613,20040505 with Xilinx XST 6.2i
Rein Klazes
rklazes at xs4all.nl
Tue Jun 15 05:21:30 CDT 2004
On Tue, 15 Jun 2004 11:03:57 +0200, you wrote:
> [...]
> switch(create)
> {
> case FILE_CREATE: flags = O_CREAT | O_EXCL; break;
> case FILE_OVERWRITE_IF: /* FIXME: the difference is whether we trash existing attr or not */
> case FILE_SUPERSEDE: flags = O_CREAT | O_TRUNC; break;
> case FILE_OPEN: flags = 0; break;
>
> case FILE_OPEN_IF: flags = O_CREAT | O_TRUNC; break;
> ^^^^^^^^^ CHANGED here
>
> case FILE_OVERWRITE: flags = O_TRUNC; break;
> default: set_error( STATUS_INVALID_PARAMETER ); goto error;
> }
>
>
> =>> Now it works ;) !?!?
>
> Well - I know that in fact I don't know really what I did (that's life)
> ... perhaps I did break something else now.
Indeed, I do not think this is correct, see below.
>
> [ ... lots of debug output ...]
> trace:file:CreateFileW L"xst/work/hdllib.ref" GENERIC_WRITE FILE_SHARE_READ FILE_SHARE_WRITE OPEN
> _ALWAYS attributes 0x80
Your program specifies OPEN_ALWAYS as one of the flags for CreateFile. I
am quite sure that does not truncate an existing file.
You should look for other possibilities in the log. Perhaps:
- it calls SetEndOfFile() or similar function to truncate the file;
- It set the file pointer to the beginning and writes from there;
- it deletes the file before opening it (so it will be created anew).
and something goes wrong there.
I do not know what debug message flags you used,
WINEDEBUG=+relay,+file,+ntdll should be enough.
Do use the latest wine, this is an area where lots of changes where made
recently.
If you want us to look at the log, open a bug report in bugs.winehq.org
and create an attachment from your (bzip2'ed) log.
Rein.
--
Rein Klazes
rklazes at xs4all.nl
More information about the wine-users
mailing list