|
|
--- demos/microwin/mterm.c.old Fri Dec 3 07:03:39 1999
|
--- demos/microwin/mterm.c.old Fri Dec 3 07:03:39 1999
|
+++ demos/microwin/mterm.c Fri Dec 3 07:16:23 1999
|
+++ demos/microwin/mterm.c Fri Dec 3 07:16:23 1999
|
@@ -248,15 +248,16 @@
|
@@ -248,15 +248,16 @@
|
char * argv[2];
|
char * argv[2];
|
|
|
again:
|
again:
|
- sprintf(pty_name, "/dev/ptyp%d", n);
|
- sprintf(pty_name, "/dev/ptyp%d", n);
|
- if ((tfd = open(pty_name, O_RDWR | O_NONBLOCK)) < 0) {
|
- if ((tfd = open(pty_name, O_RDWR | O_NONBLOCK)) < 0) {
|
- if ((errno == EBUSY) && (n < 3)) {
|
- if ((errno == EBUSY) && (n < 3)) {
|
- ++n;
|
- ++n;
|
- goto again;
|
- goto again;
|
- }
|
- }
|
- fprintf(stderr, "Can't create pty %s\n", pty_name);
|
- fprintf(stderr, "Can't create pty %s\n", pty_name);
|
+ if ((tfd = getpt())<0) {
|
+ if ((tfd = getpt())<0) {
|
+ fprintf(stderr, "Can't create master pty\n");
|
+ fprintf(stderr, "Can't create master pty\n");
|
return -1;
|
return -1;
|
}
|
}
|
+
|
+
|
+ if (grantpt(tfd))
|
+ if (grantpt(tfd))
|
+ perror("failure");
|
+ perror("failure");
|
+ if (unlockpt(tfd))
|
+ if (unlockpt(tfd))
|
+ perror("failure");
|
+ perror("failure");
|
+
|
+
|
signal(SIGCHLD, ptysignaled);
|
signal(SIGCHLD, ptysignaled);
|
signal(SIGINT, ptysignaled);
|
signal(SIGINT, ptysignaled);
|
if ((pid = fork()) == -1) {
|
if ((pid = fork()) == -1) {
|
@@ -264,13 +265,13 @@
|
@@ -264,13 +265,13 @@
|
return -1;
|
return -1;
|
}
|
}
|
if (!pid) {
|
if (!pid) {
|
+ ptsname_r(tfd, pty_name, 12);
|
+ ptsname_r(tfd, pty_name, 12);
|
close(STDIN_FILENO);
|
close(STDIN_FILENO);
|
close(STDOUT_FILENO);
|
close(STDOUT_FILENO);
|
close(STDERR_FILENO);
|
close(STDERR_FILENO);
|
close(tfd);
|
close(tfd);
|
|
|
setsid();
|
setsid();
|
- pty_name[5] = 't';
|
- pty_name[5] = 't';
|
if ((tfd = open(pty_name, O_RDWR)) < 0) {
|
if ((tfd = open(pty_name, O_RDWR)) < 0) {
|
fprintf(stderr, "Child: Can't open pty %s\n", pty_name);
|
fprintf(stderr, "Child: Can't open pty %s\n", pty_name);
|
exit(1);
|
exit(1);
|
--- demos/nanox/nterm.c.old Fri Dec 3 07:03:39 1999
|
--- demos/nanox/nterm.c.old Fri Dec 3 07:03:39 1999
|
+++ demos/nanox/nterm.c Fri Dec 3 07:16:20 1999
|
+++ demos/nanox/nterm.c Fri Dec 3 07:16:20 1999
|
@@ -162,15 +162,16 @@
|
@@ -162,15 +162,16 @@
|
pid_t pid;
|
pid_t pid;
|
|
|
again:
|
again:
|
- sprintf(pty_name, "/dev/ptyp%d", n);
|
- sprintf(pty_name, "/dev/ptyp%d", n);
|
- if ((tfd = open(pty_name, O_RDWR | O_NONBLOCK)) < 0) {
|
- if ((tfd = open(pty_name, O_RDWR | O_NONBLOCK)) < 0) {
|
- if ((errno == EBUSY || errno == EIO) && n < 10) {
|
- if ((errno == EBUSY || errno == EIO) && n < 10) {
|
- n++;
|
- n++;
|
- goto again;
|
- goto again;
|
- }
|
- }
|
- fprintf(stderr, "Can't create pty %s\n", pty_name);
|
- fprintf(stderr, "Can't create pty %s\n", pty_name);
|
+ if ((tfd = getpt())<0) {
|
+ if ((tfd = getpt())<0) {
|
+ fprintf(stderr, "Can't create master pty\n");
|
+ fprintf(stderr, "Can't create master pty\n");
|
return -1;
|
return -1;
|
}
|
}
|
+
|
+
|
+ if (grantpt(tfd))
|
+ if (grantpt(tfd))
|
+ perror("failure");
|
+ perror("failure");
|
+ if (unlockpt(tfd))
|
+ if (unlockpt(tfd))
|
+ perror("failure");
|
+ perror("failure");
|
+
|
+
|
signal(SIGCHLD, sigchild);
|
signal(SIGCHLD, sigchild);
|
signal(SIGINT, sigchild);
|
signal(SIGINT, sigchild);
|
if ((pid = fork()) == -1) {
|
if ((pid = fork()) == -1) {
|
@@ -178,13 +179,13 @@
|
@@ -178,13 +179,13 @@
|
return -1;
|
return -1;
|
}
|
}
|
if (!pid) {
|
if (!pid) {
|
+ ptsname_r(tfd, pty_name, 12);
|
+ ptsname_r(tfd, pty_name, 12);
|
close(STDIN_FILENO);
|
close(STDIN_FILENO);
|
close(STDOUT_FILENO);
|
close(STDOUT_FILENO);
|
close(STDERR_FILENO);
|
close(STDERR_FILENO);
|
close(tfd);
|
close(tfd);
|
|
|
setsid();
|
setsid();
|
- pty_name[5] = 't';
|
- pty_name[5] = 't';
|
if ((tfd = open(pty_name, O_RDWR)) < 0) {
|
if ((tfd = open(pty_name, O_RDWR)) < 0) {
|
fprintf(stderr, "Child: Can't open pty %s\n", pty_name);
|
fprintf(stderr, "Child: Can't open pty %s\n", pty_name);
|
exit(1);
|
exit(1);
|
|
|
|
|
|
|