#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
+#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
read_lease(struct interface *ifp)
{
int fd;
+ bool fd_opened;
struct dhcp_message *dhcp;
struct dhcp_state *state = D_STATE(ifp);
ssize_t bytes;
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",
return NULL;
}
bytes = read(fd, dhcp, sizeof(*dhcp));
- if (state->leasefile[0] != '\0')
+ if (fd_opened)
close(fd);
if (bytes < 0) {
free(dhcp);
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
+#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
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);
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;
}
state->new = newnew;
state->new_len = newlen;
}
- if (state->leasefile[0] != '\0')
+ if (fd_opened)
close(fd);
if (retval == -1)
goto ex;