mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	A number of small QOL changes related to lfs_util.h
- Removed stdlib includes from lfs.h, these should all go through lfs_util.h to let users override these definitions if stdlib is unavailable on their system. - Changed the name of the LFS_CONFIG macro to LFS_UTIL to avoid confusion with the lfs_config struct. This also hints that LFS_UTIL is related to lfs_util.h. LFS_UTIL allows the user to override lfs_util.h so they can provide their own system-level dependencies such as malloc, tracing, builtins, stdint definitions, string.h, and others. - Moved error code definitions to lfs_util.h. This lets users override the error codes to replace them with their own error codes and avoid a translation layer in some situations. Note the error codes must still be in the range of a negative int.
This commit is contained in:
		
							
								
								
									
										1
									
								
								lfs.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								lfs.c
									
									
									
									
									
								
							| @@ -5,7 +5,6 @@ | |||||||
|  * SPDX-License-Identifier: BSD-3-Clause |  * SPDX-License-Identifier: BSD-3-Clause | ||||||
|  */ |  */ | ||||||
| #include "lfs.h" | #include "lfs.h" | ||||||
| #include "lfs_util.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /// Caching block device operations /// | /// Caching block device operations /// | ||||||
|   | |||||||
							
								
								
									
										22
									
								
								lfs.h
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								lfs.h
									
									
									
									
									
								
							| @@ -7,8 +7,7 @@ | |||||||
