mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	Restructured directory code
After quite a bit of prototyping, settled on the following functions: - lfs_dir_alloc - create a new dir - lfs_dir_fetch - load and check a dir pair from disk - lfs_dir_commit - save a dir pair to disk - lfs_dir_shift - shrink a dir pair to disk - lfs_dir_append - add a dir entry, creating dirs if needed - lfs_dir_remove - remove a dir entry, dropping dirs if needed Additionally, followed through with a few other tweaks
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -31,7 +31,7 @@ size: $(OBJ) | |||||||
| 	$(SIZE) -t $^ | 	$(SIZE) -t $^ | ||||||
|  |  | ||||||
| .SUFFIXES: | .SUFFIXES: | ||||||
| test: test_format test_dirs test_files test_alloc test_orphan test_paths | test: test_format test_dirs test_files test_alloc test_paths test_orphan | ||||||
| test_%: tests/test_%.sh | test_%: tests/test_%.sh | ||||||
| 	./$< | 	./$< | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								lfs.h
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								lfs.h
									
									
									
									
									
								
							| @@ -24,8 +24,9 @@ enum lfs_error { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| enum lfs_type { | enum lfs_type { | ||||||
|     LFS_TYPE_REG = 1, |     LFS_TYPE_REG        = 0x01, | ||||||
|     LFS_TYPE_DIR = 2, |     LFS_TYPE_DIR        = 0x02, | ||||||
|  |     LFS_TYPE_SUPERBLOCK = 0x10, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| enum lfs_open_flags { | enum lfs_open_flags { | ||||||
| @@ -58,7 +59,7 @@ struct lfs_info { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| typedef struct lfs_entry { | typedef struct lfs_entry { | ||||||
|     lfs_block_t dir[2]; |     lfs_block_t pair[2]; | ||||||
|     lfs_off_t off; |     lfs_off_t off; | ||||||
|  |  | ||||||
|     struct lfs_disk_entry { |     struct lfs_disk_entry { | ||||||
| @@ -100,14 +101,17 @@ typedef struct lfs_dir { | |||||||
| } lfs_dir_t; | } lfs_dir_t; | ||||||
|  |  | ||||||
| typedef struct lfs_superblock { | typedef struct lfs_superblock { | ||||||
|     lfs_block_t pair[2]; |     lfs_block_t dir[2]; //TODO rm me? | ||||||
|  |     lfs_off_t off; | ||||||
|  |  | ||||||
|     struct lfs_disk_superblock { |     struct lfs_disk_superblock { | ||||||
|         uint32_t rev; |         uint16_t type; | ||||||
|         uint32_t size; |         uint16_t len; | ||||||
|         lfs_block_t root[2]; |         uint32_t version; | ||||||
|         char magic[8]; |         char magic[8]; | ||||||
|         uint32_t block_size; |         uint32_t block_size; | ||||||
|         uint32_t block_count; |         uint32_t block_count; | ||||||
|  |         lfs_block_t root[2]; | ||||||
|     } d; |     } d; | ||||||
| } lfs_superblock_t; | } lfs_superblock_t; | ||||||
|  |  | ||||||
| @@ -123,7 +127,6 @@ typedef struct lfs { | |||||||
|     const struct lfs_bd_ops *bd_ops; |     const struct lfs_bd_ops *bd_ops; | ||||||
|  |  | ||||||
|     lfs_block_t root[2]; |     lfs_block_t root[2]; | ||||||
|     lfs_block_t cwd[2]; |  | ||||||
|     struct { |     struct { | ||||||
|         lfs_block_t begin; |         lfs_block_t begin; | ||||||
|         lfs_block_t end; |         lfs_block_t end; | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
| #include "lfs_util.h" | #include "lfs_util.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| uint32_t lfs_crc(const void *buffer, lfs_size_t size, uint32_t crc) { | uint32_t lfs_crc(uint32_t crc, lfs_size_t size, const void *buffer) { | ||||||
|     static const uint32_t rtable[16] = { |     static const uint32_t rtable[16] = { | ||||||
|         0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, |         0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, | ||||||
|         0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, |         0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ static inline int lfs_scmp(uint32_t a, uint32_t b) { | |||||||
|     return (int)(unsigned)(a - b); |     return (int)(unsigned)(a - b); | ||||||
| } | } | ||||||
|  |  | ||||||
| uint32_t lfs_crc(const void *buffer, lfs_size_t size, uint32_t crc); | uint32_t lfs_crc(uint32_t crc, lfs_size_t size, const void *buffer); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -11,12 +11,16 @@ TEST | |||||||
|  |  | ||||||
| echo "--- Invalid superblocks ---" | echo "--- Invalid superblocks ---" | ||||||
| ln -f -s /dev/null blocks/0 | ln -f -s /dev/null blocks/0 | ||||||
|  | ln -f -s /dev/null blocks/1 | ||||||
| tests/test.py << TEST | tests/test.py << TEST | ||||||
|     lfs_format(&lfs, &config) => LFS_ERROR_CORRUPT; |     lfs_format(&lfs, &config) => LFS_ERROR_CORRUPT; | ||||||
| TEST | TEST | ||||||
| rm blocks/0 | rm blocks/0 blocks/1 | ||||||
|  |  | ||||||
| echo "--- Basic mounting ---" | echo "--- Basic mounting ---" | ||||||
|  | tests/test.py << TEST | ||||||
|  |     lfs_format(&lfs, &config) => 0; | ||||||
|  | TEST | ||||||
| tests/test.py << TEST | tests/test.py << TEST | ||||||
|     lfs_mount(&lfs, &config) => 0; |     lfs_mount(&lfs, &config) => 0; | ||||||
|     lfs_unmount(&lfs) => 0; |     lfs_unmount(&lfs) => 0; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user