//----------------------------------------------------------------------------// void DefaultResourceProvider::loadRawDataContainer(const String& filename, RawDataContainer& output, const String& resourceGroup) { if (filename.empty()) CEGUI_THROW(InvalidRequestException("DefaultResourceProvider::load: " "Filename supplied for data loading must be valid")); const String final_filename(getFinalFilename(filename, resourceGroup)); #if defined(__WIN32__) || defined(_WIN32) FILE* file = _wfopen(Utf8ToUtf16(final_filename.c_str()).c_str(), L"rb"); #else FILE* file = fopen(final_filename.c_str(), "rb"); #endif if (file == 0) CEGUI_THROW(InvalidRequestException("DefaultResourceProvider::load: " + final_filename + " does not exist")); fseek(file, 0, SEEK_END); const long size = ftell(file); fseek(file, 0, SEEK_SET); unsigned char* const buffer = new unsigned char[size]; const size_t size_read = fread(buffer, sizeof(char), size, file); fclose(file); if (size_read != size) { delete[] buffer; CEGUI_THROW(GenericException( "DefaultResourceProvider::loadRawDataContainer: " "A problem occurred while reading file: " + final_filename)); } output.setData(buffer); output.setSize(size); }
WString Utf8ToUtf16(const char* str) { return Utf8ToUtf16(str ? String(str) : String()); }
//----------------------------------------------------------------------------// size_t DefaultResourceProvider::getResourceGroupFileNames( std::vector<String>& out_vec, const String& file_pattern, const String& resource_group) { // look-up resource group name ResourceGroupMap::const_iterator iter = d_resourceGroups.find(resource_group.empty() ? d_defaultResourceGroup : resource_group); // get directory that's set for the resource group const String dir_name( iter != d_resourceGroups.end() ? (*iter).second : "./"); size_t entries = 0; // Win32 code. #if defined(__WIN32__) || defined(_WIN32) intptr_t f; struct _wfinddata_t fd; if ((f = _wfindfirst(Utf8ToUtf16((dir_name + file_pattern).c_str()).c_str(), &fd)) != -1) { do { if ((fd.attrib & _A_SUBDIR)) continue; out_vec.push_back(Utf16ToString(fd.name)); ++entries; } while (_wfindnext(f, &fd) == 0); _findclose(f); } // Everybody else #else DIR* dirp; if ((dirp = opendir(dir_name.c_str()))) { struct dirent* dp; while ((dp = readdir(dirp))) { const String filename(dir_name + dp->d_name); struct stat s; if ((stat(filename.c_str(), &s) == 0) && S_ISREG(s.st_mode) && (fnmatch(file_pattern.c_str(), dp->d_name, 0) == 0)) { out_vec.push_back(dp->d_name); ++entries; } } closedir(dirp); } #endif return entries; }
std::wstring Utf8ToUtf16( const std::string& sSrc ) { return Utf8ToUtf16( sSrc.c_str(), (_U32)( sSrc.size() ) ); }