diff options
author | PaulK <contact@paulk.fr> | 2011-11-25 23:15:05 +0100 |
---|---|---|
committer | PaulK <contact@paulk.fr> | 2011-11-25 23:15:05 +0100 |
commit | 90d14a213384eb6d45d347631f4c492a88be051a (patch) | |
tree | 0755cbb38a763d5649eb4c3016be9db84e27aa03 /util.c | |
parent | 233f0f23c75971de36d77605572c9df6b344ca73 (diff) | |
download | hardware_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.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -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; |