commit 3e49e946b76e235dfa08e461041f6ae36151062b
parent e3c62682ff4c47e303d398074bec989eaa54aae3
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Wed, 9 Apr 2014 14:03:02 +0200
tr: fix escape code handling in set2
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
Diffstat:
M | tr.c | | | 38 | ++++++++++++++++++-------------------- |
1 file changed, 18 insertions(+), 20 deletions(-)
diff --git a/tr.c b/tr.c
@@ -49,32 +49,30 @@ handleescapes(char *s)
static void
parsemapping(const char *set1, const char *set2, wchar_t *mappings)
{
- char *s;
+ char *s1, *s2;
wchar_t runeleft;
wchar_t runeright;
int leftbytes;
int rightbytes;
- size_t n = 0;
- size_t lset2;
- if(set2) {
- lset2 = strnlen(set2, 255 * sizeof(wchar_t));
- } else {
- set2 = &set1[0];
- lset2 = 0;
- }
-
- s = (char *)set1;
- while(*s) {
- if(*s == '\\')
- handleescapes(++s);
- leftbytes = mbtowc(&runeleft, s, 4);
- if(set2[n] != '\0')
- rightbytes = mbtowc(&runeright, set2 + n, 4);
+ s1 = (char *)set1;
+ if(set2)
+ s2 = (char *)set2;
+ else
+ s2 = (char *)set1;
+
+ while(*s1) {
+ if(*s1 == '\\')
+ handleescapes(++s1);
+ leftbytes = mbtowc(&runeleft, s1, 4);
+ s1 += leftbytes;
+ if(*s2 == '\\')
+ handleescapes(++s2);
+ if(*s2 != '\0') {
+ rightbytes = mbtowc(&runeright, s2, 4);
+ s2 += rightbytes;
+ }
mappings[runeleft] = runeright;
- s += leftbytes;
- if(n < lset2)
- n += rightbytes;
}
}