virtual const unsigned char *GetDataForUrl(const WCHAR *url, size_t *len) { ScopedCritSec scope(&docAccess); ScopedMem<WCHAR> plainUrl(url::GetFullPath(url)); ScopedMem<char> urlUtf8(str::conv::ToUtf8(plainUrl)); data.Append(doc->GetData(urlUtf8, len)); return data.Last(); }
// Load and cache data for a given url inside CHM file. bool ChmEngineImpl::GetDataForUrl(const WCHAR *url, char **data, size_t *len) { ScopedMem<WCHAR> plainUrl(str::ToPlainUrl(url)); ChmCacheEntry *e = FindDataForUrl(plainUrl); if (!e) { e = new ChmCacheEntry(plainUrl); ScopedMem<char> urlUtf8(str::conv::ToUtf8(plainUrl)); e->data = (char *)doc->GetData(urlUtf8, &e->size); if (!e->data) { delete e; return false; } urlDataCache.Append(e); } *data = e->data; *len = e->size; return true; }
// Load and cache data for a given url inside CHM file. const unsigned char *ChmModel::GetDataForUrl(const WCHAR *url, size_t *len) { ScopedMem<WCHAR> plainUrl(url::GetFullPath(url)); ChmCacheEntry *e = FindDataForUrl(plainUrl); if (!e) { e = new ChmCacheEntry(Allocator::StrDup(&poolAlloc, plainUrl)); ScopedMem<char> urlUtf8(str::conv::ToUtf8(plainUrl)); e->data = doc->GetData(urlUtf8, &e->size); if (!e->data) { delete e; return NULL; } urlDataCache.Append(e); } if (len) *len = e->size; return e->data; }