mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
staging: speakup: use native error codes
The mapping as follows: E_RANGE -> ERANGE E_UNDEF -> ENODATA E_TOOLONG -> E2BIG SET_DEFAULT -> ERESTART As a side effect it fixes a bug in spk_var_store() where return code was mistakenly compared to negative value instead of positive. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
1627ab92b2
commit
6a48f88b52
3 changed files with 16 additions and 21 deletions
|
@ -619,7 +619,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr,
|
|||
len = E_SET;
|
||||
value = simple_strtol(cp, NULL, 10);
|
||||
ret = spk_set_num_var(value, param, len);
|
||||
if (ret == E_RANGE) {
|
||||
if (ret == -ERANGE) {
|
||||
var_data = param->data;
|
||||
pr_warn("value for %s out of range, expect %d to %d\n",
|
||||
attr->attr.name,
|
||||
|
@ -637,7 +637,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr,
|
|||
cp = (char *) buf;
|
||||
cp[len] = '\0';
|
||||
ret = spk_set_string_var(buf, param, len);
|
||||
if (ret == E_TOOLONG)
|
||||
if (ret == -E2BIG)
|
||||
pr_warn("value too long for %s\n",
|
||||
attr->attr.name);
|
||||
break;
|
||||
|
@ -670,7 +670,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr,
|
|||
}
|
||||
spk_unlock(flags);
|
||||
|
||||
if (ret == SET_DEFAULT)
|
||||
if (ret == -ERESTART)
|
||||
pr_info("%s reset to default value\n", attr->attr.name);
|
||||
return count;
|
||||
}
|
||||
|
|
|
@ -44,11 +44,6 @@
|
|||
#define IS_CHAR(x, type) (spk_chartab[((u_char)x)]&type)
|
||||
#define IS_TYPE(x, type) ((spk_chartab[((u_char)x)]&type) == type)
|
||||
|
||||
#define SET_DEFAULT -4
|
||||
#define E_RANGE -3
|
||||
#define E_TOOLONG -2
|
||||
#define E_UNDEF -1
|
||||
|
||||
extern int speakup_thread(void *data);
|
||||
extern void spk_reset_default_chars(void);
|
||||
extern void spk_reset_default_chartab(void);
|
||||
|
|
|
@ -184,19 +184,19 @@ int spk_set_num_var(int input, struct st_var_header *var, int how)
|
|||
char buf[32];
|
||||
char *cp;
|
||||
struct var_t *var_data = var->data;
|
||||
|
||||
if (var_data == NULL)
|
||||
return E_UNDEF;
|
||||
return -ENODATA;
|
||||
|
||||
if (how == E_NEW_DEFAULT) {
|
||||
if (input < var_data->u.n.low || input > var_data->u.n.high)
|
||||
ret = E_RANGE;
|
||||
else
|
||||
var_data->u.n.default_val = input;
|
||||
return ret;
|
||||
return -ERANGE;
|
||||
var_data->u.n.default_val = input;
|
||||
return 0;
|
||||
}
|
||||
if (how == E_DEFAULT) {
|
||||
val = var_data->u.n.default_val;
|
||||
ret = SET_DEFAULT;
|
||||
ret = -ERESTART;
|
||||
} else {
|
||||
if (how == E_SET)
|
||||
val = input;
|
||||
|
@ -207,7 +207,7 @@ int spk_set_num_var(int input, struct st_var_header *var, int how)
|
|||
else if (how == E_DEC)
|
||||
val -= input;
|
||||
if (val < var_data->u.n.low || val > var_data->u.n.high)
|
||||
return E_RANGE;
|
||||
return -ERANGE;
|
||||
}
|
||||
var_data->u.n.value = val;
|
||||
if (var->var_type == VAR_TIME && p_val != NULL) {
|
||||
|
@ -246,25 +246,25 @@ int spk_set_num_var(int input, struct st_var_header *var, int how)
|
|||
|
||||
int spk_set_string_var(const char *page, struct st_var_header *var, int len)
|
||||
{
|
||||
int ret = 0;
|
||||
struct var_t *var_data = var->data;
|
||||
|
||||
if (var_data == NULL)
|
||||
return E_UNDEF;
|
||||
return -ENODATA;
|
||||
if (len > MAXVARLEN)
|
||||
return -E_TOOLONG;
|
||||
return -E2BIG;
|
||||
if (!len) {
|
||||
if (!var_data->u.s.default_val)
|
||||
return 0;
|
||||
ret = SET_DEFAULT;
|
||||
if (!var->p_val)
|
||||
var->p_val = var_data->u.s.default_val;
|
||||
if (var->p_val != var_data->u.s.default_val)
|
||||
strcpy((char *)var->p_val, var_data->u.s.default_val);
|
||||
return -ERESTART;
|
||||
} else if (var->p_val)
|
||||
strcpy((char *)var->p_val, page);
|
||||
else
|
||||
return -E_TOOLONG;
|
||||
return ret;
|
||||
return -E2BIG;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* spk_set_mask_bits sets or clears the punc/delim/repeat bits,
|
||||
|
|
Loading…
Reference in a new issue