Signed-off-by: Andy Shevchenko <[email protected]>
---
drivers/staging/speakup/varhandlers.c | 29 +++++++++--------------------
1 file changed, 9 insertions(+), 20 deletions(-)
diff --git a/drivers/staging/speakup/varhandlers.c
b/drivers/staging/speakup/varhandlers.c
index fb479a5..edb7ff3 100644
--- a/drivers/staging/speakup/varhandlers.c
+++ b/drivers/staging/speakup/varhandlers.c
@@ -333,9 +333,9 @@ 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;
+ char *p = s, *p1, *p2;
int num;
+
while ((p = strchr(p, '\\'))) {
p1 = p+1;
p2 = strchr(finds, *p1);
@@ -349,24 +349,13 @@ char *spk_xlate(char *s)
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++;
+ } else {
+ if (*p1 == 'x' && !hex2bin((u8 *)&num, p1 + 1, 1)) {
+ p1 += 3;
+ *p++ = num;
+ } else
+ *p++ = *p1++;
+ }
p2 = p;
while (*p1)
*p2++ = *p1++;
--
1.8.2.rc0.22.gb3600c3
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel