unsigned char* HelperFunc::getFileData(const char* pszFileName, const char* pszMode, unsigned long * pSize)
{
    ssize_t size;
    unsigned char* buf = FileUtils::getInstance()->getFileData(pszFileName, pszMode, &size);
    if (NULL==buf || size<1) return NULL;

#ifdef LUASTACK_USED_FOR_QUICK_COCOS2DX
    LuaStack* stack = LuaEngine::getInstance()->getLuaStack();
    if (NULL==stack) {
        return NULL;
    }
    int xxteaKeyLen = 0;
    const char *xxteaKey = stack->getXXTEAKey(&xxteaKeyLen);
    int xxteaSignLen = 0;
    const char *xxteaSign = stack->getXXTEASign(&xxteaSignLen);
    unsigned char* buffer = NULL;
    if (xxteaKey && xxteaSign) {
        bool isXXTEA = true;
        for (int i = 0; isXXTEA && i<xxteaSignLen && i<size; ++i) {
            isXXTEA = buf[i] == xxteaSign[i];
        }

        if (isXXTEA) { // decrypt XXTEA
            xxtea_long len = 0;
            buffer = xxtea_decrypt(
                                   buf + xxteaSignLen,
                                   (xxtea_long)size - (xxtea_long)xxteaSignLen,
                                   (unsigned char*)xxteaKey,
                                   (xxtea_long)xxteaKeyLen,
                                   &len);
            delete []buf;
            buf = NULL;
            size = len;
        } else {
            buffer = buf;
        }
    }
    else {
        buffer = buf;
    }


    if (pSize) *pSize = size;
    return buffer;
#else
    if (pSize) *pSize = size;
    return buf;
#endif
}