diff options
author | Chris Johns <chrisj@rtems.org> | 2010-04-12 05:29:25 +0000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2010-04-12 05:29:25 +0000 |
commit | 1d539c05010b34013e49c5a8221702ebadae4406 (patch) | |
tree | 3fc3d5bdd8435cd565c336ba0aab2525e518af1d /cpukit/libfs/src/rfs/rtems-rfs-data.h | |
parent | 2010-04-11 Ralf Corsépius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-1d539c05010b34013e49c5a8221702ebadae4406.tar.bz2 |
2010-04-12 Chris Johns <chrisj@rtems.org>
libfs/src/rfs/rtems-rfs-buffer-bdbuf.c,
libfs/src/rfs/rtems-rfs-buffer.c, libfs/src/rfs/rtems-rfs-data.h,
libfs/src/rfs/rtems-rfs-dir.c,
libfs/src/rfs/rtems-rfs-file-system.c,
libfs/src/rfs/rtems-rfs-format.c, libfs/src/rfs/rtems-rfs-inode.h,
libfs/src/rfs/rtems-rfs-rtems.c, libfs/src/rfs/rtems-rfs-rtems.h,
libfs/src/rfs/rtems-rfs-shell.c: Fix for PR1502. Clean up problems
on 16bit targets.
Diffstat (limited to 'cpukit/libfs/src/rfs/rtems-rfs-data.h')
-rw-r--r-- | cpukit/libfs/src/rfs/rtems-rfs-data.h | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-data.h b/cpukit/libfs/src/rfs/rtems-rfs-data.h index 67e820faac..343c0a9854 100644 --- a/cpukit/libfs/src/rfs/rtems-rfs-data.h +++ b/cpukit/libfs/src/rfs/rtems-rfs-data.h @@ -31,6 +31,12 @@ #define rtems_rfs_data_ptr(_d) ((uint8_t*)(_d)) /** + * Helper function to get the data shifted in the correctly sized type. + */ +#define rtems_rfs_data_get(_d, _t, _o, _s) \ + (((_t)(rtems_rfs_data_ptr (_d)[_o])) << (_s)) + +/** * RFS Read Unsigned 8bit Integer */ #define rtems_rfs_read_u8(_d) \ @@ -40,14 +46,17 @@ * RFS Read Unsigned 16bit Integer */ #define rtems_rfs_read_u16(_d) \ - ((rtems_rfs_data_ptr (_d)[0] << 8) | (rtems_rfs_data_ptr (_d)[1])) + (rtems_rfs_data_get (_d, uint16_t, 0, 8) | \ + rtems_rfs_data_get (_d, uint16_t, 1, 0)) /** * RFS Read Unsigned 32bit Integer */ #define rtems_rfs_read_u32(_d) \ - ((rtems_rfs_data_ptr (_d)[0] << 24) | (rtems_rfs_data_ptr (_d)[1] << 16) | \ - (rtems_rfs_data_ptr (_d)[2] << 8) | (rtems_rfs_data_ptr (_d)[3])) + (rtems_rfs_data_get (_d, uint32_t, 0, 24) | \ + rtems_rfs_data_get (_d, uint32_t, 1, 16) | \ + rtems_rfs_data_get (_d, uint32_t, 2, 8) | \ + rtems_rfs_data_get (_d, uint32_t, 3, 0)) /** * RFS Write Unsigned 8bit Integer @@ -60,7 +69,7 @@ */ #define rtems_rfs_write_u16(_d, _v) \ do { \ - rtems_rfs_data_ptr (_d)[0] = (uint8_t)((_v) >> 8); \ + rtems_rfs_data_ptr (_d)[0] = (uint8_t)(((uint16_t)(_v)) >> 8); \ rtems_rfs_data_ptr (_d)[1] = (uint8_t)((_v)); \ } while (0) @@ -69,10 +78,10 @@ */ #define rtems_rfs_write_u32(_d, _v) \ do { \ - rtems_rfs_data_ptr (_d)[0] = (uint8_t)((_v) >> 24); \ - rtems_rfs_data_ptr (_d)[1] = (uint8_t)((_v) >> 16); \ - rtems_rfs_data_ptr (_d)[2] = (uint8_t)((_v) >> 8); \ - rtems_rfs_data_ptr (_d)[3] = (uint8_t)((_v)); \ + rtems_rfs_data_ptr (_d)[0] = (uint8_t)(((uint32_t)(_v)) >> 24); \ + rtems_rfs_data_ptr (_d)[1] = (uint8_t)(((uint32_t)(_v)) >> 16); \ + rtems_rfs_data_ptr (_d)[2] = (uint8_t)(((uint32_t)(_v)) >> 8); \ + rtems_rfs_data_ptr (_d)[3] = (uint8_t)((uint32_t)(_v)); \ } while (0) #endif |