file.c

来自「Wine-20031016」· C语言 代码 · 共 953 行 · 第 1/3 页

C
953
字号
    {        ok(0,"couldn't create file \"%s\" (err=%ld)",filename,GetLastError());        return;    }    for (i = 0; i < 400; i++)    {        ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains" );    }    ok( HFILE_ERROR != _llseek( filehandle, 400 * strlen( sillytext ), FILE_CURRENT ), "should be able to seek" );    ok( HFILE_ERROR != _llseek( filehandle, 27 + 35 * strlen( sillytext ), FILE_BEGIN ), "should be able to seek" );    bytes_read = _hread( filehandle, buffer, 1);    ok( 1 == bytes_read, "file read size error" );    ok( buffer[0] == sillytext[27], "_llseek error, it got lost seeking" );    ok( HFILE_ERROR != _llseek( filehandle, -400 * strlen( sillytext ), FILE_END ), "should be able to seek" );    bytes_read = _hread( filehandle, buffer, 1);    ok( 1 == bytes_read, "file read size error" );    ok( buffer[0] == sillytext[0], "_llseek error, it got lost seeking" );    ok( HFILE_ERROR != _llseek( filehandle, 1000000, FILE_END ), "should be able to seek past file; poor, poor Windows programmers" );    ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );    ok( DeleteFileA( filename ) != 0, "DeleteFile failed (%ld)", GetLastError(  ) );}static void test__llopen( void ){    HFILE filehandle;    UINT bytes_read;    char buffer[10000];    filehandle = _lcreat( filename, 0 );    if (filehandle == HFILE_ERROR)    {        ok(0,"couldn't create file \"%s\" (err=%ld)",filename,GetLastError());        return;    }    ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains" );    ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );    filehandle = _lopen( filename, OF_READ );    ok( HFILE_ERROR == _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite shouldn't be able to write!" );    bytes_read = _hread( filehandle, buffer, strlen( sillytext ) );    ok( strlen( sillytext )  == bytes_read, "file read size error" );    ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );    filehandle = _lopen( filename, OF_READWRITE );    bytes_read = _hread( filehandle, buffer, 2 * strlen( sillytext ) );    ok( strlen( sillytext )  == bytes_read, "file read size error" );    ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite should write just fine" );    ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );    filehandle = _lopen( filename, OF_WRITE );    ok( HFILE_ERROR == _hread( filehandle, buffer, 1 ), "you should only be able to write this file" );    ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite should write just fine" );    ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );    ok( DeleteFileA( filename ) != 0, "DeleteFile failed (%ld)", GetLastError(  ) );    /* TODO - add tests for the SHARE modes  -  use two processes to pull this one off */}static void test__lread( void ){    HFILE filehandle;    char buffer[10000];    long bytes_read;    UINT bytes_wanted;    UINT i;    filehandle = _lcreat( filename, 0 );    if (filehandle == HFILE_ERROR)    {        ok(0,"couldn't create file \"%s\" (err=%ld)",filename,GetLastError());        return;    }    ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains" );    ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );    filehandle = _lopen( filename, OF_READ );    ok( HFILE_ERROR != filehandle, "couldn't open file \"%s\" again (err=%ld)", filename, GetLastError());    bytes_read = _lread( filehandle, buffer, 2 * strlen( sillytext ) );    ok( lstrlenA( sillytext ) == bytes_read, "file read size error" );    for (bytes_wanted = 0; bytes_wanted < strlen( sillytext ); bytes_wanted++)    {        ok( 0 == _llseek( filehandle, 0, FILE_BEGIN ), "_llseek complains" );        ok( _lread( filehandle, buffer, bytes_wanted ) == bytes_wanted, "erratic _hread return value" );        for (i = 0; i < bytes_wanted; i++)        {            ok( buffer[i] == sillytext[i], "that's not what's written" );        }    }    ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );    ok( DeleteFileA( filename ) != 0, "DeleteFile failed (%ld)", GetLastError(  ) );}static void test__lwrite( void ){    HFILE filehandle;    char buffer[10000];    long bytes_read;    long bytes_written;    long blocks;    long i;    char *contents;    HLOCAL memory_object;    char checksum[1];    filehandle = _lcreat( filename, 0 );    if (filehandle == HFILE_ERROR)    {        ok(0,"couldn't create file \"%s\" (err=%ld)",filename,GetLastError());        return;    }    ok( HFILE_ERROR != _lwrite( filehandle, "", 0 ), "_hwrite complains" );    ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );    filehandle = _lopen( filename, OF_READ );    bytes_read = _hread( filehandle, buffer, 1);    ok( 0 == bytes_read, "file read size error" );    ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );    filehandle = _lopen( filename, OF_READWRITE );    bytes_written = 0;    checksum[0] = '\0';    srand( (unsigned)time( NULL ) );    for (blocks = 0; blocks < 100; blocks++)    {        for (i = 0; i < (long)sizeof( buffer ); i++)        {            buffer[i] = rand(  );            checksum[0] = checksum[0] + buffer[i];        }        ok( HFILE_ERROR != _lwrite( filehandle, buffer, sizeof( buffer ) ), "_hwrite complains" );        bytes_written = bytes_written + sizeof( buffer );    }    ok( HFILE_ERROR != _lwrite( filehandle, checksum, 1 ), "_hwrite complains" );    bytes_written++;    ok( HFILE_ERROR != _lclose( filehandle ), "_lclose complains" );    memory_object = LocalAlloc( LPTR, bytes_written );    ok( 0 != memory_object, "LocalAlloc fails, could be out of memory" );    contents = LocalLock( memory_object );    filehandle = _lopen( filename, OF_READ );    contents = LocalLock( memory_object );    ok( NULL != contents, "LocalLock whines" );    ok( bytes_written == _hread( filehandle, contents, bytes_written), "read length differ from write length" );    checksum[0] = '\0';    i = 0;    do    {        checksum[0] += contents[i];        i++;    }    while (i < bytes_written - 1);    ok( checksum[0] == contents[i], "stored checksum differ from computed checksum" );    ok( HFILE_ERROR != _lclose( filehandle ), "_lclose complains" );    ok( DeleteFileA( filename ) != 0, "DeleteFile failed (%ld)", GetLastError(  ) );}void test_CopyFileA(void){    char temp_path[MAX_PATH];    char source[MAX_PATH], dest[MAX_PATH];    static const char prefix[] = "pfx";    DWORD ret;    ret = GetTempPathA(MAX_PATH, temp_path);    ok(ret != 0, "GetTempPathA error %ld", GetLastError());    ok(ret < MAX_PATH, "temp path should fit into MAX_PATH");    ret = GetTempFileNameA(temp_path, prefix, 0, source);    ok(ret != 0, "GetTempFileNameA error %ld", GetLastError());    ret = GetTempFileNameA(temp_path, prefix, 0, dest);    ok(ret != 0, "GetTempFileNameA error %ld", GetLastError());    ret = CopyFileA(source, dest, TRUE);    ok(!ret && GetLastError() == ERROR_FILE_EXISTS,       "CopyFileA: unexpected error %ld\n", GetLastError());    ret = CopyFileA(source, dest, FALSE);    ok(ret,  "CopyFileA: error %ld\n", GetLastError());    ret = DeleteFileA(source);    ok(ret, "DeleteFileA: error %ld\n", GetLastError());    ret = DeleteFileA(dest);    ok(ret, "DeleteFileA: error %ld\n", GetLastError());}void test_CopyFileW(void){    WCHAR temp_path[MAX_PATH];    WCHAR source[MAX_PATH], dest[MAX_PATH];    static const WCHAR prefix[] = {'p','f','x',0};    DWORD ret;    ret = GetTempPathW(MAX_PATH, temp_path);    if (ret==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)        return;    ok(ret != 0, "GetTempPathW error %ld", GetLastError());    ok(ret < MAX_PATH, "temp path should fit into MAX_PATH");    ret = GetTempFileNameW(temp_path, prefix, 0, source);    ok(ret != 0, "GetTempFileNameW error %ld", GetLastError());    ret = GetTempFileNameW(temp_path, prefix, 0, dest);    ok(ret != 0, "GetTempFileNameW error %ld", GetLastError());    ret = CopyFileW(source, dest, TRUE);    ok(!ret && GetLastError() == ERROR_FILE_EXISTS,       "CopyFileW: unexpected error %ld\n", GetLastError());    ret = CopyFileW(source, dest, FALSE);    ok(ret,  "CopyFileW: error %ld\n", GetLastError());    ret = DeleteFileW(source);    ok(ret, "DeleteFileW: error %ld\n", GetLastError());    ret = DeleteFileW(dest);    ok(ret, "DeleteFileW: error %ld\n", GetLastError());}void test_CreateFileA(void){    HANDLE hFile;    char temp_path[MAX_PATH];    char filename[MAX_PATH];    static const char prefix[] = "pfx";    DWORD ret;    ret = GetTempPathA(MAX_PATH, temp_path);    ok(ret != 0, "GetTempPathA error %ld", GetLastError());    ok(ret < MAX_PATH, "temp path should fit into MAX_PATH");    ret = GetTempFileNameA(temp_path, prefix, 0, filename);    ok(ret != 0, "GetTempFileNameA error %ld", GetLastError());    hFile = CreateFileA(filename, GENERIC_READ, 0, NULL,                        CREATE_NEW, FILE_FLAG_RANDOM_ACCESS, 0);    ok(hFile == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_EXISTS,        "CREATE_NEW should fail if file exists and last error value should be ERROR_FILE_EXISTS");    ret = DeleteFileA(filename);    ok(ret, "DeleteFileA: error %ld\n", GetLastError());}void test_CreateFileW(void){    HANDLE hFile;    WCHAR temp_path[MAX_PATH];    WCHAR filename[MAX_PATH];    static const WCHAR prefix[] = {'p','f','x',0};    DWORD ret;    ret = GetTempPathW(MAX_PATH, temp_path);    if (ret==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)        return;    ok(ret != 0, "GetTempPathW error %ld", GetLastError());    ok(ret < MAX_PATH, "temp path should fit into MAX_PATH");    ret = GetTempFileNameW(temp_path, prefix, 0, filename);    ok(ret != 0, "GetTempFileNameW error %ld", GetLastError());    hFile = CreateFileW(filename, GENERIC_READ, 0, NULL,                        CREATE_NEW, FILE_FLAG_RANDOM_ACCESS, 0);    ok(hFile == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_EXISTS,        "CREATE_NEW should fail if file exists and last error value should be ERROR_FILE_EXISTS");    ret = DeleteFileW(filename);    ok(ret, "DeleteFileW: error %ld\n", GetLastError());}static void test_DeleteFileA( void ){    BOOL ret;    ret = DeleteFileA(NULL);    ok(!ret && (GetLastError() == ERROR_INVALID_PARAMETER ||                GetLastError() == ERROR_PATH_NOT_FOUND),       "DeleteFileA(NULL) returned ret=%d error=%ld",ret,GetLastError());    ret = DeleteFileA("");    ok(!ret && (GetLastError() == ERROR_PATH_NOT_FOUND ||                GetLastError() == ERROR_BAD_PATHNAME),       "DeleteFileA(\"\") returned ret=%d error=%ld",ret,GetLastError());}static void test_DeleteFileW( void )

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?