mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	Fixes to use lfs_filebd on windows platforms
There are two issues, when using the file-based block device emulation on Windows Platforms: 1. There is no fsync implementation available. This needs to be mapped to a Windows-specific FlushFileBuffers system call. 2. The block device file needs to be opened as binary file (O_BINARY) The corresponding flag is not required for Linux.
This commit is contained in:
		
				
					committed by
					
						 Christopher Haster
						Christopher Haster
					
				
			
			
				
	
			
			
			
						parent
						
							9c7e232086
						
					
				
				
					commit
					1e038c81fc
				
			| @@ -10,6 +10,10 @@ | |||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
|  |  | ||||||
|  | #ifdef _WIN32 | ||||||
|  | #include <windows.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
| int lfs_filebd_createcfg(const struct lfs_config *cfg, const char *path, | int lfs_filebd_createcfg(const struct lfs_config *cfg, const char *path, | ||||||
|         const struct lfs_filebd_config *bdcfg) { |         const struct lfs_filebd_config *bdcfg) { | ||||||
|     LFS_FILEBD_TRACE("lfs_filebd_createcfg(%p {.context=%p, " |     LFS_FILEBD_TRACE("lfs_filebd_createcfg(%p {.context=%p, " | ||||||
| @@ -27,7 +31,12 @@ int lfs_filebd_createcfg(const struct lfs_config *cfg, const char *path, | |||||||
|     bd->cfg = bdcfg; |     bd->cfg = bdcfg; | ||||||
|  |  | ||||||
|     // open file |     // open file | ||||||
|  |     #ifdef _WIN32 | ||||||
|  |     bd->fd = open(path, O_RDWR | O_CREAT | O_BINARY, 0666); | ||||||
|  |     #else | ||||||
|     bd->fd = open(path, O_RDWR | O_CREAT, 0666); |     bd->fd = open(path, O_RDWR | O_CREAT, 0666); | ||||||
|  |     #endif | ||||||
|  |  | ||||||
|     if (bd->fd < 0) { |     if (bd->fd < 0) { | ||||||
|         int err = -errno; |         int err = -errno; | ||||||
|         LFS_FILEBD_TRACE("lfs_filebd_createcfg -> %d", err); |         LFS_FILEBD_TRACE("lfs_filebd_createcfg -> %d", err); | ||||||
| @@ -193,7 +202,11 @@ int lfs_filebd_sync(const struct lfs_config *cfg) { | |||||||
|     LFS_FILEBD_TRACE("lfs_filebd_sync(%p)", (void*)cfg); |     LFS_FILEBD_TRACE("lfs_filebd_sync(%p)", (void*)cfg); | ||||||
|     // file sync |     // file sync | ||||||
|     lfs_filebd_t *bd = cfg->context; |     lfs_filebd_t *bd = cfg->context; | ||||||
|  |     #ifdef _WIN32 | ||||||
|  |     int err = FlushFileBuffers((HANDLE) _get_osfhandle(fd)) ? 0 : -1; | ||||||
|  |     #else | ||||||
|     int err = fsync(bd->fd); |     int err = fsync(bd->fd); | ||||||
|  |     #endif | ||||||
|     if (err) { |     if (err) { | ||||||
|         err = -errno; |         err = -errno; | ||||||
|         LFS_FILEBD_TRACE("lfs_filebd_sync -> %d", 0); |         LFS_FILEBD_TRACE("lfs_filebd_sync -> %d", 0); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user