+static struct admin_setting {
+ const char *name;
+ char *(*get) (admin_handle h);
+ gboolean (*set) (admin_handle h, const char *value);
+} settings[] = {
+ { "log_level", log_level_get, log_level_set },
+};
+
+static void cmd_set(admin_handle h, char **args, void *userdata)
+{
+ int i;
+ char *tmp;
+
+ if (args[1] == NULL) {
+ for (i = 0; settings[i].name != NULL; i++) {
+ tmp = settings[i].get(h);
+ admin_out(h, "%s = %s", settings[i].name, tmp);
+ g_free(tmp);
+ }
+ } else {
+ for (i = 0; settings[i].name; i++) {
+ if (!strcasecmp(settings[i].name, args[1])) {
+ if (args[2] != NULL) {
+ settings[i].set(h, args[2]);
+ } else {
+ tmp = settings[i].get(h);
+ admin_out(h, "%s", tmp);
+ g_free(tmp);
+ }
+ return;
+ }
+ }
+
+ admin_out(h, "Unknown setting `%s'", args[1]);
+ }
+}
+