fs/fs.c: read up to EOF when len would read past EOF
http://lists.denx.de/pipermail/u-boot/2012-September/134347.html allows for reading files in chunks from the shell. When this feature is used to read past the end of a file an error was returned instead of returning the bytes read up to the end of file. Thus the following fails in the shell: offset = 0 len = chunksize do read file, offset, len write data until bytes_read < len The patch changes the behaviour to printing an informational message and returning the actual read number of bytes aka read(2) behaviour for convenient use in U-Boot scripts. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Acked-by: Marek Vasut <marex@denx.de> Signed-off-by: Stefan Agner <stefan.agner@toradex.com> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
This commit is contained in:
		
							parent
							
								
									f06b454b1c
								
							
						
					
					
						commit
						7a3e70cfd8
					
				
							
								
								
									
										6
									
								
								fs/fs.c
								
								
								
								
							
							
						
						
									
										6
									
								
								fs/fs.c
								
								
								
								
							|  | @ -301,10 +301,8 @@ int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len, | ||||||
| 	unmap_sysmem(buf); | 	unmap_sysmem(buf); | ||||||
| 
 | 
 | ||||||
| 	/* If we requested a specific number of bytes, check we got it */ | 	/* If we requested a specific number of bytes, check we got it */ | ||||||
| 	if (ret == 0 && len && *actread != len) { | 	if (ret == 0 && len && *actread != len) | ||||||
| 		printf("** Unable to read file %s **\n", filename); | 		printf("** %s shorter than offset + len **\n", filename); | ||||||
| 		ret = -1; |  | ||||||
| 	} |  | ||||||
| 	fs_close(); | 	fs_close(); | ||||||
| 
 | 
 | ||||||
| 	return ret; | 	return ret; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue