summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
5521e3e)
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>
struct yaffs_obj *dirObj; /* ptr to directory being searched */
struct yaffs_obj *nextReturn; /* obj returned by next readddir */
struct list_head others;
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 {
};
struct yaffsfs_FileDes {
u8 append:1;
u8 shareRead:1;
u8 shareWrite:1;
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;
union {
Y_LOFF_T position; /* current position in file */
yaffs_DIR *dir;
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
- 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 {
};
union yaffs_tags_union {
struct yaffs_block_info {
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, */
/* NB use unsigned because enum is sometimes
* an int */
u32 needs_retiring:1; /* Data has failed on this block, */
/* Block Info */
struct yaffs_block_info *block_info;
u8 *chunk_bits; /* bitmap of chunks in use */
/* 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.
*/
int chunk_bit_stride; /* Number of bytes of chunk_bits per block.
* Must be consistent with chunks_per_block.
*/
#include "yaffs_guts.h"
struct yaffs_packed_tags1 {
#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;
};
unsigned should_be_ff;
};