/* * readInPieces - read a specified amount of data from a file in chunks */ static void readInPieces( BYTE _WCI86HUGE *dst, FILE *fp, DWORD size ) { BYTE *buffer; WORD chunk_size; for( chunk_size = CHUNK_SIZE; chunk_size != 0; chunk_size >>= 1 ) { if( (buffer = MemAlloc( chunk_size )) != NULL ) { while( size > chunk_size ) { fread( buffer, chunk_size, 1, fp ); HugeMemCopy( dst, buffer, chunk_size ); dst += chunk_size; size -= chunk_size; } fread( buffer, size, 1, fp ); HugeMemCopy( dst, buffer, size ); MemFree( buffer ); break; } } } /* readInPieces */
static void WRReadInPieces( BYTE _HUGE *dst, BYTE *data, DWORD size ) { BYTE *buffer = NULL; WORD chunk_size; chunk_size = CHUNK_SIZE; while( chunk_size != 0 && (buffer = MemAlloc( chunk_size )) == NULL ) { chunk_size >>= 1; } if( buffer == NULL ) { return; } while( size > chunk_size ) { memcpy( buffer, data, chunk_size ); HugeMemCopy( dst, buffer, chunk_size ); dst += chunk_size; size -= chunk_size; data += chunk_size; } memcpy( buffer, data, size ); HugeMemCopy( dst, buffer, size ); MemFree( buffer ); }
static void ReadInPieces( BYTE _HUGE *dst, FILE *fp, DWORD size ) { BYTE *buffer; WORD chunk_size; chunk_size = CHUNK_SIZE; while( ( buffer = malloc( chunk_size ) ) == NULL ) { chunk_size >>= 1; } while( size > chunk_size ) { fread( buffer, chunk_size, 1, fp ); HugeMemCopy( dst, buffer, chunk_size ); dst += chunk_size; size -= chunk_size; } fread( buffer, size, 1, fp ); _memcpy( dst, buffer, size ); free( buffer ); } /* ReadInPieces */