summaryrefslogtreecommitdiffstats
path: root/util.c
diff options
context:
space:
mode:
authorPaulK <contact@paulk.fr>2011-11-25 23:15:05 +0100
committerPaulK <contact@paulk.fr>2011-11-25 23:15:05 +0100
commit90d14a213384eb6d45d347631f4c492a88be051a (patch)
tree0755cbb38a763d5649eb4c3016be9db84e27aa03 /util.c
parent233f0f23c75971de36d77605572c9df6b344ca73 (diff)
downloadhardware_ril_samsung-ril-90d14a213384eb6d45d347631f4c492a88be051a.zip
hardware_ril_samsung-ril-90d14a213384eb6d45d347631f4c492a88be051a.tar.gz
hardware_ril_samsung-ril-90d14a213384eb6d45d347631f4c492a88be051a.tar.bz2
Corrected hex2bin (it made an infinite loop if data wasn't only ASCII: i was not incremented)
Diffstat (limited to 'util.c')
-rw-r--r--util.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/util.c b/util.c
index dc13866..6ddc2b4 100644
--- a/util.c
+++ b/util.c
@@ -16,21 +16,25 @@ void hex2bin(const char *data, int length, unsigned char *buf)
length ^= 0x01;
while(i < length) {
+ b = 0;
+
if(data[i] - '0' < 10)
- b = data[i++] - '0';
+ b = data[i] - '0';
else if(data[i] - 'a' < 7)
- b = data[i++] - 'a' + 10;
+ b = data[i] - 'a' + 10;
else if(data[i] - 'A' < 7)
- b = data[i++] - 'A' + 10;
+ b = data[i] - 'A' + 10;
+ i++;
b = (b << 4);
if(data[i] - '0' < 10)
- b |= data[i++] - '0';
+ b |= data[i] - '0';
else if(data[i] - 'a' < 7)
- b |= data[i++] - 'a' + 10;
+ b |= data[i] - 'a' + 10;
else if(data[i] - 'A' < 7)
- b |= data[i++] - 'A' + 10;
+ b |= data[i] - 'A' + 10;
+ i++;
*p++ = b;
}
@@ -46,6 +50,8 @@ void bin2hex(const unsigned char *data, int length, char *buf)
char *p = buf;
for(i = 0; i < length; i++) {
+ b = 0;
+
b = (data[i] >> 4 & 0x0f);
b += (b < 10) ? '0' : ('a' - 10);
*p++ = b;