mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 16:14:16 +01:00 
			
		
		
		
	Fixed error check when truncating files to larger size
This commit is contained in:
		
							
								
								
									
										2
									
								
								lfs.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								lfs.c
									
									
									
									
									
								
							| @@ -1694,7 +1694,7 @@ int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) { | |||||||
|         // flush+seek if not already at end |         // flush+seek if not already at end | ||||||
|         if (file->pos != oldsize) { |         if (file->pos != oldsize) { | ||||||
|             int err = lfs_file_seek(lfs, file, 0, SEEK_END); |             int err = lfs_file_seek(lfs, file, 0, SEEK_END); | ||||||
|             if (err) { |             if (err < 0) { | ||||||
|                 return err; |                 return err; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -13,10 +13,12 @@ TEST | |||||||
|  |  | ||||||
| truncate_test() { | truncate_test() { | ||||||
| STARTSIZES="$1" | STARTSIZES="$1" | ||||||
| HOTSIZES="$2" | STARTSEEKS="$2" | ||||||
| COLDSIZES="$3" | HOTSIZES="$3" | ||||||
|  | COLDSIZES="$4" | ||||||
| tests/test.py << TEST | tests/test.py << TEST | ||||||
|     static const lfs_off_t startsizes[] = {$STARTSIZES}; |     static const lfs_off_t startsizes[] = {$STARTSIZES}; | ||||||
|  |     static const lfs_off_t startseeks[] = {$STARTSEEKS}; | ||||||
|     static const lfs_off_t hotsizes[]   = {$HOTSIZES}; |     static const lfs_off_t hotsizes[]   = {$HOTSIZES}; | ||||||
|  |  | ||||||
|     lfs_mount(&lfs, &cfg) => 0; |     lfs_mount(&lfs, &cfg) => 0; | ||||||
| @@ -33,6 +35,11 @@ tests/test.py << TEST | |||||||
|         } |         } | ||||||
|         lfs_file_size(&lfs, &file[0]) => startsizes[i]; |         lfs_file_size(&lfs, &file[0]) => startsizes[i]; | ||||||
|  |  | ||||||
|  |         if (startseeks[i] != startsizes[i]) { | ||||||
|  |             lfs_file_seek(&lfs, &file[0], | ||||||
|  |                     startseeks[i], LFS_SEEK_SET) => startseeks[i]; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         lfs_file_truncate(&lfs, &file[0], hotsizes[i]) => 0; |         lfs_file_truncate(&lfs, &file[0], hotsizes[i]) => 0; | ||||||
|         lfs_file_size(&lfs, &file[0]) => hotsizes[i]; |         lfs_file_size(&lfs, &file[0]) => hotsizes[i]; | ||||||
|  |  | ||||||
| @@ -107,18 +114,21 @@ TEST | |||||||
|  |  | ||||||
| echo "--- Cold shrinking truncate ---" | echo "--- Cold shrinking truncate ---" | ||||||
| truncate_test \ | truncate_test \ | ||||||
|  |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" |     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" | ||||||
|  |  | ||||||
| echo "--- Cold expanding truncate ---" | echo "--- Cold expanding truncate ---" | ||||||
| truncate_test \ | truncate_test \ | ||||||
|  |     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ |     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ |     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" | ||||||
|  |  | ||||||
| echo "--- Warm shrinking truncate ---" | echo "--- Warm shrinking truncate ---" | ||||||
| truncate_test \ | truncate_test \ | ||||||
|  |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ |     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "           0,            0,            0,            0,            0" |     "           0,            0,            0,            0,            0" | ||||||
| @@ -126,6 +136,21 @@ truncate_test \ | |||||||
| echo "--- Warm expanding truncate ---" | echo "--- Warm expanding truncate ---" | ||||||
| truncate_test \ | truncate_test \ | ||||||
|     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ |     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ | ||||||
|  |     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ | ||||||
|  |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ | ||||||
|  |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" | ||||||
|  |  | ||||||
|  | echo "--- Mid-file shrinking truncate ---" | ||||||
|  | truncate_test \ | ||||||
|  |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ | ||||||
|  |     "  $LARGESIZE,   $LARGESIZE,   $LARGESIZE,   $LARGESIZE,   $LARGESIZE" \ | ||||||
|  |     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ | ||||||
|  |     "           0,            0,            0,            0,            0" | ||||||
|  |  | ||||||
|  | echo "--- Mid-file expanding truncate ---" | ||||||
|  | truncate_test \ | ||||||
|  |     "           0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE, 2*$LARGESIZE" \ | ||||||
|  |     "           0,            0,   $SMALLSIZE,  $MEDIUMSIZE,   $LARGESIZE" \ | ||||||
|     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \ | ||||||
|     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" |     "2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user