TEST(TestRegExp, GetSubCount) { CRegExp regex; EXPECT_TRUE(regex.RegComp("^(Test)\\s*(.*)\\.")); EXPECT_EQ(0, regex.RegFind("Test string.")); EXPECT_EQ(2, regex.GetSubCount()); }
bool CDAVFile::Execute(const CURL& url) { CURL url2(url); ParseAndCorrectUrl(url2); CLog::Log(LOGDEBUG, "CDAVFile::Execute(%p) %s", (void*)this, m_url.c_str()); assert(!(!m_state->m_easyHandle ^ !m_state->m_multiHandle)); if( m_state->m_easyHandle == NULL ) g_curlInterface.easy_aquire(url2.GetProtocol().c_str(), url2.GetHostName().c_str(), &m_state->m_easyHandle, &m_state->m_multiHandle); // setup common curl options SetCommonOptions(m_state); SetRequestHeaders(m_state); lastResponseCode = m_state->Connect(m_bufferSize); if( lastResponseCode < 0 || lastResponseCode >= 400) return false; char* efurl; if (CURLE_OK == g_curlInterface.easy_getinfo(m_state->m_easyHandle, CURLINFO_EFFECTIVE_URL,&efurl) && efurl) m_url = efurl; if (lastResponseCode == 207) { std::string strResponse; ReadData(strResponse); CXBMCTinyXML davResponse; davResponse.Parse(strResponse); if (!davResponse.Parse(strResponse)) { CLog::Log(LOGERROR, "%s - Unable to process dav response (%s)", __FUNCTION__, m_url.c_str()); Close(); return false; } TiXmlNode *pChild; // Iterate over all responses for (pChild = davResponse.RootElement()->FirstChild(); pChild != 0; pChild = pChild->NextSibling()) { if (CDAVCommon::ValueWithoutNamespace(pChild, "response")) { std::string sRetCode = CDAVCommon::GetStatusTag(pChild->ToElement()); CRegExp rxCode; rxCode.RegComp("HTTP/1\\.1\\s(\\d+)\\s.*"); if (rxCode.RegFind(sRetCode) >= 0) { if (rxCode.GetSubCount()) { lastResponseCode = atoi(rxCode.GetMatch(1).c_str()); if( lastResponseCode < 0 || lastResponseCode >= 400) return false; } } } } } return true; }