- case CONFIG_ITEM_BOOL:
- case CONFIG_ITEM_INTEGER:
- {
- long l = strtoi (psz_option_value);
- if (errno)
- msg_Warn (p_this, "Integer value (%s) for %s: %m",
- psz_option_value, psz_option_name);
- else
- p_item->saved.i = p_item->value.i = (int)l;
- break;
- }
-
- case CONFIG_ITEM_FLOAT:
- if( !*psz_option_value )
- break; /* ignore empty option */
- p_item->value.f = (float)atof (psz_option_value);
- p_item->saved.f = p_item->value.f;
- break;
-
- case CONFIG_ITEM_KEY:
- if( !*psz_option_value )
- break; /* ignore empty option */
- p_item->value.i = ConfigStringToKey(psz_option_value);
- p_item->saved.i = p_item->value.i;
- break;
-
- default:
- vlc_mutex_lock( p_item->p_lock );
-
- /* free old string */
- free( (char*) p_item->value.psz );
- free( (char*) p_item->saved.psz );
-
- p_item->value.psz = convert (psz_option_value);
- p_item->saved.psz = strdupnull (p_item->value.psz);
-
- vlc_mutex_unlock( p_item->p_lock );
- break;
+ int64_t l;
+
+ errno = 0;
+ l = strtoi (psz_option_value);
+ if ((l > item->max.i) || (l < item->min.i))
+ errno = ERANGE;
+ if (errno)
+ msg_Warn (p_this, "Integer value (%s) for %s: %m",
+ psz_option_value, psz_option_name);
+ else
+ item->value.i = l;
+ break;