[BusyBox-cvs] busybox/procps sysctl.c,1.1,1.2

Glenn McGrath bug1 at busybox.net
Fri Dec 26 02:19:36 UTC 2003


Update of /var/cvs/busybox/procps
In directory nail:/tmp/cvs-serv26610/procps

Modified Files:
	sysctl.c 
Log Message:
Vodz last_patch120, more busybox integration, saves 330 Bytes. Tested.


Index: sysctl.c
===================================================================
RCS file: /var/cvs/busybox/procps/sysctl.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- sysctl.c	24 Dec 2003 06:02:11 -0000	1.1
+++ sysctl.c	26 Dec 2003 02:19:34 -0000	1.2
@@ -34,7 +34,6 @@
 /*
  *    Function Prototypes
  */
-static int sysctl_usage(void);
 static int sysctl_read_setting(const char *setting, int output);
 static int sysctl_write_setting(const char *setting, int output);
 static int sysctl_preload_file(const char *filename, int output);
@@ -43,28 +42,33 @@
 /*
  *    Globals...
  */
-static const char *PROC_PATH = "/proc/sys/";
-static const char *DEFAULT_PRELOAD = "/etc/sysctl.conf";
+static const char PROC_PATH[] = "/proc/sys/";
+static const char DEFAULT_PRELOAD[] = "/etc/sysctl.conf";
 
 /* error messages */
-static const char *ERR_UNKNOWN_PARAMETER = "error: Unknown parameter '%s'\n";
-static const char *ERR_MALFORMED_SETTING = "error: Malformed setting '%s'\n";
-static const char *ERR_NO_EQUALS =
+static const char ERR_UNKNOWN_PARAMETER[] = "error: Unknown parameter '%s'\n";
+static const char ERR_MALFORMED_SETTING[] = "error: Malformed setting '%s'\n";
+static const char ERR_NO_EQUALS[] =
 	"error: '%s' must be of the form name=value\n";
-static const char *ERR_INVALID_KEY = "error: '%s' is an unknown key\n";
-static const char *ERR_UNKNOWN_WRITING =
+static const char ERR_INVALID_KEY[] = "error: '%s' is an unknown key\n";
+static const char ERR_UNKNOWN_WRITING[] =
 	"error: unknown error %d setting key '%s'\n";
-static const char *ERR_UNKNOWN_READING =
+static const char ERR_UNKNOWN_READING[] =
 	"error: unknown error %d reading key '%s'\n";
-static const char *ERR_PERMISSION_DENIED =
+static const char ERR_PERMISSION_DENIED[] =
 	"error: permission denied on key '%s'\n";
-static const char *ERR_OPENING_DIR = "error: unable to open directory '%s'\n";
-static const char *ERR_PRELOAD_FILE =
+static const char ERR_OPENING_DIR[] = "error: unable to open directory '%s'\n";
+static const char ERR_PRELOAD_FILE[] =
 	"error: unable to open preload file '%s'\n";
-static const char *WARN_BAD_LINE =
+static const char WARN_BAD_LINE[] =
 	"warning: %s(%d): invalid syntax, continuing...\n";
 
 
+static void dwrite_str(int fd, const char *buf)
+{
+	write(fd, buf, strlen(buf));
+}
+
 /*
  *    sysctl_main()... 
  */
@@ -76,7 +80,7 @@
 	int switches_allowed = 1;
 
 	if (argc < 2)
-		return sysctl_usage();
+		bb_show_usage();
 
 	argv++;
 
@@ -103,10 +107,10 @@
 										  ((*argv)[1] == 'a') ? 0 : 1);
 			case 'h':
 			case '?':
-				return sysctl_usage();
+				bb_show_usage();
 			default:
 				bb_error_msg(ERR_UNKNOWN_PARAMETER, *argv);
-				return sysctl_usage();
+				bb_show_usage();
 			}
 		} else {
 			switches_allowed = 0;
@@ -119,14 +123,6 @@
 	return retval;
 }						/* end sysctl_main() */
 
-/*
- *     Display the sysctl_usage format
- */
-int sysctl_usage()
-{
-	bb_show_usage();
-	return -1;
-}						/* end sysctl_usage() */
 
 
 /*
@@ -134,17 +130,18 @@
  *	preload the sysctl's from a conf file
  *           - we parse the file and then reform it (strip out whitespace)
  */
