Beispiel #1
0
int DizList::GetDizPosEx(const string& Name, const string& ShortName, int *TextPos)
{
	int DizPos=GetDizPos(Name,TextPos);

	if (DizPos==-1)
		DizPos=GetDizPos(ShortName,TextPos);

	//если файл описаний был в OEM/ANSI то имена файлов могут не совпадать с юникодными
	if (DizPos==-1 && !IsUnicodeOrUtfCodePage(OrigCodePage) && OrigCodePage!=CP_DEFAULT)
	{
		size_t len = Name.GetLength();
		char *tmp = (char *)xf_realloc_nomove(AnsiBuf, len+1);

		if (!tmp)
			return -1;

		AnsiBuf = tmp;
		WideCharToMultiByte(OrigCodePage, 0, Name, static_cast<int>(len), AnsiBuf, static_cast<int>(len), nullptr, nullptr);
		AnsiBuf[len]=0;
		string strRecoded(AnsiBuf, OrigCodePage);

		if (strRecoded==Name)
			return -1;

		return GetDizPos(strRecoded,TextPos);
	}

	return DizPos;
}
Beispiel #2
0
DizList::desc_map::iterator DizList::Find(const string& Name, const string& ShortName)
{
	auto i = DizData.find(Name);
	if(i == DizData.end())
		i = DizData.find(ShortName);

	//если файл описаний был в OEM/ANSI то имена файлов могут не совпадать с юникодными
	if (i == DizData.end() && !IsUnicodeOrUtfCodePage(OrigCodePage) && OrigCodePage!=CP_DEFAULT)
	{
		const auto tmp = unicode::to(OrigCodePage, Name.data(), Name.size());
		const auto strRecoded = wide_n(tmp.data(), tmp.size(), OrigCodePage);

		if (strRecoded==Name)
			return DizData.end();

		return DizData.find(strRecoded);
	}

	return i;
}