udhcpc: make -O <numeric_opt> work. Closes 5402

function                                             old     new   delta
udhcpc_main                                         2642    2685     +43
udhcp_recv_raw_packet                                414     415      +1
d6_recv_raw_packet                                   248     249      +1
udhcpc6_main                                        2430    2413     -17
add_client_options                                   239     213     -26
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/2 up/down: 45/-43)              Total: 2 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 4e7bd4b..bc1db70 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -589,7 +589,6 @@
 
 static void add_client_options(struct dhcp_packet *packet)
 {
-	uint8_t c;
 	int i, end, len;
 
 	udhcp_add_simple_option(packet, DHCP_MAX_SIZE, htons(IP_UDP_DHCP_SIZE));
@@ -599,13 +598,9 @@
 	 * No bounds checking because it goes towards the head of the packet. */
 	end = udhcp_end_option(packet->options);
 	len = 0;
-	for (i = 0; (c = dhcp_optflags[i].code) != 0; i++) {
-		if ((   (dhcp_optflags[i].flags & OPTION_REQ)
-		     && !client_config.no_default_options
-		    )
-		 || (client_config.opt_mask[c >> 3] & (1 << (c & 7)))
-		) {
-			packet->options[end + OPT_DATA + len] = c;
+	for (i = 1; i < DHCP_END; i++) {
+		if (client_config.opt_mask[i >> 3] & (1 << (i & 7))) {
+			packet->options[end + OPT_DATA + len] = i;
 			len++;
 		}
 	}
@@ -1257,8 +1252,6 @@
 		SERVER_PORT = CLIENT_PORT - 1;
 	}
 #endif
-	if (opt & OPT_o)
-		client_config.no_default_options = 1;
 	while (list_O) {
 		char *optstr = llist_pop(&list_O);
 		unsigned n = bb_strtou(optstr, NULL, 0);
@@ -1268,6 +1261,14 @@
 		}
 		client_config.opt_mask[n >> 3] |= 1 << (n & 7);
 	}
+	if (!(opt & OPT_o)) {
+		unsigned i, n;
+		for (i = 0; (n = dhcp_optflags[i].code) != 0; i++) {
+			if (dhcp_optflags[i].flags & OPTION_REQ) {
+				client_config.opt_mask[n >> 3] |= 1 << (n & 7);
+			}
+		}
+	}
 	while (list_x) {
 		char *optstr = llist_pop(&list_x);
 		char *colon = strchr(optstr, ':');