summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/rfs/rtems-rfs-data.h
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2010-04-12 05:29:25 +0000
committerChris Johns <chrisj@rtems.org>2010-04-12 05:29:25 +0000
commit1d539c05010b34013e49c5a8221702ebadae4406 (patch)
tree3fc3d5bdd8435cd565c336ba0aab2525e518af1d /cpukit/libfs/src/rfs/rtems-rfs-data.h
parent2010-04-11 Ralf Corsépius <ralf.corsepius@rtems.org> (diff)
downloadrtems-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.h25
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