annotate toys/other/sysctl.c @ 1713:58d9f1b61f0a draft

Patches from Elliott Hughes to add missing arguments to error_exit() calls.
author Rob Landley <rob@landley.net>
date Sun, 01 Mar 2015 15:58:40 -0600
parents 1a8108bda4c1
children 57f2a26fa92c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
1 /* sysctl.c - A utility to read and manipulate the sysctl parameters.
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
2 *
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
3 * Copyright 2014 Bilal Qureshi <bilal.jmi@gmail.com>
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
4 * Copyright 2014 Kyungwan Han <asura321@gmail.com>
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
5 *
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
6 * No Standard
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
7
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
8 USE_SYSCTL(NEWTOY(sysctl, "^neNqwpaA[!ap][!aq][!aw][+aA]", TOYFLAG_USR|TOYFLAG_BIN))
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
9
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
10 config SYSCTL
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 bool "sysctl"
1285
1a8108bda4c1 Promote sysctl from pending to other, default y.
Rob Landley <rob@landley.net>
parents: 1284
diff changeset
12 default y
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 help
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
14 usage: sysctl [-aAeNnqw] [-p [FILE] | KEY[=VALUE]...]
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
15
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
16 Read/write system control data (under /proc/sys).
1282
c99912c6bc09 First cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1281
diff changeset
17
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
18 -a,A Show all values
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
19 -e Don't warn about unknown keys
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
20 -N Don't print key values
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
21 -n Don't print key names
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
22 -p [FILE] Read values from FILE (default /etc/sysctl.conf)
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
23 -q Don't show value after write
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
24 -w Only write values (object to reading)
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
25 */
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
26 #define FOR_sysctl
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
27 #include "toys.h"
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
28
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
29 // Null terminate at =, return value
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
30 static char *split_key(char *key)
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
31 {
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
32 char *value = strchr(key, '=');
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
33
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
34 if (value) *(value++)=0;
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
35
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
36 return value;
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
37 }
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
38
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
39 static void replace_char(char *str, char old, char new)
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
40 {
1282
c99912c6bc09 First cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1281
diff changeset
41 for (; *str; str++) if (*str == old) *str = new;
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
42 }
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
43
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
44 static void key_error(char *key)
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
45 {
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
46 if (errno == ENOENT) {
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
47 if (!(toys.optflags & FLAG_e)) error_msg("unknown key '%s'", key);
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
48 } else perror_msg("key '%s'", key);
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
49 }
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
50
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
51 static int write_key(char *path, char *key, char *value)
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
52 {
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
53 int fd = open(path, O_WRONLY);;
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
54
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
55 if (fd < 0) {
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
56 key_error(key);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
57
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
58 return 0;
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
59 }
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
60 xwrite(fd, value, strlen(value));
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
61 xclose(fd);
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
62
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
63 return 1;
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
64 }
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
65
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
66 // Display all keys under a path
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
67 static int do_show_keys(struct dirtree *dt)
1282
c99912c6bc09 First cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1281
diff changeset
68 {
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
69 char *path, *data, *key;
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
70
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
71 if (!dirtree_notdotdot(dt)) return 0; // Skip . and ..
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
72 if (S_ISDIR(dt->st.st_mode)) return DIRTREE_RECURSE;
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
73
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
74 path = dirtree_path(dt, 0);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
75 data = readfile(path, 0, 0);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
76 replace_char(key = path + 10, '/', '.'); // skip "/proc/sys/"
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
77 if (!data) key_error(key);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
78 else {
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
79 // Print the parts that aren't switched off by flags.
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
80 if (!(toys.optflags & FLAG_n)) xprintf("%s", key);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
81 if (!(toys.optflags & (FLAG_N|FLAG_n))) xprintf(" = ");
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
82 for (key = data+strlen(data); key > data && isspace(*--key); *key = 0);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
83 if (!(toys.optflags & FLAG_N)) xprintf("%s", data);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
84 if ((toys.optflags & (FLAG_N|FLAG_n)) != (FLAG_N|FLAG_n)) xputc('\n');
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
85 }
1282
c99912c6bc09 First cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1281
diff changeset
86
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
87 free(data);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
88 free(path);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
89
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
90 return 0;
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
91 }
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
92
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
93 // Read/write entries under a key. Accepts "key=value" in key if !value
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
94 static void process_key(char *key, char *value)
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
95 {
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
96 char *path;
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
97
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
98 if (!value) value = split_key(key);
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
99 if ((toys.optflags & FLAG_w) && !value) {
1713
58d9f1b61f0a Patches from Elliott Hughes to add missing arguments to error_exit() calls.
Rob Landley <rob@landley.net>
parents: 1285
diff changeset
100 error_msg("'%s' not key=value", key);
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
101
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
102 return;
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
103 }
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
104
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
105 path = xmprintf("/proc/sys/%s", key);
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
106 replace_char(path, '.', '/');
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
107 // Note: failure to assign to a non-leaf node suppresses the display.
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
108 if (!(value && (!write_key(path, key, value) || (toys.optflags & FLAG_q)))) {
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
109 if (!access(path, R_OK)) dirtree_read(path, do_show_keys);
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
110 else key_error(key);
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
111 }
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
112 free(path);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
113 }
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
114
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
115 void sysctl_main()
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
116 {
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
117 char **args = 0;
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
118
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
119 // Display all keys
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
120 if (toys.optflags & FLAG_a) dirtree_read("/proc/sys", do_show_keys);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
121
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
122 // read file
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
123 else if (toys.optflags & FLAG_p) {
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
124 FILE *fp = xfopen(*toys.optargs ? *toys.optargs : "/etc/sysctl.conf", "r");
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
125 size_t len;
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
126
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
127 for (;;) {
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
128 char *line = 0, *key, *val;
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
129
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
130 if (-1 == (len = getline(&line, &len, fp))) break;
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
131 key = line;
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
132 while (isspace(*key)) key++;
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
133 if (*key == '#' || *key == ';' || !*key) continue;
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
134 while (len && isspace(line[len-1])) line[--len] = 0;
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
135 if (!(val = split_key(line))) {
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
136 error_msg("'%s' not key=value", line);
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
137 continue;
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
138 }
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
139
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
140 // Trim whitespace around =
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
141 len = (val-line)-1;
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
142 while (len && isspace(line[len-1])) line[--len] = 0;
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
143 while (isspace(*val)) val++;;
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
144
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
145 process_key(key, val);
1284
5c1bd5b94541 More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Rob Landley <rob@landley.net>
parents: 1283
diff changeset
146 free(line);
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
147 }
1283
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
148 fclose(fp);
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
149
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
150 // Loop through arguments, displaying or assigning as appropriate
55de00e9daf4 Cleanup pass on sysctl.
Rob Landley <rob@landley.net>
parents: 1282
diff changeset
151 } else for (args = toys.optargs; *args; args++) process_key(*args, 0);
1281
6b78ac1d7d58 Add sysctl by Bilal Qureshi.
Rob Landley <rob@landley.net>
parents:
diff changeset
152 }