VError CopyHelper::Copy(const PathBuffer& inSrc, const PathBuffer& inDst) { VError verr=DoInit(inSrc, inDst); if(verr==VE_OK && fSrcSize > 0) verr=DoCopy(); if(verr!=VE_OK) DoClean(inDst); return verr; }
/* ** A "local" function of main(). Handles a #messageType# message arrived on ** #sd# accompanied by #dataSize# bytes of data. */ static void ProcessRequest(Socket *sd, MessageType messageType, size_t dataSize) { char *contents; DataDescriptor contentsDescriptor = SIMPLE_DATA(CHAR_TYPE, 0); AutoFetchInfo *expandedAutoFetches; unsigned long expiration; DataDescriptor expirationDescriptor = SIMPLE_DATA(UNSIGNED_LONG_TYPE, 1); int i; struct state stateDesc; char *stateNames; DataDescriptor stateNamesDescriptor = SIMPLE_DATA(CHAR_TYPE, 0); switch(messageType) { case FETCH_STATE: if(!RecvData(*sd, &stateDesc, stateDescriptor, stateDescriptorLength, PktTimeOut(*sd))) { DROP_SOCKET(sd); ERROR("ProcessRequest: state receive failed\n"); return; } contents = (char *)malloc(stateDesc.rec_count * MAX_RECORD_SIZE); if(contents == NULL) { (void)SendMessage(*sd, MEMORY_FAILED, PktTimeOut(*sd)); ERROR("ProcessRequest: out of memory\n"); } else { if(ReadState(FileOfState(memoryDir, stateDesc.id), contents, stateDesc.rec_count, stateDesc.rec_count * MAX_RECORD_SIZE, stateDesc.seq_no, &stateDesc.time_out, &stateDesc.seq_no, &stateDesc.rec_count, &stateDesc.rec_size)) { if(stateDesc.rec_count > 0) { contentsDescriptor.repetitions = stateDesc.rec_size * stateDesc.rec_count; (void)SendMessageAndDatas(*sd, STATE_FETCHED, &stateDesc, stateDescriptor, stateDescriptorLength, contents, &contentsDescriptor, 1, PktTimeOut(*sd)); } else { (void)SendMessageAndData(*sd, STATE_FETCHED, &stateDesc, stateDescriptor, stateDescriptorLength, PktTimeOut(*sd)); } } else { (void)SendMessage(*sd, MEMORY_FAILED, PktTimeOut(*sd)); if(errno == EMFILE) { CheckConnections(); } } free(contents); } break; case STORE_STATE: if(!RecvData(*sd, &stateDesc, stateDescriptor, stateDescriptorLength, PktTimeOut(*sd))) { DROP_SOCKET(sd); ERROR("ProcessRequest: state receive failed\n"); return; } contentsDescriptor.repetitions = stateDesc.rec_size * stateDesc.rec_count; contents = (char *)malloc(contentsDescriptor.repetitions + 1); if(contents == NULL) { (void)SendMessage(*sd, MEMORY_FAILED, PktTimeOut(*sd)); ERROR("ProcessRequest: out of memory\n"); } else { contents[contentsDescriptor.repetitions] = '\0'; if(!RecvData(*sd, contents, &contentsDescriptor, 1, PktTimeOut(*sd))) { DROP_SOCKET(sd); ERROR("ProcessRequest: data receive failed\n"); } else { (void)SendMessage(*sd, KeepState(&memLogLocation, &stateDesc, contents, contentsDescriptor.repetitions) ? STATE_STORED : MEMORY_FAILED, PktTimeOut(*sd)); for(i = 0; i < autoFetchCount; i++) { if(strstr(autoFetches[i].stateNames, stateDesc.id) != NULL) { if(!SendMessageAndDatas(autoFetches[i].clientSock, STATE_FETCHED, &stateDesc, stateDescriptor, stateDescriptorLength, contents, &contentsDescriptor, 1, PktTimeOut(autoFetches[i].clientSock))) { DROP_SOCKET(&autoFetches[i].clientSock); free(autoFetches[i].stateNames); autoFetches[i] = autoFetches[--autoFetchCount]; } } } } free(contents); } break; case AUTOFETCH_BEGIN: stateNamesDescriptor.repetitions = dataSize; stateNames = (char *)malloc(dataSize); if(stateNames == NULL) { (void)SendMessage(*sd, MEMORY_FAILED, PktTimeOut(*sd)); DROP_SOCKET(sd); ERROR("ProcessRequest: out of memory\n"); } else if(!RecvData(*sd, stateNames, &stateNamesDescriptor, 1, PktTimeOut(*sd))) { (void)SendMessage(*sd, MEMORY_FAILED, PktTimeOut(*sd)); DROP_SOCKET(sd); free(stateNames); ERROR("ProcessRequest: data receive failed\n"); } else if(*stateNames == '\0') { free(stateNames); EndAutoFetch(*sd); (void)SendMessage(*sd, AUTOFETCH_ACK, PktTimeOut(*sd)); } else { for(i=0; (i < autoFetchCount) && (autoFetches[i].clientSock != *sd); i++) ; /* Nothing more to do. */ if(i == autoFetchCount) { expandedAutoFetches = REALLOC(autoFetches, (autoFetchCount + 1) * sizeof(AutoFetchInfo)); if(expandedAutoFetches == NULL) { (void)SendMessage(*sd, MEMORY_FAILED, PktTimeOut(*sd)); DROP_SOCKET(sd); ERROR("ProcessRequest: out of memory\n"); break; } autoFetches = expandedAutoFetches; autoFetches[i].clientSock = *sd; autoFetchCount++; } else { free(autoFetches[i].stateNames); } autoFetches[i].stateNames = stateNames; (void)SendMessage(*sd, AUTOFETCH_ACK, PktTimeOut(*sd)); } break; case MEMORY_CLEAN: if(!RecvData(*sd, &expiration, &expirationDescriptor, 1, PktTimeOut(*sd))) { DROP_SOCKET(sd); ERROR("ProcessRequest: data receive failed\n"); } else { (void)SendMessage(*sd, MEMORY_CLEANED, PktTimeOut(*sd)); (void)DoClean(expiration); } break; #ifdef WITH_NETLOGGER case MEMORY_LOGDEST: /* config message contains log location */ if(!RecvData(*sd, &memLogLocation, loglocationDescriptor, loglocationDescriptorLength, PktTimeOut(*sd))) { DROP_SOCKET(sd); ERROR("ProcessRequest: loglocation receive failed\n"); return; }else { (void)SendMessage(*sd, MEMORY_LOGDEST_ACK, PktTimeOut(*sd)); } LOG2("ProcessRequest: loglocation %d .%s.\n", memLogLocation.loc_type, memLogLocation.path); break; #endif /* WITH_NETLOGGER */ default: DROP_SOCKET(sd); ERROR1("ProcessRequest: unknown message %d\n", messageType); } }
void DiffSideBySidePanel::Diff() { wxFileName fnLeft(m_filePickerLeft->GetPath()); wxFileName fnRIght(m_filePickerRight->GetPath()); if(!fnLeft.Exists()) { ::wxMessageBox(wxString() << _("Left Side File:\n") << fnLeft.GetFullPath() << _(" does not exist!"), "CodeLite", wxICON_ERROR | wxCENTER | wxOK); return; } if(!fnRIght.Exists()) { ::wxMessageBox(wxString() << _("Right Side File:\n") << fnRIght.GetFullPath() << _(" does not exist!"), "CodeLite", wxICON_ERROR | wxCENTER | wxOK); return; } // Cleanup DoClean(); // Prepare the views PrepareViews(); // Prepare the diff clDTL d; d.Diff(m_filePickerLeft->GetPath(), m_filePickerRight->GetPath(), m_config.IsSingleViewMode() ? clDTL::kOnePane : clDTL::kTwoPanes); const clDTL::LineInfoVec_t& resultLeft = d.GetResultLeft(); const clDTL::LineInfoVec_t& resultRight = d.GetResultRight(); m_sequences = d.GetSequences(); if(m_sequences.empty()) { // Files are the same ! m_stcLeft->SetReadOnly(false); m_stcRight->SetReadOnly(false); m_stcLeft->LoadFile(fnLeft.GetFullPath()); m_stcRight->LoadFile(fnRIght.GetFullPath()); m_stcLeft->SetSavePoint(); m_stcRight->SetSavePoint(); m_stcLeft->SetReadOnly(true); m_stcRight->SetReadOnly(true); return; } m_cur_sequence = 0; // the first line of the sequence // Create 2 strings "left" and "right" wxString leftContent, rightContent; // The left pane is always the one with the deletions "-" for(size_t i = 0; i < resultLeft.size(); ++i) { if(resultLeft.at(i).m_type == clDTL::LINE_ADDED) { leftContent << resultLeft.at(i).m_line; m_leftGreenMarkers.push_back(i); } else if(resultLeft.at(i).m_type == clDTL::LINE_REMOVED) { leftContent << resultLeft.at(i).m_line; m_leftRedMarkers.push_back(i); } else if(resultLeft.at(i).m_type == clDTL::LINE_PLACEHOLDER) { // PLACEHOLDER leftContent << resultLeft.at(i).m_line; m_leftPlaceholdersMarkers.push_back(i); } else { // COMMON leftContent << resultLeft.at(i).m_line; } } // The right pane is always with the new additions "+" for(size_t i = 0; i < resultRight.size(); ++i) { if(resultRight.at(i).m_type == clDTL::LINE_REMOVED) { rightContent << resultRight.at(i).m_line; m_rightRedMarkers.push_back(i); } else if(resultRight.at(i).m_type == clDTL::LINE_ADDED) { rightContent << resultRight.at(i).m_line; m_rightGreenMarkers.push_back(i); } else if(resultRight.at(i).m_type == clDTL::LINE_PLACEHOLDER) { rightContent << resultRight.at(i).m_line; m_rightPlaceholdersMarkers.push_back(i); } else { // COMMON rightContent << resultRight.at(i).m_line; } } UpdateViews(leftContent, rightContent); m_stcLeft->SetSavePoint(); m_stcRight->SetSavePoint(); // Select the first diff wxRibbonButtonBarEvent dummy; m_cur_sequence = -1; OnNextDiffSequence(dummy); }