+#define PRELOAD_BUF 256
+
 int sysctl_preload_file(const char *filename, int output)
 {
 	int lineno = 0;
-	char oneline[256];
-	char buffer[256];
+	char oneline[PRELOAD_BUF];
+	char buffer[PRELOAD_BUF];
 	char *name, *value, *ptr;
 	FILE *fp = NULL;
 
 	if (!filename || ((fp = fopen(filename, "r")) == NULL)) {
-		bb_error_msg(ERR_PRELOAD_FILE, filename);
-		return 1;
+		bb_error_msg_and_die(ERR_PRELOAD_FILE, filename);
 	}
 
 	while (fgets(oneline, sizeof(oneline) - 1, fp)) {
@@ -175,9 +172,9 @@
 
 		while ((*value == ' ' || *value == '\t') && *value != 0)
 			value++;
-		strncpy(buffer, name, sizeof(buffer));
-		strncat(buffer, "=", sizeof(buffer));
-		strncat(buffer, value, sizeof(buffer));
+		strcpy(buffer, name);
+		strcat(buffer, "=");
+		strcat(buffer, value);
 		sysctl_write_setting(buffer, output);
 	}
 	fclose(fp);
@@ -200,7 +197,7 @@
 	if (!name)			/* probably dont' want to display this  err */
 		return 0;
 
-	if (!(equals = index(setting, '='))) {
+	if (!(equals = strchr(setting, '='))) {
 		bb_error_msg(ERR_NO_EQUALS, setting);
 		return -1;
 	}
@@ -212,16 +209,8 @@
 		return -2;
 	}
 
-	tmpname =
-		(char *) xmalloc((equals - name + 1 + bb_strlen(PROC_PATH)) *
-						 sizeof(char));
-	outname = (char *) xmalloc((equals - name + 1) * sizeof(char));
-
-	strcpy(tmpname, PROC_PATH);
-	strncat(tmpname, name, (int) (equals - name));
-	tmpname[equals - name + bb_strlen(PROC_PATH)] = 0;
-	strncpy(outname, name, (int) (equals - name));
-	outname[equals - name] = 0;
+	bb_xasprintf(&tmpname, "%s%.*s", PROC_PATH, (equals - name), name);
+	outname = bb_xstrdup(tmpname + strlen(PROC_PATH));
 
 	while ((cptr = strchr(tmpname, '.')) != NULL)
 		*cptr = '/';
@@ -243,14 +232,14 @@
 		}
 		retval = -1;
 	} else {
-		write(fd, value, bb_strlen(value));
+		dwrite_str(fd, value);
 		close(fd);
 		if (output) {
-			write(STDOUT_FILENO, outname, bb_strlen(outname));
-			write(STDOUT_FILENO, " = ", 3);
+			dwrite_str(STDOUT_FILENO, outname);
+			dwrite_str(STDOUT_FILENO, " = ");
 		}
-		write(STDOUT_FILENO, value, bb_strlen(value));
-		write(STDOUT_FILENO, "\n", 1);
+		dwrite_str(STDOUT_FILENO, value);
+		dwrite_str(STDOUT_FILENO, "\n");
 	}
 
 	/* cleanup */
@@ -275,14 +264,8 @@
 	if (!setting || !*setting)
 		bb_error_msg(ERR_INVALID_KEY, setting);
 
-	tmpname =
-		(char *) xmalloc((bb_strlen(name) + bb_strlen(PROC_PATH) + 1) *
-						 sizeof(char));
-	outname = (char *) xmalloc((bb_strlen(name) + 1) * sizeof(char));
-
-	strcpy(tmpname, PROC_PATH);
-	strcat(tmpname, name);
-	strcpy(outname, name);
+	tmpname = concat_path_file(PROC_PATH, name);
+	outname = bb_xstrdup(tmpname + strlen(PROC_PATH));
 
 	while ((cptr = strchr(tmpname, '.')) != NULL)
 		*cptr = '/';
@@ -305,10 +288,10 @@
 	} else {
 		while (fgets(inbuf, sizeof(inbuf) - 1, fp)) {
 			if (output) {
-				write(STDOUT_FILENO, outname, bb_strlen(outname));
-				write(STDOUT_FILENO, " = ", 3);
+				dwrite_str(STDOUT_FILENO, outname);
+				dwrite_str(STDOUT_FILENO, " = ");
 			}
-			write(STDOUT_FILENO, inbuf, bb_strlen(inbuf));
+			dwrite_str(STDOUT_FILENO, inbuf);
 		}
 		fclose(fp);
 	}
@@ -337,18 +320,14 @@
 		bb_perror_msg(ERR_OPENING_DIR, path);
 		retval = -1;
 	} else {
-		readdir(dp);
-		readdir(dp);	/* skip . and .. */
 		while ((de = readdir(dp)) != NULL) {
-			tmpdir =
-				(char *) xmalloc(bb_strlen(path) + bb_strlen(de->d_name) + 2);
-			strcpy(tmpdir, path);
-			strcat(tmpdir, de->d_name);
+			tmpdir = concat_subpath_file(path, de->d_name);
+			if(tmpdir == NULL)
+				continue;
 			if ((retval2 = stat(tmpdir, &ts)) != 0)
 				bb_perror_msg(tmpdir);
 			else {
 				if (S_ISDIR(ts.st_mode)) {
-					strcat(tmpdir, "/");
 					sysctl_display_all(tmpdir, output, show_table);
 				} else
 					retval |=
@@ -369,4 +348,5 @@
 {
 	return sysctl_main(argc, argv);
 }
+const char *bb_applet_name = "sysctl";
 #endif




More information about the busybox-cvs mailing list