[Yaffs] patch: struct yaffs_ObjectHeader fix for 64 bit comp…

Top Page
Attachments:
Message as email
+ (text/plain)
+ yaffs_userland_04_64bit.patch (text/plain)
Delete this message
Reply to this message
Author: Frank Rowand
Date:  
To: yaffs
Subject: [Yaffs] patch: struct yaffs_ObjectHeader fix for 64 bit compile
The attached patch should allow a 64 bit compile to create a
struct yaffs_ObjectHeader with proper field size and
alignment.

I have not yet tested this on 64 bit hardware, but wanted to
share it before it became stale.

I also have not tried it with a compiler other than gcc (I'm
not sure what people are using for WINCE targets), so I don't
know if this will work with other compilers.

-Frank
--
Frank Rowand <>
MontaVista Software, Inc
Index: yaffs/yaffs_guts.h
===================================================================
--- yaffs.orig/yaffs_guts.h
+++ yaffs/yaffs_guts.h
@@ -181,16 +181,17 @@
     YAFFS_OBJECT_TYPE_DIRECTORY,
     YAFFS_OBJECT_TYPE_HARDLINK,
     YAFFS_OBJECT_TYPE_SPECIAL
-} yaffs_ObjectType;
+} yaffs_ObjectType __attribute__ ((__mode__ (__SI__)));


 typedef struct
 {
     yaffs_ObjectType type;


     // Apply to everything    
-    int   parentObjectId;
+    __s32 parentObjectId;
     __u16 sum__NoLongerUsed;    // checksum of name. Calc this off the name to prevent inconsistencies
     char  name[YAFFS_MAX_NAME_LENGTH + 1];
+    char  pad[2];


     // Thes following apply to directories, files, symlinks - not hard links
     __u32 st_mode;  // protection
@@ -209,10 +210,10 @@
 #endif


     // File size  applies to files only
-    int fileSize; 
+    __s32 fileSize; 

        
     // Equivalent object id applies to hard links only.
-    int  equivalentObjectId;
+    __s32 equivalentObjectId;

    
     // Alias is for symlinks only.
     char alias[YAFFS_MAX_ALIAS_LENGTH + 1];
Index: yaffs/devextras.h
===================================================================
--- yaffs.orig/devextras.h
+++ yaffs/devextras.h
@@ -33,9 +33,11 @@


// User space defines

-typedef unsigned char   __u8;
-typedef unsigned short  __u16;
-typedef unsigned        __u32;
+typedef int32_t   __s32;
+
+typedef u_int8_t  __u8;
+typedef u_int16_t __u16;
+typedef u_int32_t __u32;



/*