static void array_realloc( array* arr, uint32 size ) { if ( arr->alloc <= arr->size + size ) { uint32 tmp = max32( 16, arr->alloc * 2 ); arr->data = (uint8*) realloc( arr->data, tmp ); if ( arr->data == NULL ) { printf( "could not re-allocate array to %d bytes", tmp ); exit( -17 ); } arr->alloc = tmp; } }
//------------------------------------------------------------------------- nsresult DataStruct::ReadCache(nsISupports** aData, uint32_t* aDataLen) { // if we don't have a cache filename we are out of luck if (!mCacheFileName) return NS_ERROR_FAILURE; // get the path and file name nsCOMPtr<nsIFile> cacheFile ( getter_AddRefs(GetFileSpec(mCacheFileName)) ); bool exists; if ( cacheFile && NS_SUCCEEDED(cacheFile->Exists(&exists)) && exists ) { // get the size of the file int64_t fileSize; int64_t max32(LL_INIT(0, 0xFFFFFFFF)); cacheFile->GetFileSize(&fileSize); if (LL_CMP(fileSize, >, max32)) return NS_ERROR_OUT_OF_MEMORY; uint32_t size; LL_L2UI(size, fileSize); // create new memory for the large clipboard data nsAutoArrayPtr<char> data(new char[size]); if ( !data ) return NS_ERROR_OUT_OF_MEMORY; // now read it all in nsCOMPtr<nsIInputStream> inStr; NS_NewLocalFileInputStream( getter_AddRefs(inStr), cacheFile); if (!cacheFile) return NS_ERROR_FAILURE; nsresult rv = inStr->Read(data, fileSize, aDataLen); // make sure we got all the data ok if (NS_SUCCEEDED(rv) && *aDataLen == size) { nsPrimitiveHelpers::CreatePrimitiveForData ( mFlavor.get(), data, fileSize, aData ); return *aData ? NS_OK : NS_ERROR_FAILURE; } // zero the return params *aData = nullptr; *aDataLen = 0; }