yaffs: Clean up bitfield types
authorCharles Manning <cdhmanning@gmail.com>
Sat, 29 Mar 2014 21:24:55 +0000 (10:24 +1300)
committerCharles Manning <cdhmanning@gmail.com>
Sat, 29 Mar 2014 21:24:55 +0000 (10:24 +1300)
It happens that the C spec says compilers can choose whether to treat
int bitfields as signed or unsigned.

In some cases, int was being used and signed was expected. The IAR
ARM compiler in particular treats int bitfields as unsigned.

Clean up these plus a few other bitfield usages to make the size and
type explicit.

Thanks to ChungKang Hu for identifying this issue.

Signed-off-by: Charles Manning <cdhmanning@gmail.com>
direct/yaffsfs.c
direct/yportenv.h
yaffs_guts.h
yaffs_packedtags1.h

index 0b231338ad0dfaa8a8562b24e28cf685a317dea1..a01155ff9320b66051e465d6809aaa14b792e654 100644 (file)
@@ -78,8 +78,8 @@ struct yaffsfs_DirSearchContext {
        struct yaffs_obj *dirObj;       /* ptr to directory being searched */
        struct yaffs_obj *nextReturn;   /* obj  returned by next readddir */
        struct list_head others;
-       int offset:20;
-       unsigned inUse:1;
+       s32 offset:20;
+       u8 inUse:1;
 };
 
 struct yaffsfs_FileDes {
@@ -89,8 +89,8 @@ struct yaffsfs_FileDes {
        u8 append:1;
        u8 shareRead:1;
        u8 shareWrite:1;
-       int inodeId:12;         /* Index to corresponding yaffsfs_Inode */
-       int handleCount:10;     /* Number of handles for this fd */
+       s32 inodeId:12;         /* Index to corresponding yaffsfs_Inode */
+       s32 handleCount:10;     /* Number of handles for this fd */
        union {
                Y_LOFF_T position;      /* current position in file */
                yaffs_DIR *dir;
index abc761b6e8c508be860e535730db8c6b10a1535d..d6e073d69d2e3efd4c63e6ad866fa5afe817b476 100644 (file)
@@ -23,6 +23,7 @@
 typedef unsigned char u8;
 typedef unsigned short u16;
 typedef unsigned int u32;
+typedef signed int s32;
 #endif
 
 
index 98b607ab2b2f7cec8684e81d68e3690469c8bdd8..77bc7e9968c386612d951f818f9e1e627f69c386 100644 (file)
@@ -144,12 +144,12 @@ struct yaffs_cache {
  */
 
 struct yaffs_tags {
-       unsigned chunk_id:20;
-       unsigned serial_number:2;
-       unsigned n_bytes_lsb:10;
-       unsigned obj_id:18;
-       unsigned ecc:12;
-       unsigned n_bytes_msb:2;
+       u32 chunk_id:20;
+       u32 serial_number:2;
+       u32 n_bytes_lsb:10;
+       u32 obj_id:18;
+       u32 ecc:12;
+       u32 n_bytes_msb:2;
 };
 
 union yaffs_tags_union {
@@ -287,9 +287,9 @@ enum yaffs_block_state {
 
 struct yaffs_block_info {
 
-       int soft_del_pages:10;  /* number of soft deleted pages */
-       int pages_in_use:10;    /* number of pages in use */
-       unsigned block_state:4; /* One of the above block states. */
+       s32 soft_del_pages:10;  /* number of soft deleted pages */
+       s32 pages_in_use:10;    /* number of pages in use */
+       u32 block_state:4;      /* One of the above block states. */
                                /* NB use unsigned because enum is sometimes
                                 * an int */
        u32 needs_retiring:1;   /* Data has failed on this block, */
@@ -688,8 +688,8 @@ struct yaffs_dev {
        /* Block Info */
        struct yaffs_block_info *block_info;
        u8 *chunk_bits;         /* bitmap of chunks in use */
-       unsigned block_info_alt:1;      /* allocated using alternative alloc */
-       unsigned chunk_bits_alt:1;      /* allocated using alternative alloc */
+       u8 block_info_alt:1;    /* allocated using alternative alloc */
+       u8 chunk_bits_alt:1;    /* allocated using alternative alloc */
        int chunk_bit_stride;   /* Number of bytes of chunk_bits per block.
                                 * Must be consistent with chunks_per_block.
                                 */
index b80f0a5b15740f0e38deabd18400aef65667d470..3015d58a0743a8ee23b19f89ed3b49834e61314e 100644 (file)
 #include "yaffs_guts.h"
 
 struct yaffs_packed_tags1 {
-       unsigned chunk_id:20;
-       unsigned serial_number:2;
-       unsigned n_bytes:10;
-       unsigned obj_id:18;
-       unsigned ecc:12;
-       unsigned deleted:1;
-       unsigned unused_stuff:1;
+       u32 chunk_id:20;
+       u32 serial_number:2;
+       u32 n_bytes:10;
+       u32 obj_id:18;
+       u32 ecc:12;
+       u32 deleted:1;
+       u32 unused_stuff:1;
        unsigned should_be_ff;
 
 };