/* SYNTAX: TOGGLE <key> [on|off|toggle] */ static void cmd_toggle(const char *data) { char *key, *value; void *free_arg; int type; if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST | PARAM_FLAG_STRIP_TRAILING_WS, &key, &value)) return; if (*key == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); type = settings_get_type(key); if (type == SETTING_TYPE_ANY) printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_SET_UNKNOWN, key); else if (type != SETTING_TYPE_BOOLEAN) printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_SET_NOT_BOOLEAN, key); else { set_boolean(key, *value != '\0' ? value : "TOGGLE"); set_print(settings_get_record(key)); signal_emit("setup changed", 0); } cmd_params_free(free_arg); }
static char *get_long_variable_value(const char *key, SERVER_REC *server, void *item, int *free_ret) { EXPANDO_FUNC func; char *ret; int type; *free_ret = FALSE; /* expando? */ func = (EXPANDO_FUNC) g_hash_table_lookup(expandos, key); if (func != NULL) return func(server, item, free_ret); /* internal setting? */ type = settings_get_type(key); if (type != -1) return get_internal_setting(key, type, free_ret); /* environment variable? */ ret = g_getenv(key); if (ret != NULL) return ret; return NULL; }
static JSBool jss_set_value(JSContext *cx, JSObject *obj, jsval idval, jsval *vp) { jsval v = *vp; js_setting_t *jss = JS_GetPrivate(cx, obj); if(jss->jss_freezed) return JS_TRUE; assert(jss->jss_s != NULL); JSBool b; int32 i32; JSString *str; // We need to be a bit more strict about value types here so // it's not possible to just use js_prop_set_from_jsval() switch(settings_get_type(jss->jss_s)) { case SETTING_INT: if(!JS_ValueToInt32(cx, v, &i32)) return JS_FALSE; setting_set(jss->jss_s, SETTING_INT, i32); break; case SETTING_BOOL: if(!JS_ValueToBoolean(cx, v, &b)) return JS_FALSE; setting_set(jss->jss_s, SETTING_BOOL, b); break; case SETTING_STRING: str = JS_ValueToString(cx, v); if(str == NULL) return JS_FALSE; setting_set(jss->jss_s, SETTING_STRING, JS_GetStringBytes(str)); break; case SETTING_MULTIOPT: str = JS_ValueToString(cx, v); if(str == NULL) return JS_FALSE; setting_set(jss->jss_s, SETTING_STRING, JS_GetStringBytes(str)); break; } return JS_TRUE; }
/* SYNTAX: TOGGLE <key> [on|off|toggle] */ static void cmd_toggle(const char *data) { char *key, *value; void *free_arg; int type; if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &key, &value)) return; if (*key == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); type = settings_get_type(key); if (type == -1) printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Unknown setting %_%s", key); else if (type != SETTING_TYPE_BOOLEAN) printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Setting %_%s%_ isn't boolean, use /SET", key); else { set_boolean(key, *value != '\0' ? value : "TOGGLE"); set_print(settings_get_record(key)); } cmd_params_free(free_arg); }