staging: speakup: remove custom string_unescape_any_inplace

There is generic implementation of the function to unescape strings.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Samuel Thibault <samuel.thibault@ens-lyon.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: William Hubbs <w.d.hubbs@gmail.com>
Cc: Chris Brannon <chris@the-brannons.com>
Cc: Kirk Reiser <kirk@braille.uwo.ca>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Andy Shevchenko 2013-04-30 15:27:31 -07:00 committed by Linus Torvalds
parent 16c7fa0582
commit 576d742e4a
3 changed files with 4 additions and 49 deletions

View File

@ -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) {

View File

@ -54,7 +54,6 @@ void spk_get_index_count(int *linecount, int *sentcount);
extern int spk_set_key_info(const u_char *key_info, u_char *k_buffer);
extern char *spk_strlwr(char *s);
extern char *spk_s2uchar(char *start, char *dest);
extern char *spk_xlate(char *s);
extern int speakup_kobj_init(void);
extern void speakup_kobj_exit(void);
extern int spk_chartab_get_value(char *keyword);

View File

@ -328,49 +328,3 @@ char *spk_s2uchar(char *start, char *dest)
*dest = (u_char)val;
return start;
}
char *spk_xlate(char *s)
{
static const char finds[] = "nrtvafe";
static const char subs[] = "\n\r\t\013\001\014\033";
static const char hx[] = "0123456789abcdefABCDEF";
char *p = s, *p1, *p2, c;
int num;
while ((p = strchr(p, '\\'))) {
p1 = p+1;
p2 = strchr(finds, *p1);
if (p2) {
*p++ = subs[p2-finds];
p1++;
} else if (*p1 >= '0' && *p1 <= '7') {
num = (*p1++)&7;
while (num < 32 && *p1 >= '0' && *p1 <= '7') {
num <<= 3;
num += (*p1++)&7;
}
*p++ = num;
} else if (*p1 == 'x' &&
strchr(hx, p1[1]) && strchr(hx, p1[2])) {
p1++;
c = *p1++;
if (c > '9')
c = (c - '7') & 0x0f;
else
c -= '0';
num = c << 4;
c = *p1++;
if (c > '9')
c = (c-'7')&0x0f;
else
c -= '0';
num += c;
*p++ = num;
} else
*p++ = *p1++;
p2 = p;
while (*p1)
*p2++ = *p1++;
*p2 = '\0';
}
return s;
}