STDMETHODIMP_(BOOL) CKpUtilitiesImpl::IsUTF8String(const UTF8_BYTE* pUTF8String) { return _IsUTF8String(pUTF8String); }
DWORD CPwImport::ImportCsvToDb(const TCHAR *pszFile, CPwManager *pMgr, DWORD dwGroupId) { unsigned long uFileSize, i, j = 0; char *pData; char *pProcessed; char ch; BOOL bInField = FALSE; BOOL bUTF8 = FALSE; DWORD dwFieldCounter = 0; ASSERT(pszFile != NULL); if(pszFile == NULL) return 0; ASSERT(pMgr != NULL); if(pMgr == NULL) return 0; if((dwGroupId == DWORD_MAX) || (dwGroupId == 0)) return 0; pData = CPwImport::FileToMemory(pszFile, &uFileSize); if(pData == NULL) return FALSE; pProcessed = new char[uFileSize + 32]; if(pProcessed == NULL) { SAFE_DELETE_ARRAY(pData); return 0; } memset(&pProcessed[uFileSize], 0, 32); // Last character must not be an escape character if(pData[uFileSize - 1] == '\\') pData[uFileSize - 1] = 0; if(uFileSize > 3) { if((static_cast<unsigned char>(pData[0]) == 0xEF) && (static_cast<unsigned char>(pData[1]) == 0xBB) && (static_cast<unsigned char>(pData[2]) == 0xBF)) { j += 3; // Skip UTF-8 initialization characters bUTF8 = TRUE; } } if(bUTF8 == FALSE) bUTF8 = _IsUTF8String((const UTF8_BYTE *)pData); for(i = j; i < uFileSize; i++) { ch = pData[i]; if((bInField == FALSE) && (ch == '\n')) { if((dwFieldCounter % 5) != 0) { SAFE_DELETE_ARRAY(pProcessed); SAFE_DELETE_ARRAY(pData); return (dwFieldCounter / 5); } } if(ch == 0) continue; else if((ch == '\\') && (pData[i+1] != 0)) { i++; // Skip escape character pProcessed[j] = pData[i]; // Write escaped symbol j++; // Increase write counter } else if((bInField == FALSE) && (ch == ',') && (pData[i+1] == ',')) { pProcessed[j] = 0; j++; dwFieldCounter++; } else if((bInField == FALSE) && (ch == ',') && (pData[i+1] == '\r')) { pProcessed[j] = 0; j++; dwFieldCounter++; } else if((bInField == FALSE) && (ch == ',') && (pData[i+1] == '\n')) { pProcessed[j] = 0; j++; dwFieldCounter++; } else if(ch == '\"') { if(bInField == TRUE) { pProcessed[j] = 0; j++; dwFieldCounter++; bInField = FALSE; } else bInField = TRUE; } else { if(bInField == TRUE) { pProcessed[j] = ch; j++; } } } if(bInField == TRUE) { SAFE_DELETE_ARRAY(pData); SAFE_DELETE_ARRAY(pProcessed); return (DWORD_MAX - 1); } m_pLastMgr = pMgr; m_dwLastGroupId = dwGroupId; _AddStringStreamToDb(pProcessed, j, bUTF8); SAFE_DELETE_ARRAY(pProcessed); SAFE_DELETE_ARRAY(pData); return DWORD_MAX; }