FIO: Add sim_byte_swap_data routine to byte swap

This is an unconditional swap which may not be dependent on the
particular endian orientation of the simulated or host system.
This commit is contained in:
Mark Pizzolato 2021-08-17 15:20:07 -07:00
parent efc79d710a
commit 4e729165ee
2 changed files with 11 additions and 1 deletions

View file

@ -50,7 +50,8 @@
sim_fsize_ex - get file size as a t_offset
sim_fsize_name_ex - get file size as a t_offset of named file
sim_buf_copy_swapped - copy data swapping elements along the way
sim_buf_swap_data - swap data elements inplace in buffer
sim_buf_swap_data - swap data elements inplace in buffer if needed
sim_byte_swap_data - swap data elements inplace in buffer
sim_shmem_open create or attach to a shared memory region
sim_shmem_close close a shared memory region
@ -109,8 +110,16 @@ sim_taddr_64 = sim_toffset_64 && (sizeof(t_addr) > sizeof(int32));
return sim_end;
}
/* Copy little endian data to local buffer swapping if needed */
void sim_buf_swap_data (void *bptr, size_t size, size_t count)
{
if (sim_end || (count == 0) || (size == sizeof (char)))
return;
sim_byte_swap_data (bptr, size, count);
}
void sim_byte_swap_data (void *bptr, size_t size, size_t count)
{
uint32 j;
int32 k;
unsigned char by, *sptr, *dptr;

View file

@ -88,6 +88,7 @@ typedef void (*DIR_ENTRY_CALLBACK)(const char *directory,
t_stat sim_dir_scan (const char *cptr, DIR_ENTRY_CALLBACK entry, void *context);
void sim_buf_swap_data (void *bptr, size_t size, size_t count);
void sim_byte_swap_data (void *bptr, size_t size, size_t count);
void sim_buf_copy_swapped (void *dptr, const void *bptr, size_t size, size_t count);
const char *sim_get_os_error_text (int error);
typedef struct SHMEM SHMEM;