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:
		
							parent
							
								
									21e0d6e8b8
								
							
						
					
					
						commit
						e52319cc7d
					
				
							
								
								
									
										25
									
								
								st.c
								
								
								
								
							
							
						
						
									
										25
									
								
								st.c
								
								
								
								
							|  | @ -823,17 +823,24 @@ ttyread(void) | ||||||
| 	int ret; | 	int ret; | ||||||
| 
 | 
 | ||||||
| 	/* append read bytes to unprocessed bytes */ | 	/* 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)); | 		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 | void | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue