- shrink klogd a bit
   text    data     bss     dec     hex filename
    569       0       0     569     239 sysklogd/klogd.o.orig
    537       0       0     537     219 sysklogd/klogd.o
diff --git a/sysklogd/klogd.c b/sysklogd/klogd.c
index cd152a5..404e227 100644
--- a/sysklogd/klogd.c
+++ b/sysklogd/klogd.c
@@ -29,7 +29,7 @@
 
 #include "busybox.h"
 
-static void klogd_signal(int sig)
+static void klogd_signal(int sig ATTRIBUTE_UNUSED)
 {
 	klogctl(7, NULL, 0);
 	klogctl(0, 0, 0);
@@ -38,14 +38,40 @@
 	exit(EXIT_SUCCESS);
 }
 
-static void doKlogd(const int console_log_level) ATTRIBUTE_NORETURN;
-static void doKlogd(const int console_log_level)
+#define OPT_LEVEL        1
+#define OPT_FOREGROUND   2
+
+#define KLOGD_LOGBUF_SIZE 4096
+
+int klogd_main(int argc, char **argv)
 {
+	RESERVE_CONFIG_BUFFER(log_buffer, KLOGD_LOGBUF_SIZE);
+	int console_log_level = -1;
 	int priority = LOG_INFO;
-	char log_buffer[4096];
 	int i, n, lastc;
 	char *start;
 
+
+	{
+		unsigned long opt;
+
+		/* do normal option parsing */
+		opt = bb_getopt_ulflags(argc, argv, "c:n", &start);
+
+		if (opt & OPT_LEVEL) {
+			/* Valid levels are between 1 and 8 */
+			console_log_level = bb_xgetlarg(start, 10, 1, 8);
+		}
+
+		if (!(opt & OPT_FOREGROUND)) {
+#ifdef BB_NOMMU
+			vfork_daemon_rexec(0, 1, argc, argv, "-n");
+#else
+			bb_xdaemon(0, 1);
+#endif
+		}
+	}
+
 	openlog("kernel", 0, LOG_KERN);
 
 	/* Set up sig handlers */
@@ -65,12 +91,13 @@
 
 	while (1) {
 		/* Use kernel syscalls */
-		memset(log_buffer, '\0', sizeof(log_buffer));
-		n = klogctl(2, log_buffer, sizeof(log_buffer));
+		memset(log_buffer, '\0', KLOGD_LOGBUF_SIZE);
+		n = klogctl(2, log_buffer, KLOGD_LOGBUF_SIZE);
 		if (n < 0) {
 			if (errno == EINTR)
 				continue;
-			syslog(LOG_ERR, "klogd: Error return from sys_sycall: %d - %m.\n", errno);
+			syslog(LOG_ERR, "klogd: Error from sys_sycall: %d - %m.\n",
+				   errno);
 			exit(EXIT_FAILURE);
 		}
 
@@ -81,7 +108,7 @@
 			if (lastc == '\0' && log_buffer[i] == '<') {
 				priority = 0;
 				i++;
-				while (isdigit(log_buffer[i])) {
+				while (log_buffer[i] >= '0' && log_buffer[i] <= '9') {
 					priority = priority * 10 + (log_buffer[i] - '0');
 					i++;
 				}
@@ -98,33 +125,8 @@
 			lastc = log_buffer[i];
 		}
 	}
-}
-
-#define OPT_LEVEL        1
-#define OPT_FOREGROUND   2
-
-int klogd_main(int argc, char **argv)
-{
-	unsigned long opt;
-	char *c_arg;
-	int console_log_level = -1;
-
-	/* do normal option parsing */
-	opt = bb_getopt_ulflags (argc, argv, "c:n", &c_arg);
-
-	if (opt & OPT_LEVEL) {
-		/* Valid levels are between 1 and 8 */
-		console_log_level = bb_xgetlarg(c_arg, 10, 1, 8);
-	}
-
-	if (!(opt & OPT_FOREGROUND)) {
-#ifdef BB_NOMMU
-		vfork_daemon_rexec(0, 1, argc, argv, "-n");
-#else
-		bb_xdaemon(0, 1);
-#endif
-	}
-	doKlogd(console_log_level);
+	if (ENABLE_FEATURE_CLEAN_UP)
+		RELEASE_CONFIG_BUFFER(log_buffer);
 
 	return EXIT_SUCCESS;
 }