aboutsummaryrefslogtreecommitdiff
path: root/toys/pending/sysctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'toys/pending/sysctl.c')
-rw-r--r--toys/pending/sysctl.c80
1 files changed, 40 insertions, 40 deletions
diff --git a/toys/pending/sysctl.c b/toys/pending/sysctl.c
index 74e7dee1..7e8736d7 100644
--- a/toys/pending/sysctl.c
+++ b/toys/pending/sysctl.c
@@ -13,6 +13,8 @@ config SYSCTL
help
usage: sysctl [OPTIONS] [KEY[=VALUE]]...
+ Configure kernel parameters at runtime.
+
-a, A Show all values
-e Don't warn about unknown keys
-N Show only key names
@@ -45,10 +47,7 @@ show_error_msg:
static void replace_char(char *str, char old, char new)
{
- char *tmp = str;
-
- for (; *tmp; tmp++)
- if (*tmp == old) *tmp = new;
+ for (; *str; str++) if (*str == old) *str = new;
}
static void handle_file_error(char *key_name)
@@ -84,11 +83,11 @@ static void write_to_file(char *fpath, char *key_name, char *key_value)
static char *get_key_value(char *buff, int *offset)
{
- char *line, *tmp = (char *) (buff + *offset);
+ char *line, *tmp = buff + *offset;
int index = 0, multiplier = 1;
- if (!(*tmp)) return NULL;
- line = (char *) xmalloc(sizeof(char) * MAX_BYTES_LINE);
+ if (!*tmp) return 0;
+ line = xmalloc(MAX_BYTES_LINE);
for (; *tmp != '\n'; tmp++) {
line[index++] = *tmp;
if (MAX_BYTES_LINE == index) { // buffer overflow
@@ -101,35 +100,6 @@ static char *get_key_value(char *buff, int *offset)
return line;
}
-// Open file for each and every key name and read file contents
-void read_key_values(char *fpath)
-{
- char *key_value, *fdata, *key_name, *tmp = xstrdup(fpath);
- int offset = 0;
-
- key_name = (tmp + strlen(PROC_SYS_DIR) + 1);
- replace_char(key_name, '/', '.');
- if (!(fdata = readfile(fpath, NULL, 0))) {
- handle_file_error(key_name);
- free(tmp);
- return;
- }
- if (toys.optflags & FLAG_N) {
- xprintf("%s\n", key_name);
- free(tmp);
- free(fdata);
- return;
- }
- for (; (key_value = get_key_value(fdata, &offset)); free(key_value)) {
- if (!(toys.optflags & FLAG_q)) {
- if (!(toys.optflags & FLAG_n)) xprintf("%s = ", key_name);
- xprintf("%s\n", key_value);
- }
- }
- free(tmp);
- free(fdata);
-}
-
static void trim_spaces(char **param)
{
int len = 0;
@@ -147,7 +117,7 @@ static void trim_spaces(char **param)
}
}
-// Read config file and write values to there corresponding key name files
+// Read config file and write values to corresponding key name files
static void read_config_file(char *fname)
{
char *line, *name = NULL, *value = NULL;
@@ -167,7 +137,36 @@ static void read_config_file(char *fname)
xclose(fd);
}
-static int do_process(struct dirtree *dt)
+// Open file for each and every key name and read file contents
+void read_key_values(char *fpath)
+{
+ char *key_value, *fdata, *key_name, *tmp = xstrdup(fpath);
+ int offset = 0;
+
+ key_name = (tmp + strlen(PROC_SYS_DIR) + 1);
+ replace_char(key_name, '/', '.');
+ if (!(fdata = readfile(fpath, NULL, 0))) {
+ handle_file_error(key_name);
+ free(tmp);
+ return;
+ }
+ if (toys.optflags & FLAG_N) {
+ xprintf("%s\n", key_name);
+ free(tmp);
+ free(fdata);
+ return;
+ }
+ for (; (key_value = get_key_value(fdata, &offset)); free(key_value)) {
+ if (!(toys.optflags & FLAG_q)) {
+ if (!(toys.optflags & FLAG_n)) xprintf("%s = ", key_name);
+ xprintf("%s\n", key_value);
+ }
+ }
+ free(tmp);
+ free(fdata);
+}
+
+static int do_flag_a(struct dirtree *dt)
{
char *fpath;
@@ -177,15 +176,16 @@ static int do_process(struct dirtree *dt)
read_key_values(fpath);
free(fpath);
}
+
return 0;
}
void sysctl_main()
{
- char *name = NULL, *value = NULL, **args = NULL;
+ char *name = 0, *value = 0, **args = 0;
if (toys.optflags & FLAG_a) {
- dirtree_read(PROC_SYS_DIR, do_process);
+ dirtree_read(PROC_SYS_DIR, do_flag_a);
return;
}
if (toys.optflags & FLAG_p) {