diff -urN gpxe-0.9.7/src/net/dhcppkt.c gpxe-0.9.7-bootptodhcpfailover/src/net/dhcppkt.c --- gpxe-0.9.7/src/net/dhcppkt.c 2009-03-01 21:23:42.000000000 -0500 +++ gpxe-0.9.7-bootptodhcpfailover/src/net/dhcppkt.c 2009-08-21 21:49:52.000000000 -0400 @@ -155,6 +155,8 @@ memset ( field_data, 0, field->len ); memcpy ( dhcp_packet_field ( dhcppkt->dhcphdr, field ), data, len ); + /* Erase any equivalent option from the options block */ + dhcpopt_store ( &dhcppkt->options, tag, NULL, 0 ); return 0; } @@ -181,14 +183,16 @@ void *data, size_t len ) { struct dhcp_packet_field *field; void *field_data; - size_t field_len; + size_t field_len = 0; - /* If this is a special field, return it */ + /* Identify special field, if any */ if ( ( field = find_dhcp_packet_field ( tag ) ) != NULL ) { field_data = dhcp_packet_field ( dhcppkt->dhcphdr, field ); field_len = field->used_len ( field_data, field->len ); - if ( ! field_len ) - return -ENOENT; + } + + /* Return special field, if it exists and is populated */ + if ( field_len ) { if ( len > field_len ) len = field_len; memcpy ( data, field_data, len );