svn commit: trunk/busybox/sysklogd

vda at busybox.net vda at busybox.net
Thu Jan 4 03:07:59 UTC 2007


Author: vda
Date: 2007-01-03 19:07:57 -0800 (Wed, 03 Jan 2007)
New Revision: 17153

Log:
klogd: small optimizations
(btw, I looked into syslogd... that's frightening!)


Modified:
   trunk/busybox/sysklogd/klogd.c


Changeset:
Modified: trunk/busybox/sysklogd/klogd.c
===================================================================
--- trunk/busybox/sysklogd/klogd.c	2007-01-03 23:23:58 UTC (rev 17152)
+++ trunk/busybox/sysklogd/klogd.c	2007-01-04 03:07:57 UTC (rev 17153)
@@ -25,8 +25,7 @@
 {
 	klogctl(7, NULL, 0);
 	klogctl(0, 0, 0);
-	/* logMessage(0, "Kernel log daemon exiting."); */
-	syslog(LOG_NOTICE, "Kernel log daemon exiting.");
+	syslog(LOG_NOTICE, "Kernel log daemon exiting");
 	exit(EXIT_SUCCESS);
 }
 
@@ -38,29 +37,25 @@
 int klogd_main(int argc, char **argv)
 {
 	RESERVE_CONFIG_BUFFER(log_buffer, KLOGD_LOGBUF_SIZE);
-	int console_log_level = -1;
+	int console_log_level = console_log_level; /* for gcc */
 	int priority = LOG_INFO;
 	int i, n, lastc;
 	char *start;
 
-	{
-		unsigned opt;
+	/* do normal option parsing */
+	n = getopt32(argc, argv, "c:n", &start);
 
-		/* do normal option parsing */
-		opt = getopt32(argc, argv, "c:n", &start);
+	if (n & OPT_LEVEL) {
+		/* Valid levels are between 1 and 8 */
+		console_log_level = xatoul_range(start, 1, 8);
+	}
 
-		if (opt & OPT_LEVEL) {
-			/* Valid levels are between 1 and 8 */
-			console_log_level = xatoul_range(start, 1, 8);
-		}
-
-		if (!(opt & OPT_FOREGROUND)) {
+	if (!(n & OPT_FOREGROUND)) {
 #ifdef BB_NOMMU
-			vfork_daemon_rexec(0, 1, argc, argv, "-n");
+		vfork_daemon_rexec(0, 1, argc, argv, "-n");
 #else
-			xdaemon(0, 1);
+		xdaemon(0, 1);
 #endif
-		}
 	}
 
 	openlog("kernel", 0, LOG_KERN);
@@ -75,7 +70,7 @@
 	klogctl(1, NULL, 0);
 
 	/* Set level of kernel console messaging.. */
-	if (console_log_level != -1)
+	if (n & OPT_LEVEL)
 		klogctl(8, NULL, console_log_level);
 
 	syslog(LOG_NOTICE, "klogd started: %s", BB_BANNER);
@@ -83,13 +78,14 @@
 	while (1) {
 		/* Use kernel syscalls */
 		memset(log_buffer, '\0', KLOGD_LOGBUF_SIZE);
-		n = klogctl(2, log_buffer, KLOGD_LOGBUF_SIZE);
+		/* It will be null-terminted */
+		n = klogctl(2, log_buffer, KLOGD_LOGBUF_SIZE - 1);
 		if (n < 0) {
 			if (errno == EINTR)
 				continue;
-			syslog(LOG_ERR, "klogd: Error from sys_sycall: %d - %m.\n",
+			syslog(LOG_ERR, "klogd: error from klogctl(2): %d - %m",
 				   errno);
-			exit(EXIT_FAILURE);
+			break;
 		}
 
 		/* klogctl buffer parsing modelled after code in dmesg.c */
@@ -97,10 +93,15 @@
 		lastc = '\0';
 		for (i = 0; i < n; i++) {
 			if (lastc == '\0' && log_buffer[i] == '<') {
-				priority = 0;
 				i++;
-				while (log_buffer[i] >= '0' && log_buffer[i] <= '9') {
-					priority = priority * 10 + (log_buffer[i] - '0');
+				// kernel never ganerates multi-digit prios
+				//priority = 0;
+				//while (log_buffer[i] >= '0' && log_buffer[i] <= '9') {
+				//	priority = priority * 10 + (log_buffer[i] - '0');
+				//	i++;
+				//}
+				if (isdigit(log_buffer[i])) {
+					priority = (log_buffer[i] - '0');
 					i++;
 				}
 				if (log_buffer[i] == '>')
@@ -119,5 +120,5 @@
 	if (ENABLE_FEATURE_CLEAN_UP)
 		RELEASE_CONFIG_BUFFER(log_buffer);
 
-	return EXIT_SUCCESS;
+	return EXIT_FAILURE;
 }




More information about the busybox-cvs mailing list