Exemple #1
0
        /// convert wide char string to multibyte string
        bool WCSToMBS(behaviac::string& resultString, const behaviac::wstring& wstr, const char* locale)
        {
            BEHAVIAC_UNUSED_VAR(resultString);
            BEHAVIAC_UNUSED_VAR(wstr);
            BEHAVIAC_UNUSED_VAR(locale);

            bool ret = false;

#if BEHAVIAC_COMPILER_MSVC
            const int cp = (strcmp(locale, LOCALE_CN_UTF8) == 0) ? CP_UTF8 : CP_ACP;
            const int dwNum = WideCharToMultiByte(cp, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);
            char* buffer = (char*)BEHAVIAC_MALLOC_WITHTAG(dwNum * 2 + 2, "WCSToMBS");

            if (buffer)
            {
                WideCharToMultiByte(cp, 0, wstr.c_str(), -1, buffer, dwNum, NULL, NULL);

                resultString = buffer;
                BEHAVIAC_FREE(buffer);

                ret = true;
            }

#else
            uint32_t dwNum = (wstr.size() + 1) * 4;
            char* buffer = (char*)BEHAVIAC_MALLOC_WITHTAG(dwNum, "WCSToMBS");

            if (buffer)
            {
                //remember it to restore it later
                char* currrentLocale = setlocale(LC_ALL, 0);

                char* loc = setlocale(LC_ALL, locale);

                if (loc)
                {
                    wcstombs(buffer, wstr.c_str(), dwNum);
                    ret = true;
                }

                //restore
                setlocale(LC_ALL, currrentLocale);

                resultString = buffer;
                BEHAVIAC_FREE(buffer);
            }

#endif//#if BEHAVIAC_COMPILER_MSVC

            return ret;
        }
Exemple #2
0
	char* LoadTextFileAsBuffer(const char* fileName)
	{
		char* returnedBuffer = NULL;
		IFile* fileHandle = behaviac::CFileManager::GetInstance()->FileOpen(fileName, CFileSystem::EOpenAccess_Read);

		if (fileHandle)
		{
			uint32_t fileSize = (uint32_t)fileHandle->GetSize();
			char* fileBuffer = (char*)BEHAVIAC_MALLOC_WITHTAG(fileSize + 1, "TextFileBuffer");

			if (fileHandle->Read(fileBuffer, fileSize) == fileSize)
			{
				fileBuffer[fileSize] = '\0';
				returnedBuffer = fileBuffer;

			}
			else
			{
				BEHAVIAC_ASSERT(0, "Fail to read the text file : %s\n", fileName);
			}

			behaviac::CFileManager::GetInstance()->FileClose(fileHandle);

		}
		else
		{
			BEHAVIAC_ASSERT(0, "Fail to open the text file : %s\n", fileName);
		}

		return returnedBuffer;
	}
Exemple #3
0
 char* MakeStringName1(const char* aT1, const char* aT2) {
     size_t size = strlen(aT1) + strlen(aT2);
     char* str = (char*)BEHAVIAC_MALLOC_WITHTAG(size + 1, "CRTTIBase");
     string_cpy(str, aT1);
     string_cat(str, aT2);
     return str;
 }
Exemple #4
0
//! Parse xml from null terminated buffer.
XmlNodeRef XmlParser::parseBuffer(const char* buffer, const char* rootNodeName)
{
    size_t bufLen = strlen(buffer);
    char* temp = (char*)BEHAVIAC_MALLOC_WITHTAG(bufLen + 1, "XmlParserImp::parse");
    memcpy(temp, buffer, bufLen);
    BEHAVIAC_ASSERT(temp[bufLen] == '\0');
    XmlNodeRef result = this->parseBuffer(temp, (int)bufLen, rootNodeName);
    BEHAVIAC_FREE(temp);
    return result;
}
Exemple #5
0
XmlNodeRef XmlParser::parse(behaviac::IFile* file, const char* rootNodeName, const char* suffix, bool handleError)
{
    BEHAVIAC_UNUSED_VAR(suffix);
    BEHAVIAC_UNUSED_VAR(handleError);

    m_errorString.clear();
    XmlParserImp xml;

    if (file)
    {
        int iSize = (int)file->GetSize() - (int)file->Seek(0, behaviac::CFileSystem::ESeekMoveMode_Cur);

        if (iSize != 0)
        {
            static const int32_t ReadBlockSize = 64 * 1024;
            char* buf = (char*)BEHAVIAC_MALLOC_WITHTAG(ReadBlockSize, "XML");
            XmlNodeRef ref;

            for (int32_t i = 0; i <= iSize / (ReadBlockSize); ++i)
            {
                int32_t bufSize = file->Read(buf, ReadBlockSize);
                {
                    buf[bufSize] = '\0';
                    ref = xml.parse(buf, bufSize, rootNodeName, m_errorString, i == iSize / (ReadBlockSize));
                }
            }

            BEHAVIAC_FREE(buf);

            if (handleError && !m_errorString.empty())
            {
                BEHAVIAC_LOGWARNING("Error while parsing file\n\n%s", m_errorString.c_str());
            }

            return ref;

        }
        else
        {
            return XmlNodeRef();
        }
    }
    else
    {
        BEHAVIAC_ASSERT(0, "XmlParse(behaviac::IFile*) - Invalid file\n");
        return XmlNodeRef();
    }
}
Exemple #6
0
	void CPathID::SetContentPrivate(const char* content)
	{
		if (content == NULL || content[0] == '\0')
		{
			m_value = InvalidID;
#if STRINGID_USESTRINGCONTENT
			m_content = NULL;
#endif

		}
		else
		{
			m_value = CRC32::CalcCRCNoCase(content);
		}

#if STRINGID_USESTRINGCONTENT
		behaviac::Mutex s_cs;
		behaviac::ScopedLock lock(s_cs);
		StringIdDictionary& dictionary = GetDictionary();
		StringIdDictionary::iterator it = dictionary.find(m_value);

		if (it != dictionary.end())
		{
			if (string_icmp(content, (*it).second))
			{
				BEHAVIAC_ASSERT(0, "There is a conflict between two PathID for the CRC 0x%08X.\n%s\n%s\n\nThe result of that is unpredictable but will probably crash.", m_value, content, (*it).second);
			}

			m_content = (*it).second;

		}
		else
		{
			uint32_t len = strlen(content);
			char* str = (char*)BEHAVIAC_MALLOC_WITHTAG(len + 1, "PathID");
			string_cpy(str, content);
			dictionary[m_value] = str;
			m_content = str;
		}

#endif
	}