void (*putty_signal(int sig, void (*func)(int)))(int);
void block_signal(int sig, int block_it);
+/* uxmisc.c */
+int cloexec(int);
+
/*
* Exports from unicode.c.
*/
exit(1);
}
- fcntl(sock, F_SETFD, FD_CLOEXEC);
+ cloexec(sock);
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, name, sizeof(addr.sun_path));
* PuTTY miscellaneous Unix stuff
*/
+#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
"PuTTY Master Key (DSA), 1024-bit:\n"
" " PGP_DSA_MASTER_KEY_FP "\n", stdout);
}
+
+/*
+ * Set FD_CLOEXEC on a file descriptor
+ */
+int cloexec(int fd) {
+ int fdflags;
+
+ fdflags = fcntl(fd, F_GETFD);
+ if (fdflags == -1) return -1;
+ return fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC);
+}
goto ret;
}
- fcntl(s, F_SETFD, FD_CLOEXEC);
+ cloexec(s);
if (sock->oobinline) {
int b = TRUE;
return (Socket) ret;
}
- fcntl(s, F_SETFD, FD_CLOEXEC);
+ cloexec(s);
ret->oobinline = 0;
{
if (pty->slave_fd < 0) {
pty->slave_fd = open(pty->name, O_RDWR);
- fcntl(pty->slave_fd, F_SETFD, FD_CLOEXEC);
+ cloexec(pty->slave_fd);
}
return pty->slave_fd;
strcpy(pty->name, master_name);
pty->name[5] = 't'; /* /dev/ptyXX -> /dev/ttyXX */
- fcntl(pty->master_fd, F_SETFD, FD_CLOEXEC);
+ cloexec(pty->master_fd);
if (pty_open_slave(pty) >= 0 &&
access(pty->name, R_OK | W_OK) == 0)
exit(1);
}
- fcntl(pty->master_fd, F_SETFD, FD_CLOEXEC);
+ cloexec(pty->master_fd);
pty->name[FILENAME_MAX-1] = '\0';
strncpy(pty->name, ptsname(pty->master_fd), FILENAME_MAX-1);
if (serial->fd < 0)
return "Unable to open serial port";
- fcntl(serial->fd, F_SETFD, FD_CLOEXEC);
+ cloexec(serial->fd);
err = serial_configure(serial, cfg);
if (err)