mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 16:14:16 +01:00 
			
		
		
		
	Merge branch 'master' into test-revamp
This commit is contained in:
		| @@ -115,6 +115,9 @@ the filesystem until sync or close is called on the file. | |||||||
|  |  | ||||||
| ## Other notes | ## Other notes | ||||||
|  |  | ||||||
|  | Littlefs is written in C, and specifically should compile with any compiler | ||||||
|  | that conforms to the `C99` standard. | ||||||
|  |  | ||||||
| All littlefs calls have the potential to return a negative error code. The | All littlefs calls have the potential to return a negative error code. The | ||||||
| errors can be either one of those found in the `enum lfs_error` in | errors can be either one of those found in the `enum lfs_error` in | ||||||
| [lfs.h](lfs.h), or an error returned by the user's block device operations. | [lfs.h](lfs.h), or an error returned by the user's block device operations. | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								SPEC.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								SPEC.md
									
									
									
									
									
								
							| @@ -289,7 +289,7 @@ Layout of the name tag: | |||||||
| ``` | ``` | ||||||
|         tag                          data |         tag                          data | ||||||
| [--      32      --][---        variable length        ---] | [--      32      --][---        variable length        ---] | ||||||
| [1| 3| 8 | 10 | 10 ][---            (size)             ---] | [1| 3| 8 | 10 | 10 ][---          (size * 8)           ---] | ||||||
|  ^  ^  ^    ^    ^- size                   ^- file name |  ^  ^  ^    ^    ^- size                   ^- file name | ||||||
|  |  |  |    '------ id |  |  |  |    '------ id | ||||||
|  |  |  '----------- file type |  |  |  '----------- file type | ||||||
| @@ -470,7 +470,7 @@ Layout of the inline-struct tag: | |||||||
| ``` | ``` | ||||||
|         tag                          data |         tag                          data | ||||||
| [--      32      --][---        variable length        ---] | [--      32      --][---        variable length        ---] | ||||||
| [1|- 11 -| 10 | 10 ][---            (size)             ---] | [1|- 11 -| 10 | 10 ][---           (size * 8)          ---] | ||||||
|  ^    ^     ^    ^- size                    ^- inline data |  ^    ^     ^    ^- size                    ^- inline data | ||||||
|  |    |     '------ id |  |    |     '------ id | ||||||
|  |    '------------ type (0x201) |  |    '------------ type (0x201) | ||||||
| @@ -556,7 +556,7 @@ Layout of the user-attr tag: | |||||||
| ``` | ``` | ||||||
|         tag                          data |         tag                          data | ||||||
| [--      32      --][---        variable length        ---] | [--      32      --][---        variable length        ---] | ||||||
| [1| 3| 8 | 10 | 10 ][---            (size)             ---] | [1| 3| 8 | 10 | 10 ][---           (size * 8)          ---] | ||||||
|  ^  ^  ^    ^    ^- size                    ^- attr data |  ^  ^  ^    ^    ^- size                    ^- attr data | ||||||
|  |  |  |    '------ id |  |  |  |    '------ id | ||||||
|  |  |  '----------- attr type |  |  |  '----------- attr type | ||||||
| @@ -764,9 +764,9 @@ Layout of the CRC tag: | |||||||
| ``` | ``` | ||||||
|         tag                                    data |         tag                                    data | ||||||
| [--      32      --][--      32      --|---        variable length        ---] | [--      32      --][--      32      --|---        variable length        ---] | ||||||
| [1| 3| 8 | 10 | 10 ][--      32      --|---            (size)             ---] | [1| 3| 8 | 10 | 10 ][--      32      --|---        (size * 8 - 32)        ---] | ||||||
|  ^  ^  ^    ^    ^            ^- crc                             ^- padding |  ^  ^  ^    ^    ^            ^- crc                             ^- padding | ||||||
|  |  |  |    |    '- size (12) |  |  |  |    |    '- size | ||||||
|  |  |  |    '------ id (0x3ff) |  |  |  |    '------ id (0x3ff) | ||||||
|  |  |  '----------- valid state |  |  |  '----------- valid state | ||||||
|  |  '-------------- type1 (0x5) |  |  '-------------- type1 (0x5) | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								lfs.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								lfs.c
									
									
									
									
									
								
							| @@ -71,6 +71,21 @@ static int lfs_bd_read(lfs_t *lfs, | |||||||
|             diff = lfs_min(diff, rcache->off-off); |             diff = lfs_min(diff, rcache->off-off); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         if (size >= hint && off % lfs->cfg->read_size == 0 && | ||||||
|  |                 size >= lfs->cfg->read_size) { | ||||||
|  |             // bypass cache? | ||||||
|  |             diff = lfs_aligndown(diff, lfs->cfg->read_size); | ||||||
|  |             int err = lfs->cfg->read(lfs->cfg, block, off, data, diff); | ||||||
|  |             if (err) { | ||||||
|  |                 return err; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             data += diff; | ||||||
|  |             off += diff; | ||||||
|  |             size -= diff; | ||||||
|  |             continue; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         // load to cache, first condition can no longer fail |         // load to cache, first condition can no longer fail | ||||||
|         LFS_ASSERT(block < lfs->cfg->block_count); |         LFS_ASSERT(block < lfs->cfg->block_count); | ||||||
|         rcache->block = block; |         rcache->block = block; | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								lfs_util.h
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								lfs_util.h
									
									
									
									
									
								
							| @@ -50,31 +50,35 @@ extern "C" | |||||||
|  |  | ||||||
| // Logging functions | // Logging functions | ||||||
| #ifdef LFS_YES_TRACE | #ifdef LFS_YES_TRACE | ||||||
| #define LFS_TRACE(fmt, ...) \ | #define LFS_TRACE_(fmt, ...) \ | ||||||
|     printf("%s:%d:trace: " fmt "\n", __FILE__, __LINE__, __VA_ARGS__) |     printf("%s:%d:trace: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) | ||||||
|  | #define LFS_TRACE(...) LFS_TRACE_(__VA_ARGS__, "") | ||||||
| #else | #else | ||||||
| #define LFS_TRACE(fmt, ...) | #define LFS_TRACE(...) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifndef LFS_NO_DEBUG | #ifndef LFS_NO_DEBUG | ||||||
| #define LFS_DEBUG(fmt, ...) \ | #define LFS_DEBUG_(fmt, ...) \ | ||||||
|     printf("%s:%d:debug: " fmt "\n", __FILE__, __LINE__, __VA_ARGS__) |     printf("%s:%d:debug: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) | ||||||
|  | #define LFS_DEBUG(...) LFS_DEBUG_(__VA_ARGS__, "") | ||||||
| #else | #else | ||||||
| #define LFS_DEBUG(fmt, ...) | #define LFS_DEBUG(...) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifndef LFS_NO_WARN | #ifndef LFS_NO_WARN | ||||||
| #define LFS_WARN(fmt, ...) \ | #define LFS_WARN_(fmt, ...) \ | ||||||
|     printf("%s:%d:warn: " fmt "\n", __FILE__, __LINE__, __VA_ARGS__) |     printf("%s:%d:warn: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) | ||||||
|  | #define LFS_WARN(...) LFS_WARN_(__VA_ARGS__, "") | ||||||
| #else | #else | ||||||
| #define LFS_WARN(fmt, ...) | #define LFS_WARN(...) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifndef LFS_NO_ERROR | #ifndef LFS_NO_ERROR | ||||||
| #define LFS_ERROR(fmt, ...) \ | #define LFS_ERROR_(fmt, ...) \ | ||||||
|     printf("%s:%d:error: " fmt "\n", __FILE__, __LINE__, __VA_ARGS__) |     printf("%s:%d:error: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) | ||||||
|  | #define LFS_ERROR(...) LFS_ERROR_(__VA_ARGS__, "") | ||||||
| #else | #else | ||||||
| #define LFS_ERROR(fmt, ...) | #define LFS_ERROR(...) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Runtime assertions | // Runtime assertions | ||||||
| @@ -107,7 +111,7 @@ static inline uint32_t lfs_alignup(uint32_t a, uint32_t alignment) { | |||||||
|     return lfs_aligndown(a + alignment-1, alignment); |     return lfs_aligndown(a + alignment-1, alignment); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Find the next smallest power of 2 less than or equal to a | // Find the smallest power of 2 greater than or equal to a | ||||||
| static inline uint32_t lfs_npw2(uint32_t a) { | static inline uint32_t lfs_npw2(uint32_t a) { | ||||||
| #if !defined(LFS_NO_INTRINSICS) && (defined(__GNUC__) || defined(__CC_ARM)) | #if !defined(LFS_NO_INTRINSICS) && (defined(__GNUC__) || defined(__CC_ARM)) | ||||||
|     return 32 - __builtin_clz(a-1); |     return 32 - __builtin_clz(a-1); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user