libbb: Converted safe_read to safe_write format
Changed safe_read to be symmetrical to safe_write, it shall never return EINTR because it calls read multiple times, the error is considered transient. function old new delta safe_read 44 57 +13 Signed-off-by: Martin Lewis <martin.lewis.x84@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
				
					committed by
					
						
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							ad27d44ebe
						
					
				
				
					commit
					dd46861282
				
			
							
								
								
									
										12
									
								
								libbb/read.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								libbb/read.c
									
									
									
									
									
								
							@@ -12,9 +12,17 @@ ssize_t FAST_FUNC safe_read(int fd, void *buf, size_t count)
 | 
			
		||||
{
 | 
			
		||||
	ssize_t n;
 | 
			
		||||
 | 
			
		||||
	do {
 | 
			
		||||
	for (;;) {
 | 
			
		||||
		n = read(fd, buf, count);
 | 
			
		||||
	} while (n < 0 && errno == EINTR);
 | 
			
		||||
		if (n >= 0 || errno != EINTR)
 | 
			
		||||
			break;
 | 
			
		||||
		/* Some callers set errno=0, are upset when they see EINTR.
 | 
			
		||||
		 * Returning EINTR is wrong since we retry read(),
 | 
			
		||||
		 * the "error" was transient.
 | 
			
		||||
		 */
 | 
			
		||||
		errno = 0;
 | 
			
		||||
		/* repeat the read() */
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return n;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user