cmake_minimum_required(VERSION 2.8)\r
\r
\r
+\r
#LIBRARY\r
include_directories(. lwext4)\r
aux_source_directory(lwext4 LWEXT4_SRC)\r
#Library size print\r
add_custom_target(lib_size ALL DEPENDS lwext4 COMMAND ${SIZE} -B liblwext4.a)\r
else()\r
+ #Warning setup\r
+ set_target_properties(lwext4 PROPERTIES COMPILE_FLAGS "-Wall -Wextra -pedantic -std=gnu99")\r
#Library size print\r
add_custom_target(lib_size ALL DEPENDS lwext4 COMMAND size -B liblwext4.a)\r
#Generic example target\r
typedef struct {\r
uint32_t inode;\r
uint16_t entry_length;\r
- uint8_t name_length;\r
- union {\r
- uint8_t name_length_high;\r
- uint8_t inode_type;\r
- };\r
+ uint8_t name_length;\r
+ uint8_t inode_type;\r
uint8_t name[255];\r
}ext4_direntry;\r
\r
exit(-1);\r
}\r
\r
+ winsock_fini();\r
return fd;\r
}\r
\r
rc = ext4_mount_point_stats(mount_point, &stats);\r
\r
if(rc != EOK)\r
- return;\r
+ return rc;\r
\r
if(verbose){\r
printf("\tinodes_count = %d\n", stats.inodes_count);\r
\r
/**@brief Mount point OS dependent lock*/\r
#define EXT4_MP_LOCK(_m) \\r
- do { (_m)->os_locks ? (_m)->os_locks->lock() : 0; }while(0)\r
+ do { if((_m)->os_locks) (_m)->os_locks->lock(); }while(0)\r
\r
/**@brief Mount point OS dependent unlock*/\r
#define EXT4_MP_UNLOCK(_m) \\r
- do { (_m)->os_locks ? (_m)->os_locks->unlock() : 0; }while(0)\r
+ do { if((_m)->os_locks) (_m)->os_locks->unlock(); }while(0)\r
\r
/**@brief Mount point descrpitor.*/\r
struct ext4_mountpoint {\r
#if CONFIG_DEBUG_PRINTF
/**@brief Debug printf.*/
#define ext4_dprintf(m, ...) do { \
- (m & ext4_dmask_get()) ? printf(__VA_ARGS__) : (void)0; \
+ if(m & ext4_dmask_get()) printf(__VA_ARGS__); \
fflush(stdout); \
}while(0)
#else
\r
if ((ext4_get32(sb, rev_level) == 0) &&\r
(ext4_get32(sb, minor_rev_level) < 5))\r
- v |= ((uint16_t)de->name_length_high) << 8;\r
+ v |= ((uint16_t)de->in.name_length_high) << 8;\r
\r
return v;\r
}\r
\r
if ((ext4_get32(sb, rev_level) == 0) &&\r
(ext4_get32(sb, minor_rev_level) < 5))\r
- de->name_length_high = len >> 8;\r
+ de->in.name_length_high = len >> 8;\r
}\r
\r
\r
{\r
if ((ext4_get32(sb, rev_level) > 0) ||\r
(ext4_get32(sb, minor_rev_level) >= 5))\r
- return de->inode_type;\r
+ return de->in.inode_type;\r
\r
return EXT4_DIRECTORY_FILETYPE_UNKNOWN;\r
}\r
{\r
if ((ext4_get32(sb, rev_level) > 0) ||\r
(ext4_get32(sb, minor_rev_level) >= 5))\r
- de->inode_type = type;\r
+ de->in.inode_type = type;\r
}\r
\r
/****************************************************************************/\r
/* Cut tail of current entry */\r
ext4_dir_entry_ll_set_entry_length(dentry, used_space);\r
struct ext4_directory_entry_ll *new_entry =\r
- (void *) dentry + used_space;\r
+ (void *) ((uint8_t *)dentry + used_space);\r
ext4_dir_write_entry(sb, new_entry,\r
free_space, child, name, name_len);\r
\r
}\r
\r
/* Jump to the next entry */\r
- dentry = (void *) dentry + rec_len;\r
+ dentry = (void *) ((uint8_t *)dentry + rec_len);\r
}\r
\r
/* No free space found for new entry */\r
uint32_t count = ext4_dir_dx_countlimit_get_count(countlimit);\r
\r
struct ext4_directory_dx_entry *start_index = index_block->entries;\r
- size_t bytes = (void *) (start_index + count) - (void *) (new_index_entry);\r
+ size_t bytes = (uint8_t *) (start_index + count) - (uint8_t *) (new_index_entry);\r
\r
memmove(new_index_entry + 1, new_index_entry, bytes);\r
\r
uint32_t block_size =\r
ext4_sb_get_block_size(&inode_ref->fs->sb);\r
\r
- void *entry_buffer = malloc(block_size);\r
+ uint8_t *entry_buffer = malloc(block_size);\r
if (entry_buffer == NULL)\r
return ENOMEM;\r
\r
\r
/* Load all valid entries to the buffer */\r
struct ext4_directory_entry_ll *dentry = (void *)old_data_block->data;\r
- void *entry_buffer_ptr = entry_buffer;\r
+ uint8_t *entry_buffer_ptr = entry_buffer;\r
while ((void *)dentry < (void *)(old_data_block->data + block_size)) {\r
/* Read only valid entries */\r
if (ext4_dir_entry_ll_get_inode(dentry) && dentry->name_length) {\r
idx++;\r
}\r
\r
- dentry = (void *) dentry +\r
- ext4_dir_entry_ll_get_entry_length(dentry);\r
+ dentry = (void *)((uint8_t *)dentry +\r
+ ext4_dir_entry_ll_get_entry_length(dentry));\r
}\r
\r
/* Sort all entries */\r
/* Compute the checksum only if the filesystem supports it */
if (ext4_sb_check_read_only(sb,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
- void *base = bg;
- void *checksum = &bg->checksum;
+ uint8_t *base = (uint8_t *)bg;
+ uint8_t *checksum = (uint8_t *)&bg->checksum;
uint32_t offset = (uint32_t) (checksum - base);
#define EXT4_DIRECTORY_FILETYPE_SOCK 6
#define EXT4_DIRECTORY_FILETYPE_SYMLINK 7
+union ext4_directory_entry_ll_internal{
+ uint8_t name_length_high; /* Higher 8 bits of name length */
+ uint8_t inode_type; /* Type of referenced inode (in rev >= 0.5) */
+} __attribute__ ((packed));
+
/**
* Linked list directory entry structure
*/
uint16_t entry_length; /* Distance to the next directory entry */
uint8_t name_length; /* Lower 8 bits of name length */
- union {
- uint8_t name_length_high; /* Higher 8 bits of name length */
- uint8_t inode_type; /* Type of referenced inode (in rev >= 0.5) */
- } __attribute__ ((packed));
+ union ext4_directory_entry_ll_internal in;
uint8_t name[EXT4_DIRECTORY_FILENAME_LEN]; /* Entry name */
} __attribute__((packed)) ;
struct ext4_directory_dx_root {
struct ext4_directory_dx_dot_entry dots[2];
struct ext4_directory_dx_root_info info;
- struct ext4_directory_dx_entry entries[0];
+ struct ext4_directory_dx_entry entries[];
};
struct ext4_fake_directory_entry {
struct ext4_directory_dx_node {
struct ext4_fake_directory_entry fake;
- struct ext4_directory_dx_entry entries[0];
+ struct ext4_directory_dx_entry entries[];
};
struct ext4_directory_dx_block {
#define EXT4_EXTENT_MAGIC 0xF30A
#define EXT4_EXTENT_FIRST(header) \
- ((struct ext4_extent *) (((void *) (header)) + sizeof(struct ext4_extent_header)))
+ ((struct ext4_extent *) (((char *) (header)) + sizeof(struct ext4_extent_header)))
#define EXT4_EXTENT_FIRST_INDEX(header) \
- ((struct ext4_extent_index *) (((void *) (header)) + sizeof(struct ext4_extent_header)))
+ ((struct ext4_extent_index *) (((char *) (header)) + sizeof(struct ext4_extent_header)))
/* EXT3 HTree directory indexing */
#define EXT2_HTREE_HALF_MD4_UNSIGNED 4
#define EXT2_HTREE_TEA_UNSIGNED 5
-#define EXT2_HTREE_EOF 0x7FFFFFFF
+#define EXT2_HTREE_EOF 0x7FFFFFFFUL
struct ext4_hash_info {