Commit 6a48f88b authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Greg Kroah-Hartman

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: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: default avatarSamuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1627ab92
...@@ -619,7 +619,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr, ...@@ -619,7 +619,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr,
len = E_SET; len = E_SET;
value = simple_strtol(cp, NULL, 10); value = simple_strtol(cp, NULL, 10);
ret = spk_set_num_var(value, param, len); ret = spk_set_num_var(value, param, len);
if (ret == E_RANGE) { if (ret == -ERANGE) {
var_data = param->data; var_data = param->data;
pr_warn("value for %s out of range, expect %d to %d\n", pr_warn("value for %s out of range, expect %d to %d\n",
attr->attr.name, attr->attr.name,
...@@ -637,7 +637,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr, ...@@ -637,7 +637,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr,
cp = (char *) buf; cp = (char *) buf;
cp[len] = '\0'; cp[len] = '\0';
ret = spk_set_string_var(buf, param, len); ret = spk_set_string_var(buf, param, len);
if (ret == E_TOOLONG) if (ret == -E2BIG)
pr_warn("value too long for %s\n", pr_warn("value too long for %s\n",
attr->attr.name); attr->attr.name);
break; break;
...@@ -670,7 +670,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr, ...@@ -670,7 +670,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr,
} }
spk_unlock(flags); spk_unlock(flags);
if (ret == SET_DEFAULT) if (ret == -ERESTART)
pr_info("%s reset to default value\n", attr->attr.name); pr_info("%s reset to default value\n", attr->attr.name);
return count; return count;
} }
......
...@@ -44,11 +44,6 @@ ...@@ -44,11 +44,6 @@
#define IS_CHAR(x, type) (spk_chartab[((u_char)x)]&type) #define IS_CHAR(x, type) (spk_chartab[((u_char)x)]&type)
#define IS_TYPE(x, type) ((spk_chartab[((u_char)x)]&type) == 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 int speakup_thread(void *data);
extern void spk_reset_default_chars(void); extern void spk_reset_default_chars(void);
extern void spk_reset_default_chartab(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) ...@@ -184,19 +184,19 @@ int spk_set_num_var(int input, struct st_var_header *var, int how)
char buf[32]; char buf[32];
char *cp; char *cp;
struct var_t *var_data = var->data; struct var_t *var_data = var->data;
if (var_data == NULL) if (var_data == NULL)
return E_UNDEF; return -ENODATA;
if (how == E_NEW_DEFAULT) { if (how == E_NEW_DEFAULT) {
if (input < var_data->u.n.low || input > var_data->u.n.high) if (input < var_data->u.n.low || input > var_data->u.n.high)
ret = E_RANGE; return -ERANGE;
else
var_data->u.n.default_val = input; var_data->u.n.default_val = input;
return ret; return 0;
} }
if (how == E_DEFAULT) { if (how == E_DEFAULT) {
val = var_data->u.n.default_val; val = var_data->u.n.default_val;
ret = SET_DEFAULT; ret = -ERESTART;
} else { } else {
if (how == E_SET) if (how == E_SET)
val = input; val = input;
...@@ -207,7 +207,7 @@ int spk_set_num_var(int input, struct st_var_header *var, int how) ...@@ -207,7 +207,7 @@ int spk_set_num_var(int input, struct st_var_header *var, int how)
else if (how == E_DEC) else if (how == E_DEC)
val -= input; val -= input;
if (val < var_data->u.n.low || val > var_data->u.n.high) if (val < var_data->u.n.low || val > var_data->u.n.high)
return E_RANGE; return -ERANGE;
} }
var_data->u.n.value = val; var_data->u.n.value = val;
if (var->var_type == VAR_TIME && p_val != NULL) { 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) ...@@ -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 spk_set_string_var(const char *page, struct st_var_header *var, int len)
{ {
int ret = 0;
struct var_t *var_data = var->data; struct var_t *var_data = var->data;
if (var_data == NULL) if (var_data == NULL)
return E_UNDEF; return -ENODATA;
if (len > MAXVARLEN) if (len > MAXVARLEN)
return -E_TOOLONG; return -E2BIG;
if (!len) { if (!len) {
if (!var_data->u.s.default_val) if (!var_data->u.s.default_val)
return 0; return 0;
ret = SET_DEFAULT;
if (!var->p_val) if (!var->p_val)
var->p_val = var_data->u.s.default_val; var->p_val = var_data->u.s.default_val;
if (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); strcpy((char *)var->p_val, var_data->u.s.default_val);
return -ERESTART;
} else if (var->p_val) } else if (var->p_val)
strcpy((char *)var->p_val, page); strcpy((char *)var->p_val, page);
else else
return -E_TOOLONG; return -E2BIG;
return ret; return 0;
} }
/* spk_set_mask_bits sets or clears the punc/delim/repeat bits, /* spk_set_mask_bits sets or clears the punc/delim/repeat bits,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment