CFX_WideString CPDFDoc_Environment::JS_docGetFilePath() { if (!m_pInfo || !m_pInfo->m_pJsPlatform || !m_pInfo->m_pJsPlatform->Doc_getFilePath) { return L""; } const int nRequiredLen = m_pInfo->m_pJsPlatform->Doc_getFilePath( m_pInfo->m_pJsPlatform, nullptr, 0); if (nRequiredLen <= 0) return L""; nonstd::unique_ptr<char[]> pBuff(new char[nRequiredLen]); memset(pBuff.get(), 0, nRequiredLen); const int nActualLen = m_pInfo->m_pJsPlatform->Doc_getFilePath( m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen); if (nActualLen <= 0 || nActualLen > nRequiredLen) return L""; CFX_ByteString bsRet = CFX_ByteString(pBuff.get(), nActualLen); CFX_WideString wsRet = CFX_WideString::FromLocal(bsRet); return wsRet; }
int clSocketBase::ReadMessage(wxString& message, int timeout) { // send the length in string form to avoid binary / arch differences between remote and local machine char msglen[11]; memset(msglen, 0, sizeof(msglen)); size_t message_len(0); size_t bytesRead(0); int rc = Read((char*)msglen, sizeof(msglen) - 1, bytesRead, timeout); if(rc != kSuccess) { // timeout return rc; } // convert the string to int message_len = ::atoi(msglen); bytesRead = 0; std::unique_ptr<char> pBuff(new char[message_len]); // read the entire amount we need int bytesLeft = message_len; int totalRead = 0; while(bytesLeft > 0) { rc = Read(pBuff.get() + totalRead, bytesLeft, bytesRead, timeout); if(rc != kSuccess) { return rc; } else { bytesLeft -= bytesRead; totalRead += bytesRead; bytesRead = 0; } } message.assign(pBuff.get(), message_len); return kSuccess; }