void test_UnitFromPlatMmap() { unsigned int idx; plat_mmap m_mmap; size_t offset = 0; size_t csize; char *data_buf; char hard_copy[] = "ji3cp3vu3cj0 vup dj4up <E>"; int i; start_testcase( NULL, fd ); idx = plat_mmap_create(&m_mmap, TESTDATA, FLAG_ATTRIBUTE_READ); ok (idx == 28, "plat_mmap_create"); if (idx > 0) { csize = idx; data_buf = (char *) plat_mmap_set_view(&m_mmap, &offset, &csize); for (i = 0; i < 26; i++) { if (data_buf[i] != hard_copy[i]) break; } ok (i == 26, "plat_mmap_set_view"); } plat_mmap_close( &m_mmap ); }
void TerminateTree( ChewingData *pgdata ) { #ifdef USE_BINARY_DATA pgdata->static_data.tree = NULL; plat_mmap_close( &pgdata->static_data.tree_mmap ); #else free( pgdata->static_data.tree ); pgdata->static_data.tree = NULL; #endif }
static void TerminateTree() { #ifdef USE_BINARY_DATA plat_mmap_close( &tree_mmap ); #endif }
/* map a file into system meory, return the file size */ size_t plat_mmap_create( plat_mmap *handle, const char *file, int fileAccessAttr ) { LARGE_INTEGER sizet; /* check error(s) */ if ( ! handle ) return 0; handle->fd_map = NULL; handle->address = NULL; if ( FLAG_ATTRIBUTE_READ & fileAccessAttr ) { #ifdef _WIN32_WCE handle->fd_file = CreateFileForMappingA( file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); #else /* !_WIN32_WCE */ handle->fd_file = CreateFileA( file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY | FILE_FLAG_RANDOM_ACCESS, 0 ); #endif /* _WIN32_WCE */ if ( INVALID_HANDLE_VALUE == handle->fd_file ) return 0; sizet.LowPart = GetFileSize( handle->fd_file, (LPDWORD) &sizet.HighPart ); handle->fd_map = CreateFileMappingA( handle->fd_file, NULL, PAGE_READONLY, sizet.HighPart, sizet.LowPart, 0 ); } else { #ifdef _WIN32_WCE handle->fd_file = CreateFileForMappingA( file, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); #else /* !_WIN32_WCE */ handle->fd_file = CreateFileA( file, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); #endif /* _WIN32_WCE */ if ( INVALID_HANDLE_VALUE == handle->fd_file ) return 0; sizet.LowPart = 0; sizet.HighPart = 1; handle->fd_map = CreateFileMapping( handle->fd_file, NULL, PAGE_READWRITE, 0, sizet.LowPart, 0 ); sizet.LowPart = 1024 * 1024 * 1024; sizet.HighPart = 0; while ( ! handle->fd_map ) { DWORD error; handle->fd_map = CreateFileMapping( handle->fd_file, NULL, PAGE_READWRITE, 0, sizet.LowPart, 0 ); error = GetLastError(); if ( ERROR_NOT_ENOUGH_MEMORY == error || ERROR_DISK_FULL == error ) sizet.LowPart /= 2; else break; } } handle->fAccessAttr = fileAccessAttr; if ( FLAG_ATTRIBUTE_READ & fileAccessAttr || 16 * 1024 * 1024 <= sizet.LowPart ) { if ( handle->fd_map ) return (size_t) sizet.QuadPart; } plat_mmap_close( handle ); return 0; }