mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 00:32:38 +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 $^ | ||||
|  | ||||
| .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 | ||||
| 	./$< | ||||
|  | ||||
|   | ||||
							
								
								
									
										19
									
								
								lfs.h
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								lfs.h
									
									
									
									
									
								
							| @@ -24,8 +24,9 @@ enum lfs_error { | ||||
| }; | ||||
|  | ||||
| enum lfs_type { | ||||
|     LFS_TYPE_REG = 1, | ||||
|     LFS_TYPE_DIR = 2, | ||||
|     LFS_TYPE_REG        = 0x01, | ||||
|     LFS_TYPE_DIR        = 0x02, | ||||
|     LFS_TYPE_SUPERBLOCK = 0x10, | ||||
| }; | ||||
|  | ||||
| enum lfs_open_flags { | ||||
| @@ -58,7 +59,7 @@ struct lfs_info { | ||||
| }; | ||||
|  | ||||
| typedef struct lfs_entry { | ||||
|     lfs_block_t dir[2]; | ||||
|     lfs_block_t pair[2]; | ||||
|     lfs_off_t off; | ||||
|  | ||||
|     struct lfs_disk_entry { | ||||
| @@ -100,14 +101,17 @@ typedef struct lfs_dir { | ||||
| } lfs_dir_t; | ||||
|  | ||||
| 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 { | ||||
|         uint32_t rev; | ||||
|         uint32_t size; | ||||
|         lfs_block_t root[2]; | ||||
|         uint16_t type; | ||||
|         uint16_t len; | ||||
|         uint32_t version; | ||||
|         char magic[8]; | ||||
|         uint32_t block_size; | ||||
|         uint32_t block_count; | ||||
|         lfs_block_t root[2]; | ||||
|     } d; | ||||
| } lfs_superblock_t; | ||||
|  | ||||
| @@ -123,7 +127,6 @@ typedef struct lfs { | ||||
|     const struct lfs_bd_ops *bd_ops; | ||||
|  | ||||
|     lfs_block_t root[2]; | ||||
|     lfs_block_t cwd[2]; | ||||
|     struct { | ||||
|         lfs_block_t begin; | ||||
|         lfs_block_t end; | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
| #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] = { | ||||
|         0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, | ||||
|         0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, | ||||
|   | ||||
| @@ -31,7 +31,7 @@ static inline int lfs_scmp(uint32_t a, uint32_t 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 ---" | ||||
| ln -f -s /dev/null blocks/0 | ||||
| ln -f -s /dev/null blocks/1 | ||||
| tests/test.py << TEST | ||||
|     lfs_format(&lfs, &config) => LFS_ERROR_CORRUPT; | ||||
| TEST | ||||
| rm blocks/0 | ||||
| rm blocks/0 blocks/1 | ||||
|  | ||||
| echo "--- Basic mounting ---" | ||||
| tests/test.py << TEST | ||||
|     lfs_format(&lfs, &config) => 0; | ||||
| TEST | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &config) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user