diff options
author | Denis Kenzior <denkenz@gmail.com> | 2009-07-13 18:19:06 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-07-14 15:45:05 -0500 |
commit | 0fd50806304018485f64f27caf051444904a7ae0 (patch) | |
tree | 0a0fd590a3644de94fd8fa379e5240679c24a7dd /src | |
parent | f5e9b2147ad1e89d48564bb140d0ad3483c023a5 (diff) | |
download | ofono-0fd50806304018485f64f27caf051444904a7ae0.tar.bz2 |
Fix parsing of mcc_mnc code
The digits above 0-9 were not handled correctly
Diffstat (limited to 'src')
-rw-r--r-- | src/simutil.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/simutil.c b/src/simutil.c index 57d040b4..465b8f34 100644 --- a/src/simutil.c +++ b/src/simutil.c @@ -165,26 +165,26 @@ void sim_pnn_operator_free(struct sim_pnn_operator *oper) static void parse_mcc_mnc(const guint8 *bcd, char *mcc, char *mnc) { + static const char digit_lut[] = "0123456789*#abd\0"; guint8 digit; digit = (bcd[0] >> 0) & 0xf; - if (digit != 0xf) - *mcc ++ = '0' + digit; + *mcc++ = digit_lut[digit]; + digit = (bcd[0] >> 4) & 0xf; - if (digit != 0xf) - *mcc ++ = '0' + digit; + *mcc++ = digit_lut[digit]; + digit = (bcd[1] >> 0) & 0xf; - if (digit != 0xf) - *mcc ++ = '0' + digit; + *mcc++ = digit_lut[digit]; + digit = (bcd[2] >> 0) & 0xf; - if (digit != 0xf) - *mnc ++ = '0' + digit; + *mnc++ = digit_lut[digit]; + digit = (bcd[2] >> 4) & 0xf; - if (digit != 0xf) - *mnc ++ = '0' + digit; + *mnc++ = digit_lut[digit]; + digit = (bcd[1] >> 4) & 0xf; - if (digit != 0xf) - *mnc ++ = '0' + digit; + *mnc++ = digit_lut[digit]; } static gint spdi_operator_compare(gconstpointer a, gconstpointer b) |