I tested it (code to copy a file below, file was > 4
GB) and it works.

I'm using Gentoo 2006.0, Linux 2.6.15.1, ReiserFS 3
and wine 0.9.15.

Can you find out whether the broken code is using
KERNEL32, NTDLL, MSVCRT streams or MSVCRT POSIX-style
open()/read() etc.?

#include <windows.h>
#include <stdio.h>

int main(int argc, char **argv)
{
        HANDLE inputFile = INVALID_HANDLE_VALUE, outputFile =
INVALID_HANDLE_VALUE;
        const int bufferSize = 8*1024;
        char buffer[bufferSize];
        DWORD bytesRead;
        BOOL ok;

        if (argc < 3)
        {
                fprintf(stderr, "Usage: %s source destination\n",
argv[0]);
                return 1;
        }


        inputFile = CreateFile(argv[1], GENERIC_READ,
FILE_SHARE_READ, NULL,
                OPEN_EXISTING, 0, NULL);
        if (inputFile == INVALID_HANDLE_VALUE)
        {
                fprintf(stderr, "Error opening %s\n", argv[1]);
                goto done;
        }

        outputFile = CreateFile(argv[2], GENERIC_WRITE, 0,
NULL,
                CREATE_ALWAYS, 0, NULL);
        if (outputFile == INVALID_HANDLE_VALUE)
        {
                fprintf(stderr, "Error opening %s\n", argv[2]);
                goto done;
        }

        ok = ReadFile(inputFile, buffer, bufferSize,
&bytesRead, NULL);
        if (!ok)
        {
                fprintf(stderr, "Error reading file\n");
                goto done;
        }
        while (bytesRead > 0)
        {
                DWORD bytesWritten = 0, bytesWrittenNow;
                do
                {
                        ok = WriteFile(outputFile, buffer, bytesRead,
&bytesWrittenNow,
                                NULL);
                        if (!ok)
                        {
                                fprintf(stderr, "Error writing file\n");
                                goto done;
                        }
                        bytesWritten += bytesWrittenNow;
                } while (bytesWritten < bytesRead);

                ok = ReadFile(inputFile, buffer, bufferSize,
&bytesRead, NULL);
                if (!ok)
                {
                        fprintf(stderr, "Error reading file\n");
                        goto done;
                }
        };

done:
        if (inputFile != INVALID_HANDLE_VALUE)
                CloseHandle(inputFile);
        if (outputFile != INVALID_HANDLE_VALUE)
                CloseHandle(outputFile);
        return 0;
}




--- John Willis <[EMAIL PROTECTED]> wrote:

> Damjan,
> 
> Linux kernel:     2.4.21-20.ELsmp
> Filesystem:        ext3
> 
> Thanks for looking into this for me,
> 
> John
> 
> ----- Original Message ----- 
> From: "Damjan Jovanovic" <[EMAIL PROTECTED]>
> To: "John Willis" <[EMAIL PROTECTED]>;
> <wine-devel@winehq.org>
> Sent: Sunday, June 25, 2006 11:31 PM
> Subject: Re: Very large files
> 
> 
> > 
> > 
> > --- John Willis <[EMAIL PROTECTED]> wrote:
> > 
> >> Howdy,
> >> 
> >> I have a large VS 6.0 C++ program and I'm running
> it
> >> under WINE under Redhat Linux. 
> >> Everything works fine, but it doesn't handle file
> >> sizes greater than 4gb like it can running 
> >> directly under Windows XP. 
> >> I've tweaked everything that I can find that
> seems
> >> to deal with file sizes. 
> > 
> > How do you access the file? With stdio streams
> > (fopen(), fread(), ...), MSVCRT's open()/read(),
> or
> > with KERNEL32's CreateFile(), ReadFile(), ... ?
> > 
> >> Is there a problem with WINE itself handling very
> >> large file sizes? 
> > 
> > Which version of the Linux kernel and which
> filesystem
> > are you using?
> > 
> > I'll run some tests at home and see whether it
> works
> > for me.
> > 
> >> Thanks in advance,
> >> John> 
> >> 
> > 
> > 
> > __________________________________________________
> > Do You Yahoo!?
> > Tired of spam?  Yahoo! Mail has the best spam
> protection around 
> > http://mail.yahoo.com
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


Reply via email to