diff options
author | Wei Huang <weih@google.com> | 2009-08-31 20:30:48 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-08-31 20:30:48 -0700 |
commit | 50db2efc4d4e41ddf4788a1d8e3eea352364639d (patch) | |
tree | a4ce54cef69e95e8748e6cc7a6af11d9ecd4ef4d /android/PhoneNumberUtils.cpp | |
parent | e9f4268266b65edb3e11641dc551269c6fcf5630 (diff) | |
parent | 0d04c4caa9c0464f555eed458abf2ac7d997ad7d (diff) |
am 0d04c4ca: fix bug 2015059: where the native sqlite comparison method phone_number_compare() treated all alpha addresses as the same phone number.
Merge commit '0d04c4caa9c0464f555eed458abf2ac7d997ad7d' into eclair
* commit '0d04c4caa9c0464f555eed458abf2ac7d997ad7d':
fix bug 2015059: where the native sqlite comparison method phone_number_compare() treated all alpha addresses as the same phone number.
Diffstat (limited to 'android/PhoneNumberUtils.cpp')
-rw-r--r-- | android/PhoneNumberUtils.cpp | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/android/PhoneNumberUtils.cpp b/android/PhoneNumberUtils.cpp index 47dd279..d469ed7 100644 --- a/android/PhoneNumberUtils.cpp +++ b/android/PhoneNumberUtils.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#include <ctype.h> #include <string.h> namespace android { @@ -84,12 +85,21 @@ static int tryGetISODigit (char ch) } } -/** True if c is ISO-LATIN characters 0-9, *, # , + */ -static bool isNonSeparator(char ch) +/** + * True if ch is ISO-LATIN characters 0-9, *, # , + + * Note this method current does not account for the WILD char 'N' + */ +static bool isDialable(char ch) { return ('0' <= ch && ch <= '9') || ch == '*' || ch == '#' || ch == '+'; } +/** Returns true if ch is not dialable or alpha char */ +static bool isSeparator(char ch) +{ + return !isDialable(ch) && (isalpha(ch) == 0); +} + /** * Try to store the pointer to "new_ptr" which does not have trunk prefix. * @@ -114,7 +124,7 @@ static bool tryGetTrunkPrefixOmittedStr(const char *str, size_t len, *new_len = len - (i + 1); } return true; - } else if (isNonSeparator(ch)) { + } else if (isDialable(ch)) { return false; } } @@ -146,18 +156,18 @@ static int tryGetCountryCallingCode(const char *str, size_t len, if (ch == '+') state = 1; else if (ch == '0') state = 2; else if (ch == '1') state = 8; - else if (isNonSeparator(ch)) return -1; + else if (isDialable(ch)) return -1; break; case 2: if (ch == '0') state = 3; else if (ch == '1') state = 4; - else if (isNonSeparator(ch)) return -1; + else if (isDialable(ch)) return -1; break; case 4: if (ch == '1') state = 5; - else if (isNonSeparator(ch)) return -1; + else if (isDialable(ch)) return -1; break; case 1: @@ -183,14 +193,14 @@ static int tryGetCountryCallingCode(const char *str, size_t len, } else { state++; } - } else if (isNonSeparator(ch)) { + } else if (isDialable(ch)) { return -1; } } break; case 8: if (ch == '6') state = 9; - else if (isNonSeparator(ch)) return -1; + else if (isDialable(ch)) return -1; break; case 9: if (ch == '6') { @@ -230,7 +240,7 @@ static bool checkPrefixIsIgnorable(const char* ch, int i) { // Ignore just one digit, assuming it is trunk prefix. trunk_prefix_was_read = true; } - } else if (isNonSeparator(ch[i])) { + } else if (isDialable(ch[i])) { // Trunk prefix is a digit, not "*", "#"... return false; } @@ -321,11 +331,11 @@ bool phone_number_compare(const char* a, const char* b) bool skip_compare = false; char ch_a = a[i_a]; char ch_b = b[i_b]; - if (!isNonSeparator(ch_a)) { + if (isSeparator(ch_a)) { i_a--; skip_compare = true; } - if (!isNonSeparator(ch_b)) { + if (isSeparator(ch_b)) { i_b--; skip_compare = true; } @@ -357,7 +367,7 @@ bool phone_number_compare(const char* a, const char* b) bool may_be_namp = true; while (i_a >= 0) { const char ch_a = a[i_a]; - if (isNonSeparator(ch_a)) { + if (isDialable(ch_a)) { if (may_be_namp && tryGetISODigit(ch_a) == 1) { may_be_namp = false; } else { @@ -368,7 +378,7 @@ bool phone_number_compare(const char* a, const char* b) } while (i_b >= 0) { const char ch_b = b[i_b]; - if (isNonSeparator(ch_b)) { + if (isDialable(ch_b)) { if (may_be_namp && tryGetISODigit(ch_b) == 1) { may_be_namp = false; } else { |