1 #ifndef jffs2_private_h 2 #define jffs2_private_h 3 4 #include <jffs2/jffs2.h> 5 6 7 struct b_node { 8 u32 offset; 9 struct b_node *next; 10 enum { CRC_UNKNOWN = 0, CRC_OK, CRC_BAD } datacrc; 11 }; 12 13 struct b_list { 14 struct b_node *listTail; 15 struct b_node *listHead; 16 #ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS 17 struct b_node *listLast; 18 int (*listCompare)(struct b_node *new, struct b_node *node); 19 u32 listLoops; 20 #endif 21 u32 listCount; 22 struct mem_block *listMemBase; 23 }; 24 25 struct b_lists { 26 struct b_list dir; 27 struct b_list frag; 28 void *readbuf; 29 }; 30 31 struct b_compr_info { 32 u32 num_frags; 33 u32 compr_sum; 34 u32 decompr_sum; 35 }; 36 37 struct b_jffs2_info { 38 struct b_compr_info compr_info[JFFS2_NUM_COMPR]; 39 }; 40 41 static inline int 42 hdr_crc(struct jffs2_unknown_node *node) 43 { 44 #if 1 45 u32 crc = crc32_no_comp(0, (unsigned char *)node, sizeof(struct jffs2_unknown_node) - 4); 46 #else 47 /* what's the semantics of this? why is this here? */ 48 u32 crc = crc32_no_comp(~0, (unsigned char *)node, sizeof(struct jffs2_unknown_node) - 4); 49 50 crc ^= ~0; 51 #endif 52 if (node->hdr_crc != crc) { 53 return 0; 54 } else { 55 return 1; 56 } 57 } 58 59 static inline int 60 dirent_crc(struct jffs2_raw_dirent *node) 61 { 62 if (node->node_crc != crc32_no_comp(0, (unsigned char *)node, sizeof(struct jffs2_raw_dirent) - 8)) { 63 return 0; 64 } else { 65 return 1; 66 } 67 } 68 69 static inline int 70 dirent_name_crc(struct jffs2_raw_dirent *node) 71 { 72 if (node->name_crc != crc32_no_comp(0, (unsigned char *)&(node->name), node->nsize)) { 73 return 0; 74 } else { 75 return 1; 76 } 77 } 78 79 static inline int 80 inode_crc(struct jffs2_raw_inode *node) 81 { 82 if (node->node_crc != crc32_no_comp(0, (unsigned char *)node, sizeof(struct jffs2_raw_inode) - 8)) { 83 return 0; 84 } else { 85 return 1; 86 } 87 } 88 89 static inline int 90 data_crc(struct jffs2_raw_inode *node) 91 { 92 if (node->data_crc != crc32_no_comp(0, (unsigned char *) 93 ((int) &node->node_crc + sizeof (node->node_crc)), 94 node->csize)) { 95 return 0; 96 } else { 97 return 1; 98 } 99 } 100 101 #if defined(CONFIG_SYS_JFFS2_SORT_FRAGMENTS) 102 /* External merge sort. */ 103 int sort_list(struct b_list *list); 104 #endif 105 #endif /* jffs2_private.h */ 106