From 0fd50806304018485f64f27caf051444904a7ae0 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Mon, 13 Jul 2009 18:19:06 -0500 Subject: [PATCH] Fix parsing of mcc_mnc code The digits above 0-9 were not handled correctly --- src/simutil.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/simutil.c b/src/simutil.c index 57d040b..465b8f3 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) -- 2.7.4