From: Nuno Lopes Date: Fri, 10 Nov 2006 23:27:31 +0000 (+0000) Subject: MFB X-Git-Tag: RELEASE_1_0_0RC1~1055 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a72df3dc05ea472aad881d3672755f7157323def;p=php MFB --- diff --git a/ext/date/lib/parse_tz.c b/ext/date/lib/parse_tz.c index 723017eef0..69551ac666 100644 --- a/ext/date/lib/parse_tz.c +++ b/ext/date/lib/parse_tz.c @@ -192,39 +192,26 @@ void timelib_dump_tzinfo(timelib_tzinfo *tz) } } -static int tz_search(char *timezone, unsigned int left, unsigned int right, const timelib_tzdb *tzdb) -{ - int mid, cmp; - - if (left > right) { - return -1; /* not found */ - } - - mid = (left + right) / 2; - - cmp = strcasecmp(timezone, tzdb->index[mid].id); - if (cmp < 0) { - return tz_search(timezone, left, mid - 1, tzdb); - } else if (cmp > 0) { - return tz_search(timezone, mid + 1, right, tzdb); - } else { /* (cmp == 0) */ - return tzdb->index[mid].pos; - } -} - - static int seek_to_tz_position(const unsigned char **tzf, char *timezone, const timelib_tzdb *tzdb) { - int pos; - - pos = tz_search(timezone, 0, tzdb->index_size - 1, tzdb); + int left = 0, right = tzdb->index_size - 1; + + do { + int mid = ((unsigned)left + right) >> 1; + int cmp = strcasecmp(timezone, tzdb->index[mid].id); + + if (cmp < 0) { + right = mid - 1; + } else if (cmp > 0) { + left = mid + 1; + } else { /* (cmp == 0) */ + (*tzf) = &(tzdb->data[tzdb->index[mid].pos + 20]); + return 1; + } - if (pos == -1) { - return 0; - } + } while (left <= right); - (*tzf) = &(tzdb->data[pos + 20]); - return 1; + return 0; } const timelib_tzdb *timelib_builtin_db(void)