X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=util.c;h=53f5bdffffd7c0aa1835037259c007cad77613b3;hp=094870ff213cbc41c9f011aa1b316f646ee30992;hb=c0f98550914a4c7ad47c7520ece73ab474c9a818;hpb=100683441c5b1445a8d6c970aea6c7fa92e974e0 diff --git a/util.c b/util.c index 094870f..53f5bdf 100644 --- a/util.c +++ b/util.c @@ -162,6 +162,21 @@ int32_t write_mpbin(MP_INT *a, uint8_t *buffer, int32_t buflen) return i; } +void setcloexec(int fd) { + int r=fcntl(fd, F_GETFD); + if (r<0) fatal_perror("fcntl(,F_GETFD) failed"); + r |= FD_CLOEXEC; + r=fcntl(fd, F_SETFD, r|FD_CLOEXEC); + if (r<0) fatal_perror("fcntl(,F_SETFD,|FD_CLOEXEC) failed"); +} + +void pipe_cloexec(int fd[2]) { + int r=pipe(fd); + if (r) fatal_perror("pipe"); + setcloexec(fd[0]); + setcloexec(fd[1]); +} + static const char *phases[NR_PHASES]={ "PHASE_INIT", "PHASE_GETOPTS",