summaryrefslogtreecommitdiff
path: root/japanese/kon2-16dot/files/patch-src_term.c
diff options
context:
space:
mode:
authorDaichi GOTO <daichi@FreeBSD.org>2012-05-09 19:28:24 +0000
committerDaichi GOTO <daichi@FreeBSD.org>2012-05-09 19:28:24 +0000
commitd5110194a59360ce3b0cc2dbe57360beba1c4a19 (patch)
tree4f92857a5f840d9d8638b6aaec61db2614e62b06 /japanese/kon2-16dot/files/patch-src_term.c
parentUpdate to 2.03pre8 (diff)
- fixed the building on amd64
- fixed the building on 9+ - clean-up patches PR: 167724 Submitted by: Masamichi Takatsu <taka2@doga.co.jp>
Notes
Notes: svn path=/head/; revision=296316
Diffstat (limited to 'japanese/kon2-16dot/files/patch-src_term.c')
-rw-r--r--japanese/kon2-16dot/files/patch-src_term.c486
1 files changed, 301 insertions, 185 deletions
diff --git a/japanese/kon2-16dot/files/patch-src_term.c b/japanese/kon2-16dot/files/patch-src_term.c
index a5306cd0227c..4c5716433c2a 100644
--- a/japanese/kon2-16dot/files/patch-src_term.c
+++ b/japanese/kon2-16dot/files/patch-src_term.c
@@ -1,185 +1,301 @@
- --- src/term.c 30 Sep 2008 08:09:56 -0000 1.1.1.2
- +++ src/term.c 23 Oct 2008 09:24:33 -0000
- @@ -76,7 +76,7 @@
-
- int masterPty; /* master pseudo-tty file descriptor */
-
- -#define MAX_TTYNAME 10
- +#define MAX_TTYNAME 20
-
- static int childPid, sockFd, slavePty;
- static struct termio oldTio;
- @@ -235,13 +235,16 @@
- }
- ConsoleInit(video);
- while (i < argc) {
- - const char *arg;
- + const char *arg = argv[i];
-
- - if (argv[i][0] != '-') {
- - warn("bad arg `%s'; assumed `-%s'\r\n", argv[i]);
- - arg = (char *) argv[i];
- - } else
- - arg = (char *) argv[i] + 1;
- + if (*arg != '-')
- + warn("bad arg `%s'; assumed `-%s'\n", arg, arg);
- + else
- + ++arg;
- + if (!strcasecmp(arg, "help")) {
- + message("Usage: kon2 [video] [-option value] ...\n");
- + exit(EXIT_FAILURE);
- + }
- i++;
- if (i >= argc) {
- error("no value for `%s'\r\n", arg);
- @@ -258,6 +261,25 @@
- static int savedArgc; /* argc of startup time */
- static const char **savedArgv; /* argv of startup time */
-
- +static int ttyNumber = 0;
- +
- +int
- +set_vt_number(void)
- +{
- +#if defined(__FreeBSD__)
- + ttyNumber = strtol(ttyname(0) + 9, NULL, 16);
- +#elif defined(linux)
- + ttyNumber = atoi(ttyname(0) + 8);
- +#endif /* linux */
- + return ttyNumber;
- +}
- +
- +int
- +TermGetNumber(void)
- +{
- + return ttyNumber;
- +}
- +
- /* Do initialization before reading config file */
- void TermInit(int argc, const char *argv[])
- {
- @@ -266,6 +288,7 @@
- init.display = init.utmp = init.socket = init.termio = FALSE;
- /* Initialize subsystems. */
-
- + set_vt_number();
- CapInit();
- ChildInit();
- MouseInit();
- @@ -355,8 +378,8 @@
- mouseFd = MouseStart();
- }
-
- - chown("/dev/tty0", getuid(), getgid());
- #if defined(linux)
- + chown("/dev/tty0", getuid(), getgid());
- sockFd = SocketInit(ttyname(0) + 8);
- #elif defined(__FreeBSD__)
- sockFd = SocketInit(ttyname(0) + 9);
- @@ -381,6 +404,7 @@
-
- /* Signal Setting */
- signal(SIGCHLD, ExitPty);
- + signal(SIGPIPE, SIG_IGN);
- signal(SIGHUP, ExitTerm);
- signal(SIGTERM, ExitTerm);
- signal(SIGSEGV, ExitTerm);
- @@ -458,18 +482,13 @@
- PerrorExit("/dev/console");
- }
- #elif defined(__FreeBSD__)
- -#if __FreeBSD_version >= 501100
- - cfd = open("/dev/ttyv0", O_WRONLY);
- - if (cfd < 0 && (cfd = open("/dev/ttyv0", O_RDONLY)) < 0) {
- - PerrorExit("/dev/ttyv0");
- - }
- -#else
- - cfd = open("/dev/vga", O_WRONLY);
- - if (cfd < 0 && (cfd = open("/dev/vga", O_RDONLY)) < 0) {
- - PerrorExit("/dev/vga");
- + cfd = open("/dev/vga", O_RDONLY);
- + if (cfd == -1) {
- + cfd = open("/dev/console", O_RDONLY);
- + if (cfd == -1)
- + PerrorExit("/dev/console");
- }
- -#endif
- -#endif
- +#endif /* __FreeBSD__ */
- ioctl(cfd, VT_ACTIVATE, orgVtNum);
- close(cfd);
- }
- @@ -486,28 +505,36 @@
- cfd = open("/dev/console", O_WRONLY);
- if (cfd < 0 && (cfd = open("/dev/console", O_RDONLY)) < 0)
- fatal("can't open /dev/console");
- -#elif defined(__FreeBSD__)
- -#if __FreeBSD_version >= 501100
- - cfd = open("/dev/ttyv0", O_WRONLY);
- - if (cfd < 0 && (cfd = open("/dev/ttyv0", O_RDONLY)) < 0)
- - fatal("can't open /dev/ttyv0");
- -#else
- - cfd = open("/dev/vga", O_WRONLY);
- - if (cfd < 0 && (cfd = open("/dev/vga", O_RDONLY)) < 0)
- - fatal("can't open /dev/vga");
- -#endif
- -#endif
- +
- ioctl(cfd, KDGETMODE, &mode);
- if (mode == KD_TEXT) {
- close(cfd);
- return;
- }
- -#if defined(linux)
- ioctl(cfd, VT_GETSTATE, &vts);
- orgVtNum = vts.v_active;
- -#endif
- - ioctl(cfd, VT_OPENQRY, &vtNum);
- - if (vtNum < 0)
- +
- +#elif defined(__FreeBSD__)
- + /* check for syscons mode */
- + if (ioctl(0, KDGETMODE, &mode) == -1)
- + fatal("KON is require the syscons(4)");
- + else if (mode != KD_TEXT)
- + fatal("unknown terminal mode.");
- + else if (strcmp(ttyname(0), "/dev/console") != 0)
- + return;
- +
- + cfd = open("/dev/vga", O_RDONLY);
- + if (cfd == -1) {
- + cfd = open("/dev/console", O_RDONLY);
- + if (cfd == -1)
- + fatal("can't open /dev/console");
- + }
- + if (ioctl(cfd, VT_GETINDEX, &orgVtNum) == -1)
- + fatal("ioctl(VT_GETINDEX)");
- +#endif /* __FreeBSD__ */
- +
- + errno = 0;
- + if (ioctl(cfd, VT_OPENQRY, &vtNum) == -1 || vtNum < 0)
- fatal("can't get free VC");
- parent = getpid();
- if ((child = fork()) == -1)
- @@ -515,12 +542,13 @@
- if (child) {
- signal(SIGHUP, ExitPty);
- pause();
- + fatal("internal error.");
- }
- setsid();
- #if defined(linux)
- sprintf(vtty, "/dev/tty%d", vtNum);
- #elif defined(__FreeBSD__)
- - sprintf(vtty, "/dev/ttyv%d", vtNum);
- + sprintf(vtty, "/dev/ttyv%d", vtNum - 1);
- #endif
- if ((vfd = open(vtty, O_RDWR)) < 0)
- fatal("can't open %s", vtty);
- @@ -531,5 +559,6 @@
- dup2(vfd, 0);
- dup2(vfd, 1);
- dup2(vfd, 2);
- + close(vfd);
- kill(parent, SIGHUP);
- }
+--- src/term.c.orig 1997-01-25 00:03:58.000000000 +0900
++++ src/term.c 2012-05-10 00:17:11.736555617 +0900
+@@ -33,7 +33,13 @@
+ #include <termio.h>
+ #elif defined(__FreeBSD__)
+ #include <termios.h>
+-#include <machine/console.h>
++#include <osreldate.h>
++#if __FreeBSD_version >= 410000
++# include <sys/consio.h>
++# include <sys/kbio.h>
++#else
++# include <machine/console.h>
++#endif
+ #define termio termios
+ #endif
+ #include <signal.h>
+@@ -70,12 +76,15 @@
+
+ int masterPty; /* master pseudo-tty file descriptor */
+
+-#define MAX_TTYNAME 10
++#define MAX_TTYNAME 20
+
+ static int childPid, sockFd, slavePty;
+ static struct termio oldTio;
+ static char ptyName[MAX_TTYNAME + 1];
+ static int orgVtNum = -1;
++#if defined(__FreeBSD__)
++static int exec_mode = 0;
++#endif
+
+ struct initInfo {
+ bool display; /* display initialized */
+@@ -129,8 +138,13 @@
+ if (WEXITSTATUS(stat) & 0x7f)
+ if (WIFSIGNALED(stat))
+ fatal("child died with signal -- %s\r\n", sys_siglist[WTERMSIG(stat)]);
+- else
++ else {
++#if defined(__FreeBSD__)
++ if (exec_mode) /* reflect exit code */
++ exit(WEXITSTATUS(stat) & 0x7f);
++#endif
+ fatal("child exited with status %d\r\n", WEXITSTATUS(stat) & 0x7f);
++ }
+ else if (signum == SIGHUP) {
+ fprintf(stderr, "\r\nKON> switched to new VC\r\n");
+ exit(EXIT_SUCCESS);
+@@ -201,11 +215,15 @@
+ }
+ if (FD_ISSET(0, &readFds)) {
+ i = read(0, buff, BUFSIZ);
++#if defined(__FreeBSD__)
++ if (strncmp(getenv("TERM"), "vt100", 5) == 0)
++ i = cons25tovt100(buff, i, BUFSIZ);
++#endif
+ if (i > 0) write(masterPty, buff, i);
+ PollCursor(TRUE);
+ }
+ if (FD_ISSET(sockFd, &readFds)) SocketInterface(sockFd);
+- if (mInfo.has_mouse) {
++ if (mInfo.has_mouse && mouseFd > 0) {
+ if (FD_ISSET(mouseFd, &readFds) && con.active) {
+ i = read(mouseFd, buff, BUFSIZ);
+ if (i > 0) MouseGetPacket(buff, i);
+@@ -215,6 +233,27 @@
+ }
+ }
+
++#if defined(__FreeBSD__)
++/*
++ * 'e', 's', 'u' 以外の文字がないかチェックする
++ */
++static int Check_esu(char *p)
++{
++ for (; *p; ++p) {
++ switch (*p) {
++ case 'e':
++ return(1);
++ case 's':
++ case 'u':
++ continue;
++ default:
++ return(0);
++ }
++ }
++ return(1);
++}
++#endif
++
+ static void ProcessArgs(int argc, const char *argv[])
+ {
+ int i = 0;
+@@ -226,13 +265,55 @@
+ }
+ ConsoleInit(video);
+ while (i < argc) {
+- const char *arg;
++ const char *arg = argv[i];
++
++#if defined(__FreeBSD__)
++ if (argv[i][0] == '-' && Check_esu(&argv[i][1])) {
++ char *p;
+
+- if (argv[i][0] != '-') {
+- warn("bad arg `%s'; assumed `-%s'\r\n", argv[i]);
+- arg = (char *) argv[i];
+- } else
+- arg = (char *) argv[i] + 1;
++ for (p = &argv[i][1]; *p; ++p) {
++ if (*p == 'e') {
++ ConfigExecProg(&argv[i+1]);
++ ConfigMessage("Off");
++ exec_mode = 1;
++ return;
++ }
++ else if (*p == 's') /* single user mode */
++ UnUseUtmp(1);
++ else if (*p == 'u') { /* unset TERM mode */
++ ConfigUnsetTerm(1);
++ }
++ }
++ }
++ else {
++ if (*arg != '-')
++ warn("bad arg `%s'; assumed `-%s'\n", arg, arg);
++ else
++ ++arg;
++ if (!strcasecmp(arg, "help")) {
++ message("Usage: kon2 [video] [-option value] ...\n");
++ exit(EXIT_FAILURE);
++ }
++ i++;
++ if (i >= argc) {
++ error("no value for `%s'\r\n", arg);
++ break;
++ }
++ if (!strcasecmp(arg, "e"))
++ ConfigExecProg(argv[i]);
++ else if (SetCapArg(arg, argv[i]) < 0)
++ warn("invalid capability `%s' ignored\r\n", arg);
++ }
++ i++;
++#else
++ if (*arg != '-')
++ warn("bad arg `%s'; assumed `-%s'\n", arg, arg);
++ else
++ ++arg;
++ if (!strcasecmp(arg, "help")) {
++ message("Usage: kon2 [video] [-option value] ...\n");
++ exit(EXIT_FAILURE);
++ }
+ i++;
+ if (i >= argc) {
+ error("no value for `%s'\r\n", arg);
+@@ -243,12 +324,32 @@
+ else if (SetCapArg(arg, argv[i]) < 0)
+ warn("invalid capability `%s' ignored\r\n", arg);
+ i++;
++#endif
+ }
+ }
+
+ static int savedArgc; /* argc of startup time */
+ static const char **savedArgv; /* argv of startup time */
+
++static int ttyNumber = 0;
++
++int
++set_vt_number(void)
++{
++#if defined(__FreeBSD__)
++ ttyNumber = strtol(ttyname(0) + 9, NULL, 16);
++#elif defined(linux)
++ ttyNumber = atoi(ttyname(0) + 8);
++#endif /* linux */
++ return ttyNumber;
++}
++
++int
++TermGetNumber(void)
++{
++ return ttyNumber;
++}
++
+ /* Do initialization before reading config file */
+ void TermInit(int argc, const char *argv[])
+ {
+@@ -257,6 +358,7 @@
+ init.display = init.utmp = init.socket = init.termio = FALSE;
+ /* Initialize subsystems. */
+
++ set_vt_number();
+ CapInit();
+ ChildInit();
+ MouseInit();
+@@ -346,8 +448,8 @@
+ mouseFd = MouseStart();
+ }
+
+- chown("/dev/tty0", getuid(), getgid());
+ #if defined(linux)
++ chown("/dev/tty0", getuid(), getgid());
+ sockFd = SocketInit(ttyname(0) + 8);
+ #elif defined(__FreeBSD__)
+ sockFd = SocketInit(ttyname(0) + 9);
+@@ -372,6 +474,7 @@
+
+ /* Signal Setting */
+ signal(SIGCHLD, ExitPty);
++ signal(SIGPIPE, SIG_IGN);
+ signal(SIGHUP, ExitTerm);
+ signal(SIGTERM, ExitTerm);
+ signal(SIGSEGV, ExitTerm);
+@@ -449,11 +552,13 @@
+ PerrorExit("/dev/console");
+ }
+ #elif defined(__FreeBSD__)
+- cfd = open("/dev/vga", O_WRONLY);
+- if (cfd < 0 && (cfd = open("/dev/vga", O_RDONLY)) < 0) {
+- PerrorExit("/dev/vga");
++ cfd = open("/dev/vga", O_RDONLY);
++ if (cfd == -1) {
++ cfd = open("/dev/console", O_RDONLY);
++ if (cfd == -1)
++ PerrorExit("/dev/console");
+ }
+-#endif
++#endif /* __FreeBSD__ */
+ ioctl(cfd, VT_ACTIVATE, orgVtNum);
+ close(cfd);
+ }
+@@ -470,22 +575,36 @@
+ cfd = open("/dev/console", O_WRONLY);
+ if (cfd < 0 && (cfd = open("/dev/console", O_RDONLY)) < 0)
+ fatal("can't open /dev/console");
+-#elif defined(__FreeBSD__)
+- cfd = open("/dev/vga", O_WRONLY);
+- if (cfd < 0 && (cfd = open("/dev/vga", O_RDONLY)) < 0)
+- fatal("can't open /dev/vga");
+-#endif
++
+ ioctl(cfd, KDGETMODE, &mode);
+ if (mode == KD_TEXT) {
+ close(cfd);
+ return;
+ }
+-#if defined(linux)
+ ioctl(cfd, VT_GETSTATE, &vts);
+ orgVtNum = vts.v_active;
+-#endif
+- ioctl(cfd, VT_OPENQRY, &vtNum);
+- if (vtNum < 0)
++
++#elif defined(__FreeBSD__)
++ /* check for syscons mode */
++ if (ioctl(0, KDGETMODE, &mode) == -1)
++ fatal("KON is require the syscons(4)");
++ else if (mode != KD_TEXT)
++ fatal("unknown terminal mode.");
++ else if (strcmp(ttyname(0), "/dev/console") != 0)
++ return;
++
++ cfd = open("/dev/vga", O_RDONLY);
++ if (cfd == -1) {
++ cfd = open("/dev/console", O_RDONLY);
++ if (cfd == -1)
++ fatal("can't open /dev/console");
++ }
++ if (ioctl(cfd, VT_GETINDEX, &orgVtNum) == -1)
++ fatal("ioctl(VT_GETINDEX)");
++#endif /* __FreeBSD__ */
++
++ errno = 0;
++ if (ioctl(cfd, VT_OPENQRY, &vtNum) == -1 || vtNum < 0)
+ fatal("can't get free VC");
+ parent = getpid();
+ if ((child = fork()) == -1)
+@@ -493,12 +612,13 @@
+ if (child) {
+ signal(SIGHUP, ExitPty);
+ pause();
++ fatal("internal error.");
+ }
+ setsid();
+ #if defined(linux)
+ sprintf(vtty, "/dev/tty%d", vtNum);
+ #elif defined(__FreeBSD__)
+- sprintf(vtty, "/dev/ttyv%d", vtNum);
++ sprintf(vtty, "/dev/ttyv%d", vtNum - 1);
+ #endif
+ if ((vfd = open(vtty, O_RDWR)) < 0)
+ fatal("can't open %s", vtty);
+@@ -509,5 +629,6 @@
+ dup2(vfd, 0);
+ dup2(vfd, 1);
+ dup2(vfd, 2);
++ close(vfd);
+ kill(parent, SIGHUP);
+ }