• Home
  • Raw
  • Download

Lines Matching +full:path +full:- +full:key

1 /* sysctl.c - A utility to read and manipulate the sysctl parameters.
14 usage: sysctl [-aAeNnqw] [-p [FILE] | KEY[=VALUE]...]
18 -a,A Show all values
19 -e Don't warn about unknown keys
20 -N Don't print key values
21 -n Don't print key names
22 -p Read values from FILE (default /etc/sysctl.conf)
23 -q Don't show value after write
24 -w Only write values (object to reading)
30 static char *split_key(char *key) in split_key() argument
32 char *value = strchr(key, '='); in split_key()
44 static void key_error(char *key) in key_error() argument
47 if (!(toys.optflags & FLAG_e)) error_msg("unknown key '%s'", key); in key_error()
48 } else perror_msg("key '%s'", key); in key_error()
51 static int write_key(char *path, char *key, char *value) in write_key() argument
53 int fd = open(path, O_WRONLY); in write_key()
56 key_error(key); in write_key()
66 // Display all keys under a path
69 char *path, *data, *key; in do_show_keys() local
72 if (S_ISDIR(dt->st.st_mode)) return DIRTREE_RECURSE; in do_show_keys()
74 path = dirtree_path(dt, 0); in do_show_keys()
75 data = readfile(path, 0, 0); in do_show_keys()
76 replace_char(key = path + 10, '/', '.'); // skip "/proc/sys/" in do_show_keys()
77 if (!data) key_error(key); in do_show_keys()
80 if (!(toys.optflags & FLAG_n)) xprintf("%s", key); in do_show_keys()
82 for (key = data+strlen(data); key > data && isspace(*--key); *key = 0); in do_show_keys()
88 free(path); in do_show_keys()
93 // Read/write entries under a key. Accepts "key=value" in key if !value
94 static void process_key(char *key, char *value) in process_key() argument
96 char *path; in process_key() local
98 if (!value) value = split_key(key); in process_key()
100 error_msg("'%s' not key=value", key); in process_key()
105 path = xmprintf("/proc/sys/%s", key); in process_key()
106 replace_char(path, '.', '/'); in process_key()
107 // Note: failure to assign to a non-leaf node suppresses the display. in process_key()
108 if (!(value && (!write_key(path, key, value) || (toys.optflags & FLAG_q)))) { in process_key()
109 if (!access(path, R_OK)) dirtree_read(path, do_show_keys); in process_key()
110 else key_error(key); in process_key()
112 free(path); in process_key()
128 char *line = 0, *key, *val; in sysctl_main() local
130 if (-1 == (len = getline(&line, &len, fp))) break; in sysctl_main()
131 key = line; in sysctl_main()
132 while (isspace(*key)) key++; in sysctl_main()
133 if (*key == '#' || *key == ';' || !*key) continue; in sysctl_main()
134 while (len && isspace(line[len-1])) line[--len] = 0; in sysctl_main()
136 error_msg("'%s' not key=value", line); in sysctl_main()
141 len = (val-line)-1; in sysctl_main()
142 while (len && isspace(line[len-1])) line[--len] = 0; in sysctl_main()
145 process_key(key, val); in sysctl_main()