r = hashmap_put(sysctl_options, property, new_value);
if (r < 0) {
- if (r == -EEXIST)
+ if (r == -EEXIST) {
+ /* ignore this "error" to avoid returning it
+ * for the function when this is the last key
+ * in the file being parsed. */
+ r = 0;
log_debug("Skipping previously assigned sysctl variable %s", property);
- else
+ } else
log_error("Failed to add sysctl variable %s to hashmap: %s", property, strerror(-r));
free(property);
free(new_value);
- if (r != -EEXIST)
+ if (r != 0)
goto finish;
}
}
}
int main(int argc, char *argv[]) {
- int r = 0;
+ int r = 0, k;
char *property, *value;
Iterator it;
goto finish;
}
+ r = 0;
+
if (argc > optind) {
int i;
for (i = optind; i < argc; i++) {
- int k;
-
k = parse_file(argv[i], false);
- if (k < 0 && r == 0)
+ if (k < 0)
r = k;
}
} else {
char **files, **f;
- int k;
r = conf_files_list(&files, ".conf",
"/etc/sysctl.d",
f = files + strv_length(files) - 1;
STRV_FOREACH_BACKWARDS(f, files) {
k = parse_file(*f, true);
- if (k < 0 && r == 0)
+ if (k < 0)
r = k;
}
strv_free(files);
}
- r = apply_all();
+ k = apply_all();
+ if (k < 0)
+ r = k;
+
finish:
HASHMAP_FOREACH_KEY(value, property, sysctl_options, it) {
hashmap_remove(sysctl_options, property);