reunite pty.c with std.c

dev
Matthias-Christian Ott 2008-07-21 10:34:02 +02:00
parent 6c6b65ea6e
commit 082d8bb82b
2 changed files with 38 additions and 44 deletions

42
pty.c
View File

@ -1,42 +0,0 @@
/* See LICENSE file for copyright and license details. */
#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)
err(EXIT_FAILURE, "cannot open pty");
#endif
#if defined(_XOPEN_SOURCE)
if(ptm != -1) {
if(grantpt(ptm) == -1)
err(EXIT_FAILURE, "cannot grant access to pty");
if(unlockpt(ptm) == -1)
err(EXIT_FAILURE, "cannot unlock pty");
ptsdev = ptsname(ptm);
if(!ptsdev)
err(EXIT_FAILURE, "slave pty name undefined");
pts = open(ptsdev, O_RDWR);
if(pts == -1)
err(EXIT_FAILURE, "cannot open slave pty");
}
else
err(EXIT_FAILURE, "cannot open pty");
#endif
}

40
std.c
View File

@ -3,6 +3,10 @@
#include <sys/wait.h> #include <sys/wait.h>
#include <ctype.h> #include <ctype.h>
#include <err.h> #include <err.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>
@ -17,7 +21,7 @@
static void buffer(char c); static void buffer(char c);
static void cmd(const char *cmdstr, ...); static void cmd(const char *cmdstr, ...);
static int getch(); static int getch();
void getpty(void); static void getpty(void);
static void movea(int x, int y); static void movea(int x, int y);
static void mover(int x, int y); static void mover(int x, int y);
static void parseesc(void); static void parseesc(void);
@ -41,7 +45,7 @@ typedef struct {
static int cols = 80, lines = 25; static int cols = 80, lines = 25;
static int cx = 0, cy = 0; static int cx = 0, cy = 0;
static int c; static int c;
int ptm, pts; static int ptm, pts;
static _Bool bold, digit, qmark; static _Bool bold, digit, qmark;
static pid_t pid; static pid_t pid;
static RingBuffer buf; static RingBuffer buf;
@ -207,6 +211,38 @@ scroll(int l) {
cmd("seek(%d,%d)", cx, cy + l); cmd("seek(%d,%d)", cx, cy + l);
} }
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)
err(EXIT_FAILURE, "cannot open pty");
#endif
#if defined(_XOPEN_SOURCE)
if(ptm != -1) {
if(grantpt(ptm) == -1)
err(EXIT_FAILURE, "cannot grant access to pty");
if(unlockpt(ptm) == -1)
err(EXIT_FAILURE, "cannot unlock pty");
ptsdev = ptsname(ptm);
if(!ptsdev)
err(EXIT_FAILURE, "slave pty name undefined");
pts = open(ptsdev, O_RDWR);
if(pts == -1)
err(EXIT_FAILURE, "cannot open slave pty");
}
else
err(EXIT_FAILURE, "cannot open pty");
#endif
}
void void
shell(void) { shell(void) {
static char *shell = NULL; static char *shell = NULL;