ttyread: test for EOF while reading tty
When a read operation returns 0 then it means that we arrived to the end of the file, and new reads will return 0 unless you do some other operation such as lseek(). This case happens with USB-232 adapters when they are unplugged.
This commit is contained in:
		
				
					committed by
					
						 Hiltjo Posthuma
						Hiltjo Posthuma
					
				
			
			
				
	
			
			
			
						parent
						
							21e0d6e8b8
						
					
				
				
					commit
					e52319cc7d
				
			
							
								
								
									
										25
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								st.c
									
									
									
									
									
								
							| @@ -823,17 +823,24 @@ ttyread(void) | ||||
| 	int ret; | ||||
|  | ||||
| 	/* append read bytes to unprocessed bytes */ | ||||
| 	if ((ret = read(cmdfd, buf+buflen, LEN(buf)-buflen)) < 0) | ||||
| 	ret = read(cmdfd, buf+buflen, LEN(buf)-buflen); | ||||
|  | ||||
| 	switch (ret) { | ||||
| 	case 0: | ||||
| 		fputs("Found EOF in input\n", stderr); | ||||
| 		exit(0); | ||||
| 	case -1: | ||||
| 		die("couldn't read from shell: %s\n", strerror(errno)); | ||||
| 	buflen += ret; | ||||
| 	default: | ||||
| 		buflen += ret; | ||||
| 		written = twrite(buf, buflen, 0); | ||||
| 		buflen -= written; | ||||
| 		/* keep any uncomplete utf8 char for the next call */ | ||||
| 		if (buflen > 0) | ||||
| 			memmove(buf, buf + written, buflen); | ||||
| 		return ret; | ||||
|  | ||||
| 	written = twrite(buf, buflen, 0); | ||||
| 	buflen -= written; | ||||
| 	/* keep any uncomplete utf8 char for the next call */ | ||||
| 	if (buflen > 0) | ||||
| 		memmove(buf, buf + written, buflen); | ||||
|  | ||||
| 	return ret; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void | ||||
|   | ||||
		Reference in New Issue
	
	Block a user