/* 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 ); }