projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Set the 'must_close_session' flag at the end of close_session(), so
[u/mdw/putty]
/
unix
/
uxpty.c
diff --git
a/unix/uxpty.c
b/unix/uxpty.c
index
96b64e8
..
16ad6e2
100644
(file)
--- a/
unix/uxpty.c
+++ b/
unix/uxpty.c
@@
-80,7
+80,7
@@
struct pty_tag {
int master_fd, slave_fd;
void *frontend;
char name[FILENAME_MAX];
int master_fd, slave_fd;
void *frontend;
char name[FILENAME_MAX];
-
in
t child_pid;
+
pid_
t child_pid;
int term_width, term_height;
int child_dead, finished;
int exit_code;
int term_width, term_height;
int child_dead, finished;
int exit_code;
@@
-137,7
+137,7
@@
static int pty_compare_by_pid(void *av, void *bv)
static int pty_find_by_pid(void *av, void *bv)
{
static int pty_find_by_pid(void *av, void *bv)
{
-
int a = *(in
t *)av;
+
pid_t a = *(pid_
t *)av;
Pty b = (Pty)bv;
if (a < b->child_pid)
Pty b = (Pty)bv;
if (a < b->child_pid)
@@
-167,7
+167,8
@@
static tree234 *ptys_by_pid = NULL;
static Pty single_pty = NULL;
#ifndef OMIT_UTMP
static Pty single_pty = NULL;
#ifndef OMIT_UTMP
-static int pty_utmp_helper_pid, pty_utmp_helper_pipe;
+static pid_t pty_utmp_helper_pid;
+static int pty_utmp_helper_pipe;
static int pty_stamped_utmp;
static struct utmpx utmp_entry;
#endif
static int pty_stamped_utmp;
static struct utmpx utmp_entry;
#endif
@@
-260,7
+261,8
@@
static void cleanup_utmp(void)
static void sigchld_handler(int signum)
{
static void sigchld_handler(int signum)
{
- write(pty_signal_pipe[1], "x", 1);
+ if (write(pty_signal_pipe[1], "x", 1) <= 0)
+ /* not much we can do about it */;
}
#ifndef OMIT_UTMP
}
#ifndef OMIT_UTMP
@@
-360,8
+362,10
@@
static void pty_open_master(Pty pty)
/*
* Set the pty master into non-blocking mode.
*/
/*
* Set the pty master into non-blocking mode.
*/
- int i = 1;
- ioctl(pty->master_fd, FIONBIO, &i);
+ int fl;
+ fl = fcntl(pty->master_fd, F_GETFL);
+ if (fl != -1 && !(fl & O_NONBLOCK))
+ fcntl(pty->master_fd, F_SETFL, fl | O_NONBLOCK);
}
if (!ptys_by_fd)
}
if (!ptys_by_fd)
@@
-627,16
+631,16
@@
int pty_select_result(int fd, int event)
if (fd == pty_signal_pipe[0]) {
pid_t pid;
if (fd == pty_signal_pipe[0]) {
pid_t pid;
- int ipid;
int status;
char c[1];
int status;
char c[1];
- read(pty_signal_pipe[0], c, 1); /* ignore its value; it'll be `x' */
+ if (read(pty_signal_pipe[0], c, 1) <= 0)
+ /* ignore error */;
+ /* ignore its value; it'll be `x' */
do {
pid = waitpid(-1, &status, WNOHANG);
do {
pid = waitpid(-1, &status, WNOHANG);
- ipid = pid;
pty = find234(ptys_by_pid, &pid, pty_find_by_pid);
if (pty)
pty = find234(ptys_by_pid, &pid, pty_find_by_pid);
if (pty)
@@
-778,7
+782,7
@@
static const char *pty_init(void *frontend, void **backend_handle, Config *cfg,
ioctl(0, TIOCSCTTY, 1);
#endif
pgrp = getpid();
ioctl(0, TIOCSCTTY, 1);
#endif
pgrp = getpid();
- tcsetpgrp(
slavefd
, pgrp);
+ tcsetpgrp(
0
, pgrp);
setpgid(pgrp, pgrp);
close(open(pty->name, O_WRONLY, 0));
setpgid(pgrp, pgrp);
setpgid(pgrp, pgrp);
close(open(pty->name, O_WRONLY, 0));
setpgid(pgrp, pgrp);
@@
-1085,5
+1089,7
@@
Backend pty_backend = {
pty_provide_logctx,
pty_unthrottle,
pty_cfg_info,
pty_provide_logctx,
pty_unthrottle,
pty_cfg_info,
- 1
+ "pty",
+ -1,
+ 0
};
};