// Handles: ALL static ZERO_OR_ERROR FS_read_all( struct one_wire_query *owq_all) { struct parsedname * pn = PN(owq_all) ; // bitfield, convert to .BYTE format and write ( and delete cache ) as BYTE. if ( pn->selected_filetype->format == ft_bitfield ) { struct one_wire_query * owq_byte = OWQ_create_separate( EXTENSION_BYTE, owq_all ) ; int ret = -EINVAL ; if ( owq_byte != NO_ONE_WIRE_QUERY ) { if ( FS_read_owq( owq_byte ) >= 0 ) { size_t elements = pn->selected_filetype->ag->elements; size_t extension; for ( extension=0 ; extension < elements ; ++extension ) { OWQ_array_Y(owq_all,extension) = UT_getbit_U( OWQ_U(owq_byte), extension ) ; } ret = 0 ; } OWQ_destroy( owq_byte ) ; } return ret ; } return FS_read_owq( owq_all ) ; }
struct one_wire_query * BYTEtoALL(struct one_wire_query *owq_byte) { struct one_wire_query * owq_all = OWQ_create_aggregate( owq_byte ); size_t elements = PN(owq_all)->selected_filetype->ag->elements ; size_t extension ; if ( owq_all == NO_ONE_WIRE_QUERY ) { return NO_ONE_WIRE_QUERY ; } for ( extension = 0 ; extension < elements ; ++extension ) { OWQ_array_Y(owq_all,extension) = UT_getbit_U( OWQ_U(owq_byte), extension ) ; } return owq_all ; }
struct one_wire_query * ALLtoBYTE(struct one_wire_query *owq_all) { struct one_wire_query * owq_byte = OWQ_create_separate( EXTENSION_BYTE, owq_all ); size_t elements = PN(owq_all)->selected_filetype->ag->elements ; size_t extension ; if ( owq_byte == NO_ONE_WIRE_QUERY ) { return NO_ONE_WIRE_QUERY ; } for ( extension = 0 ; extension < elements ; ++extension ) { UT_setbit_U( &OWQ_U(owq_byte), extension, OWQ_array_Y(owq_all,extension) ) ; } return owq_byte ; }
// Handles: ALL static ZERO_OR_ERROR FS_read_in_parts( struct one_wire_query *owq_all ) { struct parsedname *pn = PN(owq_all); struct filetype * ft = pn->selected_filetype ; struct one_wire_query * owq_part ; size_t elements = pn->selected_filetype->ag->elements; size_t extension; char * buffer_pointer = OWQ_buffer(owq_all) ; size_t buffer_left = OWQ_size(owq_all) ; // single for BYTE or iteration owq_part = OWQ_create_separate( 0, owq_all ) ; if ( owq_part == NO_ONE_WIRE_QUERY ) { return -ENOENT ; } // bitfield if ( ft->format == ft_bitfield ) { OWQ_pn(owq_part).extension = EXTENSION_BYTE ; if ( FS_read_owq(owq_part) < 0 ) { OWQ_destroy( owq_part ) ; return -EINVAL ; } for (extension = 0; extension < elements; ++extension) { OWQ_array_Y(owq_all,extension) = UT_getbit_U( OWQ_U(owq_part), extension ) ; } OWQ_destroy( owq_part ) ; return 0 ; } if ( BAD( OWQ_allocate_read_buffer( owq_part )) ) { LEVEL_DEBUG("Can't allocate buffer space"); OWQ_destroy( owq_part ) ; return -EMSGSIZE ; } /* Loop through get data */ for (extension = 0; extension < elements; ++extension) { size_t part_length ; OWQ_pn(owq_part).extension = extension; if ( FS_read_owq(owq_part) < 0 ) { OWQ_destroy( owq_part ) ; return -EINVAL ; } // Check that there is enough space for the combined message switch ( ft->format ) { case ft_ascii: case ft_vascii: case ft_alias: case ft_binary: part_length = OWQ_length(owq_part) ; if ( buffer_left < part_length ) { OWQ_destroy( owq_part ) ; return -EMSGSIZE ; } memcpy( buffer_pointer, OWQ_buffer(owq_part), part_length ) ; OWQ_array_length(owq_all,extension) = part_length ; buffer_pointer += part_length ; buffer_left -= part_length ; break ; default: // copy object (single to mixed array) memcpy(&OWQ_array(owq_all)[extension], &OWQ_val(owq_part), sizeof(union value_object)); break; } } OWQ_destroy( owq_part ) ; return 0; }