- /* DHCPv6 messages have no real maximum size.
- * As we could be reading from stdin, we loop like so.
- * state->new_len refers to the buffer position,
- * but the buffer itself always BUFSIZ bigger. */
- for (;;) {
- bytes = read(fd, (char *)state->new + state->new_len, BUFSIZ);
- if (bytes == -1)
- break;
- if (bytes < BUFSIZ) {
- state->new_len += (size_t)bytes;
- retval = 0;
- break;
- }
- newlen = state->new_len + (BUFSIZ * 2);
- if (newlen > UINT32_MAX || newlen < state->new_len) {
- errno = E2BIG;
- break;
- }
- if ((newnew = realloc(state->new, newlen)) == NULL)
- break;
- state->new = newnew;
- state->new_len += BUFSIZ;
- }
+ lease = NULL;
+ state->new_len = dhcp_read_lease_fd(fd, &lease);
+ state->new = (struct dhcp6_message *)lease;