From 88fcd743b4e4a2de88e11b482ee93c6a724daefe Mon Sep 17 00:00:00 2001 From: Randy Heit Date: Sun, 6 May 2012 03:16:11 +0000 Subject: [PATCH] - Fixed: strbin ate the character following a \x sequence and placed one-digit sequences into the high nibble of the output character. SVN r3625 (trunk) --- src/cmdlib.cpp | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/cmdlib.cpp b/src/cmdlib.cpp index ecb2608ff..e3766fd02 100644 --- a/src/cmdlib.cpp +++ b/src/cmdlib.cpp @@ -600,18 +600,20 @@ int strbin (char *str) case 'x': case 'X': c = 0; - p++; - for (i = 0; i < 2; i++) { - c <<= 4; - if (*p >= '0' && *p <= '9') - c += *p-'0'; - else if (*p >= 'a' && *p <= 'f') - c += 10 + *p-'a'; - else if (*p >= 'A' && *p <= 'F') - c += 10 + *p-'A'; - else - break; + for (i = 0; i < 2; i++) + { p++; + if (*p >= '0' && *p <= '9') + c = (c << 4) + *p-'0'; + else if (*p >= 'a' && *p <= 'f') + c = (c << 4) + 10 + *p-'a'; + else if (*p >= 'A' && *p <= 'F') + c = (c << 4) + 10 + *p-'A'; + else + { + p--; + break; + } } *str++ = c; break; @@ -698,18 +700,20 @@ FString strbin1 (const char *start) case 'x': case 'X': c = 0; - p++; - for (i = 0; i < 2; i++) { - c <<= 4; - if (*p >= '0' && *p <= '9') - c += *p-'0'; - else if (*p >= 'a' && *p <= 'f') - c += 10 + *p-'a'; - else if (*p >= 'A' && *p <= 'F') - c += 10 + *p-'A'; - else - break; + for (i = 0; i < 2; i++) + { p++; + if (*p >= '0' && *p <= '9') + c = (c << 4) + *p-'0'; + else if (*p >= 'a' && *p <= 'f') + c = (c << 4) + 10 + *p-'a'; + else if (*p >= 'A' && *p <= 'F') + c = (c << 4) + 10 + *p-'A'; + else + { + p--; + break; + } } result << c; break;