| #ifndef LFS_H | #ifndef LFS_H | ||||||
| #define LFS_H | #define LFS_H | ||||||
|  |  | ||||||
| #include <stdint.h> | #include "lfs_util.h" | ||||||
| #include <stdbool.h> |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" | extern "C" | ||||||
| @@ -66,25 +65,6 @@ typedef uint32_t lfs_block_t; | |||||||
| #define LFS_ATTR_MAX 1022 | #define LFS_ATTR_MAX 1022 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Possible error codes, these are negative to allow |  | ||||||
| // valid positive return values |  | ||||||
| enum lfs_error { |  | ||||||
|     LFS_ERR_OK          = 0,    // No error |  | ||||||
|     LFS_ERR_IO          = -5,   // Error during device operation |  | ||||||
|     LFS_ERR_CORRUPT     = -84,  // Corrupted |  | ||||||
|     LFS_ERR_NOENT       = -2,   // No directory entry |  | ||||||
|     LFS_ERR_EXIST       = -17,  // Entry already exists |  | ||||||
|     LFS_ERR_NOTDIR      = -20,  // Entry is not a dir |  | ||||||
|     LFS_ERR_ISDIR       = -21,  // Entry is a dir |  | ||||||
|     LFS_ERR_NOTEMPTY    = -39,  // Dir is not empty |  | ||||||
|     LFS_ERR_BADF        = -9,   // Bad file number |  | ||||||
|     LFS_ERR_FBIG        = -27,  // File too large |  | ||||||
|     LFS_ERR_INVAL       = -22,  // Invalid parameter |  | ||||||
|     LFS_ERR_NOSPC       = -28,  // No space left on device |  | ||||||
|     LFS_ERR_NOMEM       = -12,  // No more memory available |  | ||||||
|     LFS_ERR_NOATTR      = -61,  // No data/attr available |  | ||||||
|     LFS_ERR_NAMETOOLONG = -36,  // File name too long |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| // File types | // File types | ||||||
| enum lfs_type { | enum lfs_type { | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
| #include "lfs_util.h" | #include "lfs_util.h" | ||||||
|  |  | ||||||
| // Only compile if user does not provide custom config | // Only compile if user does not provide custom config | ||||||
| #ifndef LFS_CONFIG | #ifndef LFS_UTIL | ||||||
|  |  | ||||||
|  |  | ||||||
| // Software CRC implementation with small lookup table | // Software CRC implementation with small lookup table | ||||||
|   | |||||||
							
								
								
									
										43
									
								
								lfs_util.h
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								lfs_util.h
									
									
									
									
									
								
							| @@ -3,20 +3,21 @@ | |||||||
|  * |  * | ||||||
|  * Copyright (c) 2017, Arm Limited. All rights reserved. |  * Copyright (c) 2017, Arm Limited. All rights reserved. | ||||||
|  * SPDX-License-Identifier: BSD-3-Clause |  * SPDX-License-Identifier: BSD-3-Clause | ||||||
|  |  * | ||||||
|  |  * Can be overridden by users with their own configuration by defining | ||||||
|  |  * LFS_UTIL as a header file (-DLFS_UTIL=my_lfs_util.h) | ||||||
|  |  * | ||||||
|  |  * If LFS_UTIL is defined, none of the default definitions will be | ||||||
|  |  * emitted and must be provided by the user's header file. To start, I would | ||||||
|  |  * suggest copying lfs_util.h and modifying as needed. | ||||||
|  */ |  */ | ||||||
| #ifndef LFS_UTIL_H | #ifndef LFS_UTIL_H | ||||||
| #define LFS_UTIL_H | #define LFS_UTIL_H | ||||||
|  |  | ||||||
| // Users can override lfs_util.h with their own configuration by defining | #ifdef LFS_UTIL | ||||||
| // LFS_CONFIG as a header file to include (-DLFS_CONFIG=lfs_config.h). |  | ||||||
| // |  | ||||||
| // If LFS_CONFIG is used, none of the default utils will be emitted and must be |  | ||||||
| // provided by the config file. To start, I would suggest copying lfs_util.h |  | ||||||
| // and modifying as needed. |  | ||||||
| #ifdef LFS_CONFIG |  | ||||||
| #define LFS_STRINGIZE(x) LFS_STRINGIZE2(x) | #define LFS_STRINGIZE(x) LFS_STRINGIZE2(x) | ||||||
| #define LFS_STRINGIZE2(x) #x | #define LFS_STRINGIZE2(x) #x | ||||||
| #include LFS_STRINGIZE(LFS_CONFIG) | #include LFS_STRINGIZE(LFS_UTIL) | ||||||
| #else | #else | ||||||
|  |  | ||||||
| // System includes | // System includes | ||||||
| @@ -44,6 +45,28 @@ extern "C" | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // Possible error codes, these are negative to allow valid positive | ||||||
|  | // return values. May be redefined to system error codes as long as | ||||||
|  | // they are negative. | ||||||
|  | enum lfs_error { | ||||||
|  |     LFS_ERR_OK          = 0,    // No error | ||||||
|  |     LFS_ERR_IO          = -5,   // Error during device operation | ||||||
|  |     LFS_ERR_CORRUPT     = -84,  // Corrupted | ||||||
|  |     LFS_ERR_NOENT       = -2,   // No directory entry | ||||||
|  |     LFS_ERR_EXIST       = -17,  // Entry already exists | ||||||
|  |     LFS_ERR_NOTDIR      = -20,  // Entry is not a dir | ||||||
|  |     LFS_ERR_ISDIR       = -21,  // Entry is a dir | ||||||
|  |     LFS_ERR_NOTEMPTY    = -39,  // Dir is not empty | ||||||
|  |     LFS_ERR_BADF        = -9,   // Bad file number | ||||||
|  |     LFS_ERR_FBIG        = -27,  // File too large | ||||||
|  |     LFS_ERR_INVAL       = -22,  // Invalid parameter | ||||||
|  |     LFS_ERR_NOSPC       = -28,  // No space left on device | ||||||
|  |     LFS_ERR_NOMEM       = -12,  // No more memory available | ||||||
|  |     LFS_ERR_NOATTR      = -61,  // No data/attr available | ||||||
|  |     LFS_ERR_NAMETOOLONG = -36,  // File name too long | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| // Macros, may be replaced by system specific wrappers. Arguments to these | // Macros, may be replaced by system specific wrappers. Arguments to these | ||||||
| // macros must not have side-effects as the macros can be removed for a smaller | // macros must not have side-effects as the macros can be removed for a smaller | ||||||
| // code footprint | // code footprint | ||||||
| @@ -146,8 +169,8 @@ static inline uint32_t lfs_popc(uint32_t a) { | |||||||
|  |  | ||||||
| // Find the sequence comparison of a and b, this is the distance | // Find the sequence comparison of a and b, this is the distance | ||||||
| // between a and b ignoring overflow | // between a and b ignoring overflow | ||||||
| static inline int lfs_scmp(uint32_t a, uint32_t b) { | static inline int32_t lfs_scmp(uint32_t a, uint32_t b) { | ||||||
|     return (int)(unsigned)(a - b); |     return (int32_t)(uint32_t)(a - b); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Convert between 32-bit little-endian and native order | // Convert between 32-bit little-endian and native order | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user