bool CFile::OpenForWrite(const CURL& url, bool bOverWrite) { m_fileSize = 0; Close(); smb.Init(); // we can't open files like smb://file.f or smb://server/file.f // if a file matches the if below return false, it can't exist on a samba share. if (!IsValidFile(url.GetFileName())) return false; CStdString strFileName = GetAuthenticatedPath(url); CLockObject lock(smb); if (bOverWrite) { XBMC->Log(LOG_WARNING, "FileSmb::OpenForWrite() called with overwriting enabled! - %s", strFileName.c_str()); m_fd = smbc_creat(strFileName.c_str(), 0); } else { m_fd = smbc_open(strFileName.c_str(), O_RDWR, 0); } if (m_fd == -1) { // write error to logfile XBMC->Log(LOG_ERROR, "FileSmb->Open: Unable to open file : '%s'\nunix_err:'%x' error : '%s'", strFileName.c_str(), errno, strerror(errno)); return false; } // We've successfully opened the file! return true; }
void AddToPlaylist(HWND hWnd, PSZ pszFilespec) { HDIR hFind = HDIR_SYSTEM; FILEFINDBUF3 FindBuffer = {0}; ULONG ulResultBufLen = sizeof(FILEFINDBUF3); ULONG ulFindCount = 1; APIRET rc = NO_ERROR; ULONG flAtttribute = FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN | FILE_READONLY; PSZ pszFilepath = new char[CCHMAXPATH]; PSZ pTemp = NULL; MakePathFromFilepath(pszFilepath, pszFilespec); pTemp = pszFilepath + strlen(pszFilepath); rc = DosFindFirst(pszFilespec, &hFind, flAtttribute, &FindBuffer, ulResultBufLen, &ulFindCount, FIL_STANDARD); while(rc == NO_ERROR) { strcpy(pTemp, FindBuffer.achName); if(IsValidFile(pszFilepath)) { plAddEntry(hWnd, pszFilepath); WinSetWindowText(WinQueryWindow(hWnd, QW_PARENT), pTemp); } ulFindCount = 1; rc = DosFindNext(hFind, &FindBuffer, ulResultBufLen, &ulFindCount); } DosFindClose(hFind); delete pszFilepath; }
void PushMRUFile(TCHAR* fname) { int i; DWORD rv; TCHAR full_file_name[MAX_PATH+1]; if(!fname || fname[0] == _T('\0') || fname[0] == _T('/') || fname[0] == _T('-')) { return; } memset(full_file_name,0,sizeof(full_file_name)); rv = GetFullPathName(fname,COUNTOF(full_file_name),full_file_name,NULL); if (rv == 0) { return; } if(IsValidFile(full_file_name)) { PopMRUFile(full_file_name); for(i = MRU_LIST_SIZE - 2; i >= 0; i--) { lstrcpy(g_mru_list[i+1], g_mru_list[i]); } lstrcpy(g_mru_list[0],full_file_name); BuildMRUMenus(); } }
void cg_disasm_window::dragMoveEvent(QDragMoveEvent* ev) { if (IsValidFile(*ev->mimeData())) { ev->accept(); } }
void* OpenForWrite(VFSURL* url, bool bOverWrite) { CSMB2::Get().Init(); // we can't open files like smb://file.f or smb://server/file.f // if a file matches the if below return false, it can't exist on a samba share. if (!IsValidFile(url->filename)) return NULL; std::string strFileName = GetAuthenticatedPath(url); PLATFORM::CLockObject lock(CSMB2::Get()); SMBContext* result = new SMBContext; if (bOverWrite) { XBMC->Log(ADDON::LOG_INFO, "FileSmb::OpenForWrite() called with overwriting enabled! - %s", strFileName.c_str()); result->fd = smbc_creat(strFileName.c_str(), 0); } else { result->fd = smbc_open(strFileName.c_str(), O_RDWR, 0); } if (result->fd == -1) { // write error to logfile XBMC->Log(ADDON::LOG_ERROR, "FileSmb->Open: Unable to open file : '%s'\nunix_err:'%x' error : '%s'", strFileName.c_str(), errno, strerror(errno)); delete result; return NULL; } // We've successfully opened the file! return result; }
void cg_disasm_window::dropEvent(QDropEvent* ev) { if (IsValidFile(*ev->mimeData(), true)) { ShowDisasm(); } }
void PushMRUFile(char* fname) { int i; char buf[MAX_PATH+1]; DWORD rv; char* file_part; char full_file_name[MAX_PATH+1]; if(!fname || fname[0] == '\0' || fname[0] == '/' || fname[0] == '-') { return; } if(fname[0] == '"') { fname++; } lstrcpy(buf,fname); if(buf[lstrlen(buf)-1] == '"') { buf[lstrlen(buf)-1] = '\0'; } my_memset(full_file_name,0,sizeof(full_file_name)); rv = GetFullPathName(buf,sizeof(full_file_name),full_file_name,&file_part); if (rv == 0) { return; } if(IsValidFile(full_file_name)) { PopMRUFile(full_file_name); for(i = MRU_LIST_SIZE - 2; i >= 0; i--) { lstrcpy(g_mru_list[i+1], g_mru_list[i]); } lstrcpy(g_mru_list[0],full_file_name); BuildMRUMenus(); } }
BOOL WINAPI MAP_GetId3TagFile(HANDLE hLib, LPCTSTR pszFile, ID3TAGV1* pTag) { CPlayer* pPlayer = (CPlayer*) hLib; if (pPlayer->PlugInGetId3TagFile(pszFile, pTag)) return TRUE; if (pPlayer->OvGetId3TagFile(pszFile, pTag)) return TRUE; if (!IsValidFile(pszFile)) return FALSE; return GetId3Tag(pszFile, pTag); }
void LoadMRUFile(int position) { if (!g_sdata.thread && position >=0 && position < MRU_LIST_SIZE && g_mru_list[position][0]) { SetScript(g_mru_list[position]); if(IsValidFile(g_mru_list[position])) { PushMRUFile(g_mru_list[position]); } else { PopMRUFile(g_mru_list[position]); BuildMRUMenus(); } ResetObjects(); CompileNSISScript(); } }
void LoadMRUFile(int position) { if (!g_sdata.thread && position >=0 && position < MRU_LIST_SIZE && g_mru_list[position][0]) { g_sdata.script = (char *)GlobalAlloc(GPTR,lstrlen(g_mru_list[position])+3); wsprintf(g_sdata.script,"\"%s\"",g_mru_list[position]); if(IsValidFile(g_mru_list[position])) { PushMRUFile(g_mru_list[position]); } else { PopMRUFile(g_mru_list[position]); BuildMRUMenus(); } ResetObjects(); CompileNSISScript(); } }
BOOL WINAPI MAP_IsValidStream(HANDLE hLib, LPCTSTR pszFile) { CPlayer* pPlayer = (CPlayer*) hLib; if (IsValidFile(pszFile)) return TRUE; if (pPlayer->OvIsValidFile(pszFile)) return TRUE; if (pPlayer->WavIsValidFile(pszFile)) return TRUE; if (pPlayer->PlugInIsValidFile(pszFile)) return TRUE; return FALSE; }
bool CMatch::MatchFileNoExt() { LPCWSTR pszLine = m_SrcLine.ms_Val; if (!pszLine || !*pszLine || (mn_SrcFrom < 0) || (mn_SrcLength <= mn_SrcFrom)) return false; const wchar_t szLatin[] = L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_"; mn_MatchLeft = mn_SrcFrom; if (wcschr(szLatin, pszLine[mn_MatchLeft])) { while ((mn_MatchLeft > 0) && wcschr(szLatin, pszLine[mn_MatchLeft-1])) { mn_MatchLeft--; } } else { while (((mn_MatchLeft+1) < mn_SrcLength) && wcschr(szLatin, pszLine[mn_MatchLeft+1])) { mn_MatchLeft++; } } mn_MatchRight = mn_MatchLeft; while (((mn_MatchRight+1) < mn_SrcLength) && wcschr(szLatin, pszLine[mn_MatchRight+1])) { mn_MatchRight++; } int nNakedFileLen = 0; if (!IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft, mn_MatchRight - mn_MatchLeft + 1, gszBreak, gszSpacing, nNakedFileLen)) return false; mn_MatchRight = mn_MatchLeft + nNakedFileLen - 1; StoreMatchText(NULL, NULL); m_Type = etr_File; return true; }
bool Exists(VFSURL* url) { // we can't open files like smb://file.f or smb://server/file.f // if a file matches the if below return false, it can't exist on a samba share. if (!IsValidFile(url->filename)) return false; CSMB2::Get().Init(); std::string strFileName = GetAuthenticatedPath(url); struct stat info; CSMB2& smb = CSMB2::Get(); PLATFORM::CLockObject lock(smb); int iResult = smbc_stat(strFileName.c_str(), &info); if (iResult < 0) return false; return true; }
void* Open(VFSURL* url) { CSMB2::Get().Init(); CSMB2::Get().AddActiveConnection(); if (!IsValidFile(url->filename)) { XBMC->Log(ADDON::LOG_INFO, "FileSmb->Open: Bad URL : '%s'",url->redacted); return NULL; } int fd = -1; std::string filename = GetAuthenticatedPath(url); PLATFORM::CLockObject lock(CSMB2::Get()); fd = smbc_open(filename.c_str(), O_RDONLY, 0); if (fd == -1) { XBMC->Log(ADDON::LOG_INFO, "FileSmb->Open: Unable to open file : '%s'\nunix_err:'%x' error : '%s'", url->redacted, errno, strerror(errno)); return NULL; } XBMC->Log(ADDON::LOG_DEBUG,"CSMB2File::Open - opened %s, fd=%d", url->filename, fd); struct stat tmpBuffer; if (smbc_stat(filename.c_str(), &tmpBuffer) < 0) { smbc_close(fd); return NULL; } int64_t ret = smbc_lseek(fd, 0, SEEK_SET); if (ret < 0) { smbc_close(fd); return NULL; } SMBContext* result = new SMBContext; result->fd = fd; result->size = tmpBuffer.st_size; return result; }
bool CMatch::MatchAny() { bool bFound = false; // В именах файлов недопустимы: "/\:|*?<>~t~r~n а для простоты - учитываем и рамки const wchar_t* pszBreak = gszBreak; const wchar_t* pszSpacing = gszSpacing; // Пробел, таб, остальные для режима "Show white spaces" в редакторе фара const wchar_t* pszSeparat = L" \t:("; const wchar_t* pszTermint = L":)],"; const wchar_t* pszDigits = L"0123456789"; const wchar_t* pszSlashes = L"/\\"; const wchar_t* pszUrl = L":/\\:%#ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz;?@&=+$,-_.!~*'()0123456789"; const wchar_t* pszUrlTrimRight = L".,;"; const wchar_t* pszProtocol = L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_+-."; const wchar_t* pszEMail = L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_+-."; const wchar_t* pszUrlDelim = L"\\\"<>{}[]^`'\r\n" MATCH_SPACINGS; const wchar_t* pszUrlFileDelim = L"\"<>^\r\n" MATCH_SPACINGS; const wchar_t* pszEndBrackets = L">])}"; const wchar_t* pszPuctuators = L".,:;…!?"; int nColons = 0; bool bUrlMode = false, bMaybeMail = false; SHORT MailX = -1; bool bDigits = false, bLineNumberFound = false, bWasSeparator = false; bool bWasPunctuator = false; bool bNakedFile = false; int nNakedFileLen = 0; enum { ef_NotFound = 0, ef_DotFound = 1, ef_ExtFound = 2, } iExtFound = ef_NotFound; int iBracket = 0; int iSpaces = 0; int iQuotStart = -1; const wchar_t* pszTest; mn_MatchLeft = mn_MatchRight = mn_SrcFrom; // Курсор над знаком препинания и за ним пробел? Допускать только ':' - это для строк/колонок с ошибками if ((wcschr(L";,.", m_SrcLine.ms_Val[mn_SrcFrom])) && (((mn_SrcFrom+1) >= mn_SrcLength) || wcschr(pszSpacing, m_SrcLine.ms_Val[mn_SrcFrom+1]))) { MatchTestAlert(); goto wrap; } // Курсор над протоколом? (http, etc) if (!CheckValidUrl(mn_MatchLeft, mn_MatchRight, bUrlMode, pszUrlDelim, pszUrl, pszProtocol, m_SrcLine.ms_Val, mn_SrcLength)) { MatchTestAlert(); goto wrap; } if (!bUrlMode) { // Not URL mode, restart searching mn_MatchLeft = mn_MatchRight = mn_SrcFrom; // Курсор над комментарием? // Попробуем найти начало имени файла if (!FindRangeStart(mn_MatchLeft, mn_MatchRight, bUrlMode, pszBreak, pszUrlDelim, pszSpacing, pszUrl, pszProtocol, m_SrcLine.ms_Val, mn_SrcLength)) { MatchTestAlert(); goto wrap; } // Try again with URL? if (mn_MatchLeft < mn_SrcFrom) { if (!CheckValidUrl(mn_MatchLeft, mn_MatchRight, bUrlMode, pszUrlDelim, pszUrl, pszProtocol, m_SrcLine.ms_Val, mn_SrcLength)) { MatchTestAlert(); goto wrap; } } } // Starts with quotation? if ((pszTest = wcschr(gszQuotStart, m_SrcLine.ms_Val[mn_MatchLeft])) != NULL) { iQuotStart = (int)(pszTest - gszQuotStart); } // Чтобы корректно флаги обработались (типа наличие расширения и т.п.) mn_MatchRight = mn_MatchLeft; // Теперь - найти конец. // Считаем, что для файлов конец это двоеточие, после которого идет описание ошибки // Для протоколов (http/...) - первый недопустимый символ TODO("Можно бы и просто открытие файлов прикрутить, без требования 'строки с ошибкой'"); // -- VC // 1>c:\sources\conemu\realconsole.cpp(8104) : error C2065: 'qqq' : undeclared identifier // DefResolve.cpp(18) : error C2065: 'sdgagasdhsahd' : undeclared identifier // DefResolve.cpp(18): warning: note xxx // -- GCC // ConEmuC.cpp:49: error: 'qqq' does not name a type // 1.c:3: some message // file.cpp:29:29: error // CPP Check // [common\PipeServer.h:1145]: (style) C-style pointer casting // Delphi // c:\sources\FarLib\FarCtrl.pas(1002) Error: Undeclared identifier: 'PCTL_GETPLUGININFO' // FPC // FarCtrl.pas(1002,49) Error: Identifier not found "PCTL_GETPLUGININFO" // PowerShell // Script.ps1:35 знак:23 // -- Possible? // abc.py (3): some message // ASM - подсвечивать нужно "test.asasm(1,1)" // [email protected](1239): test.asasm(1,1): // Issue 1594 // /src/class.c:123:m_func(...) // /src/class.c:123: m_func(...) // -- URL's // file://c:\temp\qqq.html // http://www.farmanager.com // $ http://www.KKK.ru - левее слеша - не срабатывает // C:\ConEmu>http://www.KKK.ru - ... // -- False detects // 29.11.2011 18:31:47 // C:\VC\unicode_far\macro.cpp 1251 Ln 5951/8291 Col 51 Ch 39 0043h 13:54 // InfoW1900->SettingsControl(sc.Handle, SCTL_FREE, 0, 0); // Нас на интересуют строки типа "11.05.2010 10:20:35" // В имени файла должна быть хотя бы одна буква (расширение), причем английская // Поехали if (bUrlMode) { LPCWSTR pszDelim = (wcsncmp(m_SrcLine.ms_Val+mn_MatchLeft, L"file://", 7) == 0) ? pszUrlFileDelim : pszUrlDelim; while (((mn_MatchRight+1) < mn_SrcLength) && !wcschr(pszDelim, m_SrcLine.ms_Val[mn_MatchRight+1])) mn_MatchRight++; DEBUGTEST(int i4break = 0); } else while ((mn_MatchRight+1) < mn_SrcLength) { if ((m_SrcLine.ms_Val[mn_MatchRight] == L'/') && ((mn_MatchRight+1) < mn_SrcLength) && (m_SrcLine.ms_Val[mn_MatchRight+1] == L'/') && !((mn_MatchRight > 1) && (m_SrcLine.ms_Val[mn_MatchRight] == L':'))) // и НЕ URL адрес { MatchTestAlert(); goto wrap; // Не оно (комментарий в строке) } if (bWasSeparator // " \t:(" && (isDigit(m_SrcLine.ms_Val[mn_MatchRight]) || (bDigits && (m_SrcLine.ms_Val[mn_MatchRight] == L',')))) // FarCtrl.pas(1002,49) Error: { if (!bDigits && (mn_MatchLeft < mn_MatchRight) /*&& (m_SrcLine.ms_Val[mn_MatchRight-1] == L':')*/) { bDigits = true; // Если перед разделителем был реальный файл - сразу выставим флажок "номер строки найден" if (IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft, mn_MatchRight - mn_MatchLeft - 1, pszBreak, pszSpacing, nNakedFileLen)) { bLineNumberFound = true; } // Skip leading quotation mark? else if ((iQuotStart >= 0) && IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft+1, mn_MatchRight - mn_MatchLeft - 2, pszBreak, pszSpacing, nNakedFileLen)) { mn_MatchLeft++; bLineNumberFound = true; } } } else if (bWasSeparator && bLineNumberFound && wcschr(L":)] \t", m_SrcLine.ms_Val[mn_MatchRight])) { //// gcc такие строки тоже может выкинуть //// file.cpp:29:29: error //mn_MatchRight--; break; } else { if (iExtFound != ef_ExtFound) { if (iExtFound == ef_NotFound) { if (m_SrcLine.ms_Val[mn_MatchRight] == L'.') iExtFound = ef_ExtFound; } else { // Не особо заморачиваясь с точками и прочим. Просто небольшая страховка от ложных срабатываний... if ((m_SrcLine.ms_Val[mn_MatchRight] >= L'a' && m_SrcLine.ms_Val[mn_MatchRight] <= L'z') || (m_SrcLine.ms_Val[mn_MatchRight] >= L'A' && m_SrcLine.ms_Val[mn_MatchRight] <= L'Z')) { iExtFound = ef_ExtFound; iBracket = 0; } } } if (iExtFound == 2) { if (m_SrcLine.ms_Val[mn_MatchRight] == L'.') { iExtFound = ef_DotFound; iBracket = 0; } else if (wcschr(pszSlashes, m_SrcLine.ms_Val[mn_MatchRight]) != NULL) { // Был слеш, значит расширения - еще нет iExtFound = ef_NotFound; iBracket = 0; bWasSeparator = false; } else if (wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight]) && wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight-1])) { // Слишком много пробелов iExtFound = ef_NotFound; iBracket = 0; bWasSeparator = false; } // Stop on naked file if we found space after it else if (!bLineNumberFound && !bMaybeMail && wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight]) // But don't stop if there is a line number: "abc.py (3): ..." && !(((mn_MatchRight+3) < mn_SrcLength) && (m_SrcLine.ms_Val[mn_MatchRight+1] == L'(') && isDigit(m_SrcLine.ms_Val[mn_MatchRight+2])) // Is this a file without digits (line/col)? && IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft, mn_MatchRight - mn_MatchLeft + 1, pszBreak, pszSpacing, nNakedFileLen)) { // File without digits, just for opening in the editor bNakedFile = true; break; } // Stop if after colon there is another letter but a digit else if (!bLineNumberFound && !bMaybeMail && (m_SrcLine.ms_Val[mn_MatchRight] == L':') && (((mn_MatchRight+1) >= mn_SrcLength) || !isDigit(m_SrcLine.ms_Val[mn_MatchRight+1])) // Is this a file without digits (line/col)? && IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft, mn_MatchRight - mn_MatchLeft, pszBreak, pszSpacing, nNakedFileLen)) { // File without digits, just for opening in the editor bNakedFile = true; mn_MatchRight--; break; } else { bWasSeparator = (wcschr(pszSeparat, m_SrcLine.ms_Val[mn_MatchRight]) != NULL); } } if ((iQuotStart >= 0) && (m_SrcLine.ms_Val[mn_MatchRight] == gszQuotEnd[iQuotStart])) { bNakedFile = IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft+1, mn_MatchRight - mn_MatchLeft - 1, pszBreak, pszSpacing, nNakedFileLen); if (bNakedFile || bMaybeMail) { mn_MatchLeft++; mn_MatchRight--; break; } } if (bWasPunctuator && !bLineNumberFound) { if (bMaybeMail) { // Если после мейла нашли что-то кроме точки if ((m_SrcLine.ms_Val[mn_MatchRight-1] != L'.') // или после точки - пробельный символ || wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight])) { break; } } else if (wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight])) { bNakedFile = IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft, mn_MatchRight - mn_MatchLeft - 1, pszBreak, pszSpacing, nNakedFileLen); if (bNakedFile) { mn_MatchRight--; break; } } } bWasPunctuator = (wcschr(pszPuctuators, m_SrcLine.ms_Val[mn_MatchRight]) != NULL); // Рассчитано на закрывающие : или ) или ] или , _ASSERTE(pszTermint[0]==L':' && pszTermint[1]==L')' && pszTermint[2]==L']' && pszTermint[3]==L',' && pszTermint[4]==0); // Script.ps1:35 знак:23 if (bDigits && IsFileLineTerminator(m_SrcLine.ms_Val+mn_MatchRight, pszTermint)) { // Validation if (((m_SrcLine.ms_Val[mn_MatchRight] == L':' || m_SrcLine.ms_Val[mn_MatchRight] == L' ') // Issue 1594: /src/class.c:123:m_func(...) /* && (wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight+1]) || wcschr(pszDigits, m_SrcLine.ms_Val[mn_MatchRight+1]))*/) // Если номер строки обрамлен скобками - скобки должны быть сбалансированы || ((m_SrcLine.ms_Val[mn_MatchRight] == L')') && (iBracket == 1) && ((m_SrcLine.ms_Val[mn_MatchRight+1] == L':') || wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight+1]) || wcschr(pszDigits, m_SrcLine.ms_Val[mn_MatchRight+1]))) // [file.cpp:1234]: (cppcheck) || ((m_SrcLine.ms_Val[mn_MatchRight] == L']') && (m_SrcLine.ms_Val[mn_MatchRight+1] == L':')) ) { //_ASSERTE(bLineNumberFound==false); //bLineNumberFound = true; break; // found? } } // Issue 1758: Support file/line format for php: C:\..\test.php:28 if (bDigits && !wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight])) { bDigits = false; } switch (m_SrcLine.ms_Val[mn_MatchRight]) { // Пока регулярок нет... case L'(': iBracket++; break; case L')': iBracket--; break; case L'/': case L'\\': iBracket = 0; break; case L'@': if (MailX != -1) { bMaybeMail = false; } else if (((mn_MatchRight > 0) && wcschr(pszEMail, m_SrcLine.ms_Val[mn_MatchRight-1])) && (((mn_MatchRight+1) < mn_SrcLength) && wcschr(pszEMail, m_SrcLine.ms_Val[mn_MatchRight+1]))) { bMaybeMail = true; MailX = mn_MatchRight; } break; } if (m_SrcLine.ms_Val[mn_MatchRight] == L':') nColons++; else if (m_SrcLine.ms_Val[mn_MatchRight] == L'\\' || m_SrcLine.ms_Val[mn_MatchRight] == L'/') nColons = 0; } if (nColons >= 2) break; mn_MatchRight++; if (wcschr(pszBreak, m_SrcLine.ms_Val[mn_MatchRight])) { if (bMaybeMail) break; if ((bLineNumberFound) || !IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft, mn_MatchRight - mn_MatchLeft + 1, pszBreak, pszSpacing, nNakedFileLen)) { MatchTestAlert(); goto wrap; // Не оно } // File without digits, just for opening in the editor _ASSERTE(!bLineNumberFound); bNakedFile = true; break; } else if (wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight])) { if ((++iSpaces) > 1) { if ((bLineNumberFound) || !IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft, mn_MatchRight - mn_MatchLeft + 1, pszBreak, pszSpacing, nNakedFileLen)) { if (!bLineNumberFound && bMaybeMail) break; MatchTestAlert(); goto wrap; // Не оно? } // File without digits, just for opening in the editor _ASSERTE(!bLineNumberFound); bNakedFile = true; break; } } else { iSpaces = 0; } } // end of 'while ((mn_MatchRight+1) < mn_SrcLength)' if (bUrlMode) { // Считаем, что OK bMaybeMail = false; // Cut off ending punctuators if (wcschr(pszPuctuators, m_SrcLine.ms_Val[mn_MatchRight])) mn_MatchRight--; // Cut off ending bracket if it is if (wcschr(pszEndBrackets, m_SrcLine.ms_Val[mn_MatchRight])) mn_MatchRight--; } else { if (!bNakedFile && !bMaybeMail && ((mn_MatchRight+1) == mn_SrcLength) && !bLineNumberFound && (iExtFound == ef_ExtFound)) { bNakedFile = IsValidFile(m_SrcLine.ms_Val+mn_MatchLeft, mn_MatchRight - mn_MatchLeft + 1, pszBreak, pszSpacing, nNakedFileLen); } if (bLineNumberFound) bMaybeMail = false; if (bNakedFile) { // correct the end pos mn_MatchRight = mn_MatchLeft + nNakedFileLen - 1; _ASSERTE(mn_MatchRight > mn_MatchLeft); // and no need to check for colon } else if (bMaybeMail) { // no need to check for colon } else if ((m_SrcLine.ms_Val[mn_MatchRight] != L':' && m_SrcLine.ms_Val[mn_MatchRight] != L' ' && !((m_SrcLine.ms_Val[mn_MatchRight] == L')') && iBracket == 1) && !((m_SrcLine.ms_Val[mn_MatchRight] == L']') && (m_SrcLine.ms_Val[mn_MatchRight+1] == L':')) ) || !bLineNumberFound || (nColons > 2)) { MatchTestAlert(); goto wrap; } if (bMaybeMail || (!bMaybeMail && !bNakedFile && m_SrcLine.ms_Val[mn_MatchRight] != L')')) mn_MatchRight--; // Откатить ненужные пробелы while ((mn_MatchLeft < mn_MatchRight) && wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchLeft])) mn_MatchLeft++; while ((mn_MatchRight > mn_MatchLeft) && wcschr(pszSpacing, m_SrcLine.ms_Val[mn_MatchRight])) mn_MatchRight--; if (bMaybeMail) { // Для мейлов - проверяем допустимые символы (чтобы пробелов не было и прочего мусора) int x = MailX - 1; _ASSERTE(x>=0); while ((x > 0) && wcschr(pszEMail, m_SrcLine.ms_Val[x-1])) x--; mn_MatchLeft = x; x = MailX + 1; _ASSERTE(x<mn_SrcLength); while (((x+1) < mn_SrcLength) && wcschr(pszEMail, m_SrcLine.ms_Val[x+1])) x++; mn_MatchRight = x; } else if (bNakedFile) { // ??? } else { if ((mn_MatchLeft + 4) > mn_MatchRight) // 1.c:1: //-V112 { // Слишком коротко, считаем что не оно MatchTestAlert(); goto wrap; } // Проверить, чтобы был в наличии номер строки if (!(m_SrcLine.ms_Val[mn_MatchRight] >= L'0' && m_SrcLine.ms_Val[mn_MatchRight] <= L'9') // ConEmuC.cpp:49: && !(m_SrcLine.ms_Val[mn_MatchRight] == L')' && (m_SrcLine.ms_Val[mn_MatchRight-1] >= L'0' && m_SrcLine.ms_Val[mn_MatchRight-1] <= L'9'))) // ConEmuC.cpp(49) : { MatchTestAlert(); goto wrap; // Номера строки нет } // [file.cpp:1234]: (cppcheck) ? if ((m_SrcLine.ms_Val[mn_MatchRight+1] == L']') && (m_SrcLine.ms_Val[mn_MatchLeft] == L'[')) mn_MatchLeft++; // Чтобы даты ошибочно не подсвечивать: // 29.11.2011 18:31:47 { bool bNoDigits = false; for (int i = mn_MatchLeft; i <= mn_MatchRight; i++) { if (m_SrcLine.ms_Val[i] < L'0' || m_SrcLine.ms_Val[i] > L'9') { bNoDigits = true; } } if (!bNoDigits) { MatchTestAlert(); goto wrap; } } // -- уже включены // Для красивости в VC включить скобки //if ((m_SrcLine.ms_Val[mn_MatchRight] == L')') && (m_SrcLine.ms_Val[mn_MatchRight+1] == L':')) // mn_MatchRight++; } } // end "else / if (bUrlMode)" // Check mouse pos, it must be inside region if ((mn_SrcFrom < mn_MatchLeft) || (mn_MatchRight < mn_SrcFrom)) { MatchTestAlert(); goto wrap; } // Ok if (mn_MatchRight >= mn_MatchLeft) { bFound = true; _ASSERTE(!bMaybeMail || !bUrlMode); // Одновременно - флаги не могут быть выставлены! LPCWSTR pszPrefix = (bMaybeMail && !bUrlMode) ? L"mailto:" : NULL; if (bMaybeMail && !bUrlMode) bUrlMode = true; StoreMatchText(pszPrefix, bUrlMode ? pszUrlTrimRight : NULL); #ifdef _DEBUG if (!bUrlMode && wcsstr(ms_Match.ms_Val, L"//")!=NULL) { _ASSERTE(FALSE); } #endif } if (bUrlMode) m_Type = etr_Url; else m_Type = (bLineNumberFound ? etr_FileRow : etr_File); wrap: return bFound; }