diff options
Diffstat (limited to 'drivers/staging/speakup/kobjects.c')
-rw-r--r-- | drivers/staging/speakup/kobjects.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/staging/speakup/kobjects.c b/drivers/staging/speakup/kobjects.c index 35f647ce1f1e..943b6c134a22 100644 --- a/drivers/staging/speakup/kobjects.c +++ b/drivers/staging/speakup/kobjects.c @@ -15,6 +15,7 @@ #include <linux/kernel.h> #include <linux/kobject.h> #include <linux/string.h> +#include <linux/string_helpers.h> #include <linux/sysfs.h> #include <linux/ctype.h> @@ -417,7 +418,7 @@ static ssize_t synth_direct_store(struct kobject *kobj, bytes = min_t(size_t, len, 250); strncpy(tmp, ptr, bytes); tmp[bytes] = '\0'; - spk_xlate(tmp); + string_unescape_any_inplace(tmp); synth_printf("%s", tmp); ptr += bytes; len -= bytes; @@ -605,7 +606,8 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr, if (param->data == NULL) return 0; ret = 0; - cp = spk_xlate((char *) buf); + cp = (char *)buf; + string_unescape_any_inplace(cp); spk_lock(flags); switch (param->var_type) { @@ -617,9 +619,9 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr, len = E_INC; else len = E_SET; - speakup_s2i(cp, &value); + 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 +639,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 +672,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; } |