static PQUERY_KEY LoadMultipleBlobs(LPBYTE pbLineBegin, LPBYTE pbLineEnd, DWORD * pdwBlobCount) { PQUERY_KEY pBlobArray = NULL; LPBYTE pbBuffer = NULL; DWORD dwBlobCount = GetBlobCount(pbLineBegin, pbLineEnd); int nError; // Only if there is at least 1 blob if(dwBlobCount != 0) { // Allocate the array of blobs pBlobArray = CASC_ALLOC(QUERY_KEY, dwBlobCount); if(pBlobArray != NULL) { // Zero the blob array memset(pBlobArray, 0, dwBlobCount * sizeof(QUERY_KEY)); // Allocate buffer for the blobs pbBuffer = CASC_ALLOC(BYTE, dwBlobCount * MAX_CASC_KEY_LENGTH); if(pbBuffer != NULL) { // Zero the buffer memset(pbBuffer, 0, dwBlobCount * MAX_CASC_KEY_LENGTH); // Load the entire blob array nError = LoadBlobArray(pBlobArray, dwBlobCount, pbLineBegin, pbLineEnd, pbBuffer, dwBlobCount * MAX_CASC_KEY_LENGTH); if(nError == ERROR_SUCCESS) { *pdwBlobCount = dwBlobCount; return pBlobArray; } // Free the buffer CASC_FREE(pbBuffer); } // Free the array of blobs CASC_FREE(pBlobArray); pBlobArray = NULL; } // Reset the blob count dwBlobCount = 0; } *pdwBlobCount = dwBlobCount; return pBlobArray; }
static int LoadMultipleBlobs(PQUERY_KEY pBlob, const char * szLineBegin, const char * szLineEnd) { return LoadMultipleBlobs(pBlob, szLineBegin, szLineEnd, GetBlobCount(szLineBegin, szLineEnd)); }