From: Roy Marples Date: Tue, 3 May 2016 15:06:22 +0000 (+0000) Subject: Use a local variable to indicate if we need to close the fd we may have X-Git-Tag: v6.11.0~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f29f0f4c9c595bf25ff687b19faff60da0ba250;p=thirdparty%2Fdhcpcd.git Use a local variable to indicate if we need to close the fd we may have opened when reading leases. --- diff --git a/dhcp.c b/dhcp.c index f7599482..da99a808 100644 --- a/dhcp.c +++ b/dhcp.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -1115,6 +1116,7 @@ static struct dhcp_message * read_lease(struct interface *ifp) { int fd; + bool fd_opened; struct dhcp_message *dhcp; struct dhcp_state *state = D_STATE(ifp); ssize_t bytes; @@ -1122,10 +1124,13 @@ read_lease(struct interface *ifp) uint8_t type; size_t auth_len; - if (state->leasefile[0] == '\0') + if (state->leasefile[0] == '\0') { fd = fileno(stdin); - else + fd_opened = false; + } else { fd = open(state->leasefile, O_RDONLY); + fd_opened = true; + } if (fd == -1) { if (errno != ENOENT) logger(ifp->ctx, LOG_ERR, "%s: open `%s': %m", @@ -1144,7 +1149,7 @@ read_lease(struct interface *ifp) return NULL; } bytes = read(fd, dhcp, sizeof(*dhcp)); - if (state->leasefile[0] != '\0') + if (fd_opened) close(fd); if (bytes < 0) { free(dhcp); diff --git a/dhcp6.c b/dhcp6.c index 2fc0257b..5f6201f8 100644 --- a/dhcp6.c +++ b/dhcp6.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -2168,11 +2169,13 @@ dhcp6_readlease(struct interface *ifp, int validate) int retval; size_t newlen; void *newnew; + bool fd_opened; state = D6_STATE(ifp); if (state->leasefile[0] == '\0') { logger(ifp->ctx, LOG_DEBUG, "reading standard input"); fd = fileno(stdin); + fd_opened = false; } else { logger(ifp->ctx, LOG_DEBUG, "%s: reading lease `%s'", ifp->name, state->leasefile); @@ -2181,12 +2184,13 @@ dhcp6_readlease(struct interface *ifp, int validate) close(fd); fd = -1; } + fd_opened = true; } if (fd == -1) return -1; state->new_len = 0; if ((state->new = malloc(BUFSIZ)) == NULL) { - if (state->leasefile[0] != '\0') + if (fd_opened) close(fd); return -1; } @@ -2212,7 +2216,7 @@ dhcp6_readlease(struct interface *ifp, int validate) state->new = newnew; state->new_len = newlen; } - if (state->leasefile[0] != '\0') + if (fd_opened) close(fd); if (retval == -1) goto ex;