udhcp: many small fixes:
* arpping(): smaller and even probably fixed
* lots of variables/params converted: ulong -> uint32_t
* uptime() nuked in favor of monotonic_sec()
* udhcp_get_packet(): only one "bad vendor", simplify

function                                             old     new   delta
reservedIp                                            36      35      -1
udhcpc_main                                         2462    2460      -2
addStaticLease                                        64      62      -2
static.broken_vendors                                 16       -     -16
uptime                                                19       -     -19
udhcpd_main                                         1273    1238     -35
udhcp_get_packet                                     223     184     -39
.rodata                                           144162  144106     -56
arpping                                              690     609     -81
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 0/7 up/down: 0/-251)           Total: -251 bytes
   text    data     bss     dec     hex filename
 734241    3028   14400  751669   b7835 busybox_old
 734005    3028   14400  751433   b7749 busybox_unstripped

diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 50ac31e..6909e84 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -22,8 +22,8 @@
  * in the code. Manpage says that struct in_addr has a member of type long (!)
  * which holds IPv4 address, and the struct is passed by value (!!)
  */
-static unsigned long timeout;
-static unsigned long requested_ip; /* = 0 */
+static unsigned timeout;
+static uint32_t requested_ip; /* = 0 */
 static uint32_t server_addr;
 static int packet_num; /* = 0 */
 static int sockfd = -1;
@@ -84,13 +84,13 @@
 /* perform a release */
 static void perform_release(void)
 {
-	char buffer[16];
+	char buffer[sizeof("255.255.255.255")];
 	struct in_addr temp_addr;
 
 	/* send release packet */
 	if (state == BOUND || state == RENEWING || state == REBINDING) {
 		temp_addr.s_addr = server_addr;
-		sprintf(buffer, "%s", inet_ntoa(temp_addr));
+		strcpy(buffer, inet_ntoa(temp_addr));
 		temp_addr.s_addr = requested_ip;
 		bb_info_msg("Unicasting a release of %s to %s",
 				inet_ntoa(temp_addr), buffer);
@@ -101,7 +101,7 @@
 
 	change_mode(LISTEN_NONE);
 	state = RELEASED;
-	timeout = 0x7fffffff;
+	timeout = INT_MAX;
 }
 
 
@@ -115,12 +115,13 @@
  * will work on NOMMU too */
 #else
 	bb_daemonize(0);
+	logmode &= ~LOGMODE_STDIO;
 	/* rewrite pidfile, as our pid is different now */
 	if (client_config.pidfile)
 		write_pidfile(client_config.pidfile);
-	logmode &= ~LOGMODE_STDIO;
 #endif
-	client_config.foreground = 1; /* Do not fork again. */
+	/* Do not fork again. */
+	client_config.foreground = 1;
 	client_config.background_if_no_lease = 0;
 }
 
@@ -143,9 +144,11 @@
 {
 	uint8_t *temp, *message;
 	char *str_c, *str_V, *str_h, *str_F, *str_r, *str_T, *str_t;
-	unsigned long t1 = 0, t2 = 0, xid = 0;
-	unsigned long start = 0, lease = 0;
-	long now;
+	uint32_t xid = 0;
+	uint32_t lease = 0; /* can be given as 32-bit quantity */
+	unsigned t1 = 0, t2 = 0;
+	unsigned start = 0;
+	unsigned now;
 	unsigned opt;
 	int max_fd;
 	int sig;
@@ -292,7 +295,7 @@
 	change_mode(LISTEN_RAW);
 
 	for (;;) {
-		tv.tv_sec = timeout - uptime();
+		tv.tv_sec = timeout - monotonic_sec();
 		tv.tv_usec = 0;
 
 		if (listen_mode != LISTEN_NONE && sockfd < 0) {
@@ -308,7 +311,7 @@
 			retval = select(max_fd + 1, &rfds, NULL, NULL, &tv);
 		} else retval = 0; /* If we already timed out, fall through */
 
-		now = uptime();
+		now = monotonic_sec();
 		if (retval == 0) {
 			/* timeout dropped to zero */
 			switch (state) {
@@ -398,7 +401,7 @@
 				break;
 			case RELEASED:
 				/* yah, I know, *you* say it would never happen */
-				timeout = 0x7fffffff;
+				timeout = INT_MAX;
 				break;
 			}
 		} else if (retval > 0 && listen_mode != LISTEN_NONE && FD_ISSET(sockfd, &rfds)) {
@@ -415,8 +418,8 @@
 			if (len < 0) continue;
 
 			if (packet.xid != xid) {
-				DEBUG("Ignoring XID %lx (our xid is %lx)",
-					(unsigned long) packet.xid, xid);
+				DEBUG("Ignoring XID %x (our xid is %x)",
+					(unsigned)packet.xid, (unsigned)xid);
 				continue;
 			}
 
@@ -471,10 +474,10 @@
 					t1 = lease / 2;
 
 					/* little fixed point for n * .875 */
-					t2 = (lease * 0x7) >> 3;
+					t2 = (lease * 7) >> 3;
 					temp_addr.s_addr = packet.yiaddr;
-					bb_info_msg("Lease of %s obtained, lease time %ld",
-						inet_ntoa(temp_addr), lease);
+					bb_info_msg("Lease of %s obtained, lease time %u",
+						inet_ntoa(temp_addr), (unsigned)lease);
 					start = now;
 					timeout = t1 + start;
 					requested_ip = packet.yiaddr;