Beispiel #1
0
/* Writes the sectors to a file descriptor
 * Returns the amount of bytes written, or -1 on error
 */
ssize_t ewf_error2_sectors_write( EWF_ERROR2_SECTOR *sectors, int file_descriptor, uint32_t amount )
{
	EWF_CRC crc       = 0;
	ssize_t count     = 0;
	ssize_t crc_count = 0;
	size_t size       = EWF_ERROR2_SECTOR_SIZE * amount;

	if( sectors == NULL )
	{
		LIBEWF_WARNING_PRINT( "ewf_error2_sectors_write: invalid sectors.\n" );

		return( -1 );
	}
	if( size > (size_t) SSIZE_MAX )
	{
		LIBEWF_WARNING_PRINT( "ewf_error2_sectors_write: invalid amount exceeds maximum.\n" );

		return( -1 );
	}
	count = libewf_common_write( file_descriptor, sectors, size );

	if( count < (ssize_t) size )
	{
		LIBEWF_WARNING_PRINT( "ewf_error2_sectors_write: unable write error2 sectors.\n" );

		return( -1 );
	}
	if( ewf_crc_calculate( &crc, (uint8_t *) sectors, size, 1 ) != 1 )
	{
		LIBEWF_WARNING_PRINT( "ewf_error2_sectors_write: unable to calculate CRC.\n" );

		return( -1 );
	}
	crc_count = ewf_crc_write( &crc, file_descriptor );

	if( crc_count == -1 )
	{
		LIBEWF_WARNING_PRINT( "ewf_error2_sectors_write: unable to write CRC.\n" );

		return( -1 );
	}
	return( count + crc_count );
}
/* Writes the offsets to a file descriptor
 * Returns a -1 on error, the amount of bytes written on success
 */
ssize_t ewf_table_offsets_write( EWF_TABLE_OFFSET *offsets, int file_descriptor, uint32_t amount )
{
	EWF_CRC crc;
	ssize_t count;
	ssize_t crc_count;
	size_t size = EWF_TABLE_OFFSET_SIZE * amount;

	if( offsets == NULL )
	{
		LIBEWF_VERBOSE_PRINT( "ewf_table_offsets_write: invalid offsets.\n" );

		return( -1 );
	}
	count = write( file_descriptor, offsets, size );

	if( count < size )
	{
		return( -1 );
	}
	crc       = ewf_crc( offsets, size, 1 );
	crc_count = ewf_crc_write( crc, file_descriptor );

	return( count + crc_count );
}