diff --git a/sim_fio.c b/sim_fio.c index 8b297b7d..6890f757 100644 --- a/sim_fio.c +++ b/sim_fio.c @@ -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; diff --git a/sim_fio.h b/sim_fio.h index ba7c23a3..b7ef07bf 100644 --- a/sim_fio.h +++ b/sim_fio.h @@ -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;