source getpty() out to pty.c
This commit is contained in:
		
							
								
								
									
										41
									
								
								pty.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								pty.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #if !(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) | ||||||
|  | #include <pty.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | extern int ptm, pts; | ||||||
|  |  | ||||||
|  | void | ||||||
|  | getpty(void) { | ||||||
|  | 	char *ptsdev; | ||||||
|  |  | ||||||
|  | #if defined(_GNU_SOURCE) | ||||||
|  | 	ptm = getpt(); | ||||||
|  | #elif _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 | ||||||
|  | 	ptm = posix_openpt(O_RDWR); | ||||||
|  | #else | ||||||
|  | 	ptm = open("/dev/ptmx", O_RDWR); | ||||||
|  | 	if(ptm == -1) | ||||||
|  | 		if(openpty(&ptm, &pts, NULL, NULL, NULL) == -1) | ||||||
|  | 			eprintn("error, cannot open pty"); | ||||||
|  | #endif | ||||||
|  | #if defined(_XOPEN_SOURCE) | ||||||
|  | 	if(ptm != -1) { | ||||||
|  | 		if(grantpt(ptm) == -1) | ||||||
|  | 			eprintn("error, cannot grant access to pty"); | ||||||
|  | 		if(unlockpt(ptm) == -1) | ||||||
|  | 			eprintn("error, cannot unlock pty"); | ||||||
|  | 		ptsdev = ptsname(ptm); | ||||||
|  | 		if(!ptsdev) | ||||||
|  | 			eprintn("error, slave pty name undefined"); | ||||||
|  | 		pts = open(ptsdev, O_RDWR); | ||||||
|  | 		if(pts == -1) | ||||||
|  | 			eprintn("error, cannot open slave pty"); | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 		eprintn("error, cannot open pty"); | ||||||
|  | #endif | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								std.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								std.c
									
									
									
									
									
								
							| @@ -6,9 +6,6 @@ | |||||||
| #include <ctype.h> | #include <ctype.h> | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #if !(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) |  | ||||||
| #include <pty.h> |  | ||||||
| #endif |  | ||||||
| #include <signal.h> | #include <signal.h> | ||||||
| #include <stdarg.h> | #include <stdarg.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| @@ -100,38 +97,6 @@ eprintn(const char *errstr, ...) { | |||||||
| 	exit(EXIT_FAILURE); | 	exit(EXIT_FAILURE); | ||||||
| } | } | ||||||
|  |  | ||||||
| void |  | ||||||
| getpty(void) { |  | ||||||
| 	char *ptsdev; |  | ||||||
|  |  | ||||||
| #if defined(_GNU_SOURCE) |  | ||||||
| 	ptm = getpt(); |  | ||||||
| #elif _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 |  | ||||||
| 	ptm = posix_openpt(O_RDWR); |  | ||||||
| #else |  | ||||||
| 	ptm = open("/dev/ptmx", O_RDWR); |  | ||||||
| 	if(ptm == -1) |  | ||||||
| 		if(openpty(&ptm, &pts, NULL, NULL, NULL) == -1) |  | ||||||
| 			eprintn("error, cannot open pty"); |  | ||||||
| #endif |  | ||||||
| #if defined(_XOPEN_SOURCE) |  | ||||||
| 	if(ptm != -1) { |  | ||||||
| 		if(grantpt(ptm) == -1) |  | ||||||
| 			eprintn("error, cannot grant access to pty"); |  | ||||||
| 		if(unlockpt(ptm) == -1) |  | ||||||
| 			eprintn("error, cannot unlock pty"); |  | ||||||
| 		ptsdev = ptsname(ptm); |  | ||||||
| 		if(!ptsdev) |  | ||||||
| 			eprintn("error, slave pty name undefined"); |  | ||||||
| 		pts = open(ptsdev, O_RDWR); |  | ||||||
| 		if(pts == -1) |  | ||||||
| 			eprintn("error, cannot open slave pty"); |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 		eprintn("error, cannot open pty"); |  | ||||||
| #endif |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void | void | ||||||
| movea(int x, int y) { | movea(int x, int y) { | ||||||
| 	x = MAX(x, cols); | 	x = MAX(x, cols); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user