mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	Add version info for software library and on-disk structures
An annoying part of filesystems is that the software library can change independently of the on-disk structures. For this reason versioning is very important, and must be handled separately for the software and on-disk parts. In this patch, littlefs provides two version numbers at compile time, with major and minor parts, in the form of 6 macros. LFS_VERSION // Library version, uint32_t encoded LFS_VERSION_MAJOR // Major - Backwards incompatible changes LFS_VERSION_MINOR // Minor - Feature additions LFS_DISK_VERSION // On-disk version, uint32_t encoded LFS_DISK_VERSION_MAJOR // Major - Backwards incompatible changes LFS_DISK_VERSION_MINOR // Minor - Feature additions Note that littlefs will error if it finds a major version number that is different, or a minor version number that has regressed.
This commit is contained in:
		
							
								
								
									
										11
									
								
								lfs.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								lfs.c
									
									
									
									
									
								
							| @@ -2067,7 +2067,7 @@ int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) { | ||||
|         .d.type = LFS_TYPE_SUPERBLOCK, | ||||
|         .d.elen = sizeof(superblock.d) - sizeof(superblock.d.magic) - 4, | ||||
|         .d.nlen = sizeof(superblock.d.magic), | ||||
|         .d.version = 0x00010001, | ||||
|         .d.version = LFS_DISK_VERSION, | ||||
|         .d.magic = {"littlefs"}, | ||||
|         .d.block_size  = lfs->cfg->block_size, | ||||
|         .d.block_count = lfs->cfg->block_count, | ||||
| @@ -2140,10 +2140,11 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) { | ||||
|         return LFS_ERR_CORRUPT; | ||||
|     } | ||||
|  | ||||
|     if (superblock.d.version > (0x00010001 | 0x0000ffff)) { | ||||
|         LFS_ERROR("Invalid version %d.%d", | ||||
|                 0xffff & (superblock.d.version >> 16), | ||||
|                 0xffff & (superblock.d.version >> 0)); | ||||
|     uint16_t major_version = (0xffff & (superblock.d.version >> 16)); | ||||
|     uint16_t minor_version = (0xffff & (superblock.d.version >>  0)); | ||||
|     if ((major_version != LFS_DISK_VERSION_MAJOR || | ||||
|          minor_version > LFS_DISK_VERSION_MINOR)) { | ||||
|         LFS_ERROR("Invalid version %d.%d", major_version, minor_version); | ||||
|         return LFS_ERR_INVAL; | ||||
|     } | ||||
|  | ||||
|   | ||||
							
								
								
									
										17
									
								
								lfs.h
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								lfs.h
									
									
									
									
									
								
							| @@ -22,6 +22,23 @@ | ||||
| #include <stdbool.h> | ||||
|  | ||||
|  | ||||
| /// Version info /// | ||||
|  | ||||
| // Software library version | ||||
| // Major (top-nibble), incremented on backwards incompatible changes | ||||
| // Minor (bottom-nibble), incremented on feature additions | ||||
| #define LFS_VERSION 0x00010002 | ||||
| #define LFS_VERSION_MAJOR (0xffff & (LFS_VERSION >> 16)) | ||||
| #define LFS_VERSION_MINOR (0xffff & (LFS_VERSION >>  0)) | ||||
|  | ||||
| // Version of On-disk data structures | ||||
| // Major (top-nibble), incremented on backwards incompatible changes | ||||
| // Minor (bottom-nibble), incremented on feature additions | ||||
| #define LFS_DISK_VERSION 0x00010001 | ||||
| #define LFS_DISK_VERSION_MAJOR (0xffff & (LFS_DISK_VERSION >> 16)) | ||||
| #define LFS_DISK_VERSION_MINOR (0xffff & (LFS_DISK_VERSION >>  0)) | ||||
|  | ||||
|  | ||||
| /// Definitions /// | ||||
|  | ||||
| // Type definitions | ||||
|   | ||||
		Reference in New Issue
	
	Block a user