示例#1
0
文件: check_mem.c 项目: jdolan/quetoo
} END_TEST

START_TEST(check_Mem_CopyString) {
	char *test = Mem_CopyString("test");

	ck_assert(Mem_Size() == strlen(test) + 1);

	Mem_Free(test);

	ck_assert(Mem_Size() == 0);
} END_TEST
示例#2
0
文件: parse_ecp.c 项目: now/slackedit
BOOL ECP_GetString(LPTSTR *pszDst, LPTSTR pszSrc, BOOL bRecurse)
{
    LPTSTR psz;

    if (*pszDst == NULL)
    {
        psz = *pszDst = (LPTSTR)Mem_AllocStr(_tcslen(pszSrc) + SZ);
    }
    else
    {
        psz = *pszDst = (LPTSTR)Mem_ReAllocStr(*pszDst, _tcslen(*pszDst) + _tcslen(pszSrc) + SZ);
        ZeroMemory(psz + _tcslen(*pszDst), Mem_Size(*pszDst) - _tcslen(*pszDst));
    }

    if (pszSrc[0] == _T('\"') || bRecurse)
    {
        if (pszSrc[0] == _T('\"') && !bRecurse)
            pszSrc++;

        psz += _tcslen(*pszDst);

        while (*pszSrc != _T('\0'))
        {
            if (*pszSrc == _T('\\') && *(pszSrc + 1) == _T('\\'))
            {
                *(psz++) = *(++pszSrc);
                pszSrc++;
            }
            else if (*pszSrc == _T('\\') && *(pszSrc + 1) == _T('\"'))
            {
                *(psz++) = *(++pszSrc);
                pszSrc++;
            }
            else if (*pszSrc == _T('\\') && *(pszSrc + 1) == _T('n'))
            {
                *(psz++) = _T('\n');
                pszSrc += 2;
            }
            else if (*pszSrc == _T('\"'))
            {
                *pszDst = (LPTSTR)Mem_ReAllocStr(*pszDst, _tcslen(*pszDst) + SZ);

                return (TRUE);
            }
            else if (*pszSrc == _T('\r'))
            {
                *(psz++) = _T('\n');
                pszSrc++;
            }
            else
            {
                *(psz++) = *(pszSrc++);
            }
        }

        return (FALSE);
    }
    else
    {
        while (*pszSrc != _T('\0') && *pszSrc != _T(' ') && *pszSrc != _T('\t'))
        {
            if (*pszSrc == _T('\\') && *(pszSrc + 1) == _T('\\'))
            {
                *(psz++) = *(++pszSrc);
                pszSrc++;
            }
            else if (*pszSrc == _T('\\') && *(pszSrc + 1) == _T('\"'))
            {
                *(psz++) = *(++pszSrc);
                pszSrc++;
            }
            else if (*pszSrc == _T('\\') && *(pszSrc + 1) == _T('n'))
            {
                *(psz++) = _T('\n');
                pszSrc += 2;
            }
            else if (*pszSrc == _T('\r'))
            {
                *(psz++) = _T('\n');
                pszSrc++;
            }
            else
            {
                *(psz++) = *(pszSrc++);
            }
        }
    }

    *psz = _T('\0');
    *pszDst = (LPTSTR)Mem_ReAllocStr(*pszDst, _tcslen(*pszDst) + SZ);

    return (TRUE);
}