mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 16:14:16 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			v2.3.0
			...
			fix-trunca
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 8bf45c3a29 | 
							
								
								
									
										5
									
								
								lfs.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								lfs.c
									
									
									
									
									
								
							| @@ -2864,13 +2864,14 @@ int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) { | ||||
|         // lookup new head in ctz skip list | ||||
|         err = lfs_ctz_find(lfs, NULL, &file->cache, | ||||
|                 file->ctz.head, file->ctz.size, | ||||
|                 size, &file->ctz.head, &(lfs_off_t){0}); | ||||
|                 size, &file->block, &file->off); | ||||
|         if (err) { | ||||
|             return err; | ||||
|         } | ||||
|  | ||||
|         file->ctz.head = file->block; | ||||
|         file->ctz.size = size; | ||||
|         file->flags |= LFS_F_DIRTY; | ||||
|         file->flags |= LFS_F_DIRTY | LFS_F_READING; | ||||
|     } else if (size > oldsize) { | ||||
|         lfs_off_t pos = file->pos; | ||||
|  | ||||
|   | ||||
| @@ -11,6 +11,150 @@ tests/test.py << TEST | ||||
|     lfs_format(&lfs, &cfg) => 0; | ||||
| TEST | ||||
|  | ||||
| echo "--- Simple truncate ---" | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &cfg) => 0; | ||||
|     lfs_file_open(&lfs, &file[0], "baldynoop", | ||||
|             LFS_O_WRONLY | LFS_O_CREAT) => 0; | ||||
|  | ||||
|     strcpy((char*)buffer, "hair"); | ||||
|     size = strlen((char*)buffer); | ||||
|     for (lfs_off_t j = 0; j < $LARGESIZE; j += size) { | ||||
|         lfs_file_write(&lfs, &file[0], buffer, size) => size; | ||||
|     } | ||||
|     lfs_file_size(&lfs, &file[0]) => $LARGESIZE; | ||||
|  | ||||
|     lfs_file_close(&lfs, &file[0]) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
| TEST | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &cfg) => 0; | ||||
|     lfs_file_open(&lfs, &file[0], "baldynoop", LFS_O_RDWR) => 0; | ||||
|     lfs_file_size(&lfs, &file[0]) => $LARGESIZE; | ||||
|  | ||||
|     lfs_file_truncate(&lfs, &file[0], $MEDIUMSIZE) => 0; | ||||
|     lfs_file_size(&lfs, &file[0]) => $MEDIUMSIZE; | ||||
|  | ||||
|     lfs_file_close(&lfs, &file[0]) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
| TEST | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &cfg) => 0; | ||||
|     lfs_file_open(&lfs, &file[0], "baldynoop", LFS_O_RDONLY) => 0; | ||||
|     lfs_file_size(&lfs, &file[0]) => $MEDIUMSIZE; | ||||
|  | ||||
|     size = strlen("hair"); | ||||
|     for (lfs_off_t j = 0; j < $MEDIUMSIZE; j += size) { | ||||
|         lfs_file_read(&lfs, &file[0], buffer, size) => size; | ||||
|         memcmp(buffer, "hair", size) => 0; | ||||
|     } | ||||
|     lfs_file_read(&lfs, &file[0], buffer, size) => 0; | ||||
|  | ||||
|     lfs_file_close(&lfs, &file[0]) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
| TEST | ||||
|  | ||||
| echo "--- Truncate and read ---" | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &cfg) => 0; | ||||
|     lfs_file_open(&lfs, &file[0], "baldyread", | ||||
|             LFS_O_WRONLY | LFS_O_CREAT) => 0; | ||||
|  | ||||
|     strcpy((char*)buffer, "hair"); | ||||
|     size = strlen((char*)buffer); | ||||
|     for (lfs_off_t j = 0; j < $LARGESIZE; j += size) { | ||||
|         lfs_file_write(&lfs, &file[0], buffer, size) => size; | ||||
|     } | ||||
|     lfs_file_size(&lfs, &file[0]) => $LARGESIZE; | ||||
|  | ||||
|     lfs_file_close(&lfs, &file[0]) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
| TEST | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &cfg) => 0; | ||||
|     lfs_file_open(&lfs, &file[0], "baldyread", LFS_O_RDWR) => 0; | ||||
|     lfs_file_size(&lfs, &file[0]) => $LARGESIZE; | ||||
|  | ||||
|     lfs_file_truncate(&lfs, &file[0], $MEDIUMSIZE) => 0; | ||||
|     lfs_file_size(&lfs, &file[0]) => $MEDIUMSIZE; | ||||
|  | ||||
|     size = strlen("hair"); | ||||
|     for (lfs_off_t j = 0; j < $MEDIUMSIZE; j += size) { | ||||
|         lfs_file_read(&lfs, &file[0], buffer, size) => size; | ||||
|         memcmp(buffer, "hair", size) => 0; | ||||
|     } | ||||
|     lfs_file_read(&lfs, &file[0], buffer, size) => 0; | ||||
|  | ||||
|     lfs_file_close(&lfs, &file[0]) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
| TEST | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &cfg) => 0; | ||||
|     lfs_file_open(&lfs, &file[0], "baldyread", LFS_O_RDONLY) => 0; | ||||
|     lfs_file_size(&lfs, &file[0]) => $MEDIUMSIZE; | ||||
|  | ||||
|     size = strlen("hair"); | ||||
|     for (lfs_off_t j = 0; j < $MEDIUMSIZE; j += size) { | ||||
|         lfs_file_read(&lfs, &file[0], buffer, size) => size; | ||||
|         memcmp(buffer, "hair", size) => 0; | ||||
|     } | ||||
|     lfs_file_read(&lfs, &file[0], buffer, size) => 0; | ||||
|  | ||||
|     lfs_file_close(&lfs, &file[0]) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
| TEST | ||||
|  | ||||
| echo "--- Truncate and write ---" | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &cfg) => 0; | ||||
|     lfs_file_open(&lfs, &file[0], "baldywrite", | ||||
|             LFS_O_WRONLY | LFS_O_CREAT) => 0; | ||||
|  | ||||
|     strcpy((char*)buffer, "hair"); | ||||
|     size = strlen((char*)buffer); | ||||
|     for (lfs_off_t j = 0; j < $LARGESIZE; j += size) { | ||||
|         lfs_file_write(&lfs, &file[0], buffer, size) => size; | ||||
|     } | ||||
|     lfs_file_size(&lfs, &file[0]) => $LARGESIZE; | ||||
|  | ||||
|     lfs_file_close(&lfs, &file[0]) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
| TEST | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &cfg) => 0; | ||||
|     lfs_file_open(&lfs, &file[0], "baldywrite", LFS_O_RDWR) => 0; | ||||
|     lfs_file_size(&lfs, &file[0]) => $LARGESIZE; | ||||
|  | ||||
|     lfs_file_truncate(&lfs, &file[0], $MEDIUMSIZE) => 0; | ||||
|     lfs_file_size(&lfs, &file[0]) => $MEDIUMSIZE; | ||||
|  | ||||
|     strcpy((char*)buffer, "bald"); | ||||
|     size = strlen((char*)buffer); | ||||
|     for (lfs_off_t j = 0; j < $MEDIUMSIZE; j += size) { | ||||
|         lfs_file_write(&lfs, &file[0], buffer, size) => size; | ||||
|     } | ||||
|     lfs_file_size(&lfs, &file[0]) => $MEDIUMSIZE; | ||||
|  | ||||
|     lfs_file_close(&lfs, &file[0]) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
| TEST | ||||
| tests/test.py << TEST | ||||
|     lfs_mount(&lfs, &cfg) => 0; | ||||
|     lfs_file_open(&lfs, &file[0], "baldywrite", LFS_O_RDONLY) => 0; | ||||
|     lfs_file_size(&lfs, &file[0]) => $MEDIUMSIZE; | ||||
|  | ||||
|     size = strlen("bald"); | ||||
|     for (lfs_off_t j = 0; j < $MEDIUMSIZE; j += size) { | ||||
|         lfs_file_read(&lfs, &file[0], buffer, size) => size; | ||||
|         memcmp(buffer, "bald", size) => 0; | ||||
|     } | ||||
|     lfs_file_read(&lfs, &file[0], buffer, size) => 0; | ||||
|  | ||||
|     lfs_file_close(&lfs, &file[0]) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
| TEST | ||||
|  | ||||
| # More aggressive general truncation tests | ||||
| truncate_test() { | ||||
| STARTSIZES="$1" | ||||
| STARTSEEKS="$2" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user