- TRY {
- switch (variable->type) {
- case xbt_cfgelm_string:
- xbt_cfg_set_string(cfg, name, val); /* throws */
- break;
-
- case xbt_cfgelm_int:
- i = strtol(val, &val, 0);
- if (val == NULL) {
- free(optionlist_cpy);
- xbt_die("Value of option %s not valid. Should be an integer", name);
- }
-
- xbt_cfg_set_int(cfg, name, i); /* throws */
- break;
-
- case xbt_cfgelm_double:
- d = strtod(val, &val);
- if (val == NULL) {
- free(optionlist_cpy);
- xbt_die("Value of option %s not valid. Should be a double", name);
- }
-
- xbt_cfg_set_double(cfg, name, d); /* throws */
- break;
-
- case xbt_cfgelm_peer:
- str = val;
- val = strchr(val, ':');
- if (!val) {
- free(optionlist_cpy);
- xbt_die("Value of option %s not valid. Should be an peer (machine:port)",
- name);
- }
-
- *(val++) = '\0';
- i = strtol(val, &val, 0);
- if (val == NULL) {
- free(optionlist_cpy);
- xbt_die("Value of option %s not valid. Should be an peer (machine:port)",
- name);
- }
-
- xbt_cfg_set_peer(cfg, name, str, i); /* throws */
- break;
-
- default:
- THROWF(unknown_error, 0, "Type of config element %s is not valid.",
- name);
- }
+/** @brief Set the value of a variable, using the string representation of that value
+ *
+ * @arg cfg config set to modify
+ * @arg key name of the variable to modify
+ * @arg value string representation of the value to set
+ *
+ * @return the first char after the parsed value in val
+ */
+
+void *xbt_cfg_set_as_string(xbt_cfg_t cfg, const char *key, const char *value) {
+ xbt_ex_t e;
+
+ char *ret;
+ volatile xbt_cfgelm_t variable = NULL;
+ int i;
+ double d;
+ char *str, *val;
+
+
+ TRY {
+ variable = xbt_dict_get((xbt_dict_t) cfg, key);
+ }
+ CATCH(e) {
+ if (e.category == not_found_error) {
+ xbt_ex_free(e);
+ THROWF(not_found_error, 0,
+ "No registered variable corresponding to '%s'.", key);