* Also places the canonical host name into `realhost'. It must be
* freed by the caller.
*/
-static char *pty_init(void *frontend, void **backend_handle, Config *cfg,
- char *host, int port, char **realhost, int nodelay)
+static const char *pty_init(void *frontend, void **backend_handle, Config *cfg,
+ char *host, int port, char **realhost, int nodelay)
{
int slavefd;
pid_t pid, pgrp;
* Stamp utmp (that is, tell the utmp helper process to do so),
* or not.
*/
- if (!cfg->stamp_utmp)
+ if (!cfg->stamp_utmp) {
close(pty_utmp_helper_pipe); /* just let the child process die */
- else {
+ pty_utmp_helper_pipe = -1;
+ } else {
char *location = get_x_display(pty_frontend);
int len = strlen(location)+1, pos = 0; /* +1 to include NUL */
while (pos < len) {
if (ret < 0) {
perror("pterm: writing to utmp helper process");
close(pty_utmp_helper_pipe); /* arrgh, just give up */
+ pty_utmp_helper_pipe = -1;
break;
}
pos += ret;
return NULL;
}
-/*
- * Stub routine (we don't have any need to reconfigure this backend).
- */
static void pty_reconfig(void *handle, Config *cfg)
{
+ /*
+ * We don't have much need to reconfigure this backend, but
+ * unfortunately we do need to pick up the setting of Close On
+ * Exit so we know whether to give a `terminated' message.
+ */
+ pty_cfg = *cfg; /* structure copy */
}
/*
- * Stub routine (never called in pterm
+ * Stub routine (never called in pterm).
*/
static void pty_free(void *handle)
{
}
-
/*
* Called to send data down the pty.
*/
close(pty_master_fd);
pty_master_fd = -1;
}
- close(pty_utmp_helper_pipe); /* this causes utmp to be cleaned up */
+ if (pty_utmp_helper_pipe >= 0) {
+ close(pty_utmp_helper_pipe); /* this causes utmp to be cleaned up */
+ pty_utmp_helper_pipe = -1;
+ }
}
/*
return;
}
+/*
+ * Return a list of the special codes that make sense in this
+ * protocol.
+ */
+static const struct telnet_special *pty_get_specials(void *handle)
+{
+ /*
+ * Hmm. When I get round to having this actually usable, it
+ * might be quite nice to have the ability to deliver a few
+ * well chosen signals to the child process - SIGINT, SIGTERM,
+ * SIGKILL at least.
+ */
+ return NULL;
+}
+
static Socket pty_socket(void *handle)
{
return NULL; /* shouldn't ever be needed */
pty_sendbuffer,
pty_size,
pty_special,
+ pty_get_specials,
pty_socket,
pty_exitcode,
pty_sendok,