+ *(enum auto_boolean *) c->var = val;
+
+ option_changed = 1;
+ }
+ }
+ break;
+ case var_uinteger:
+ case var_zuinteger:
+ {
+ LONGEST val;
+
+ if (arg == NULL)
+ error_no_arg (_("integer to set it to."));
+ val = parse_and_eval_long (arg);
+
+ if (c->var_type == var_uinteger && val == 0)
+ val = UINT_MAX;
+ else if (val > UINT_MAX)
+ error (_("integer %s out of range"), plongest (val));
+
+ if (*(unsigned int *) c->var != val)
+ {
+ *(unsigned int *) c->var = val;
+
+ option_changed = 1;
+ }
+ }
+ break;
+ case var_integer:
+ case var_zinteger:
+ {
+ LONGEST val;
+
+ if (arg == NULL)
+ error_no_arg (_("integer to set it to."));
+ val = parse_and_eval_long (arg);
+
+ if (val == 0 && c->var_type == var_integer)
+ val = INT_MAX;
+ else if (val > INT_MAX || val < INT_MIN)
+ error (_("integer %s out of range"), plongest (val));
+
+ if (*(int *) c->var != val)
+ {
+ *(int *) c->var = val;
+
+ option_changed = 1;
+ }
+ break;
+ }
+ case var_enum:
+ {
+ int i;
+ int len;
+ int nmatches;
+ const char *match = NULL;
+ char *p;
+
+ /* If no argument was supplied, print an informative error
+ message. */
+ if (arg == NULL)
+ {
+ char *msg;
+ int msg_len = 0;
+
+ for (i = 0; c->enums[i]; i++)
+ msg_len += strlen (c->enums[i]) + 2;
+
+ msg = xmalloc (msg_len);
+ *msg = '\0';
+ make_cleanup (xfree, msg);
+
+ for (i = 0; c->enums[i]; i++)