diff options
Diffstat (limited to 'navit')
-rw-r--r-- | navit/file.c | 2 | ||||
-rw-r--r-- | navit/linguistics.c | 8 | ||||
-rw-r--r-- | navit/navigation.c | 3 | ||||
-rw-r--r-- | navit/search.c | 15 | ||||
-rw-r--r-- | navit/speech/cmdline/speech_cmdline.c | 6 | ||||
-rw-r--r-- | navit/util.c | 13 | ||||
-rw-r--r-- | navit/util.h | 1 | ||||
-rw-r--r-- | navit/vehicle/file/vehicle_file.c | 8 |
8 files changed, 34 insertions, 22 deletions
diff --git a/navit/file.c b/navit/file.c index 75d547a0d..8f68ec14d 100644 --- a/navit/file.c +++ b/navit/file.c @@ -795,7 +795,7 @@ file_create_caseinsensitive(char *name, struct attr **options) if (d) { *p++='/'; while ((filename=file_readdir(d))) { - if (!g_strcasecmp(filename, p)) { + if (!g_ascii_strcasecmp(filename, p)) { strcpy(p, filename); ret=file_create(dirname, options); if (ret) diff --git a/navit/linguistics.c b/navit/linguistics.c index 2483a4890..d249cdab9 100644 --- a/navit/linguistics.c +++ b/navit/linguistics.c @@ -458,13 +458,13 @@ linguistics_next_word(char *str) int linguistics_search(const char *str) { - if (!g_strcasecmp(str,"str")) + if (!g_ascii_strcasecmp(str,"str")) return 0; - if (!g_strcasecmp(str,"str.")) + if (!g_ascii_strcasecmp(str,"str.")) return 0; - if (!g_strcasecmp(str,"strasse")) + if (!g_ascii_strcasecmp(str,"strasse")) return 0; - if (!g_strcasecmp(str,"weg")) + if (!g_ascii_strcasecmp(str,"weg")) return 0; return 1; } diff --git a/navit/navigation.c b/navit/navigation.c index 769708766..c697a42d7 100644 --- a/navit/navigation.c +++ b/navit/navigation.c @@ -40,6 +40,7 @@ #include "vehicleprofile.h" #include "plugin.h" #include "navit_nls.h" +#include "util.h" /* #define DEBUG */ @@ -1407,7 +1408,7 @@ contains_suffix(char *name, char *suffix) return 0; if (strlen(name) < strlen(suffix)) return 0; - return !g_strcasecmp(name+strlen(name)-strlen(suffix), suffix); + return !navit_utf8_strcasecmp(name+strlen(name)-strlen(suffix), suffix); } static char * diff --git a/navit/search.c b/navit/search.c index 218ba003b..f34d7005f 100644 --- a/navit/search.c +++ b/navit/search.c @@ -33,6 +33,7 @@ #include "country.h" #include "linguistics.h" #include "geom.h" +#include "util.h" #if HAVE_API_ANDROID #include "android.h" @@ -732,9 +733,9 @@ static int search_match(char *str, char *search, int partial) { if (!partial) - return (!g_strcasecmp(str, search)); + return (!g_ascii_strcasecmp(str, search)); else - return (!g_strncasecmp(str, search, strlen(search))); + return (!g_ascii_strncasecmp(str, search, strlen(search))); } static struct pcoord * @@ -1168,15 +1169,7 @@ search_list_get_result(struct search_list *this_) if(le->parent && has_street_name) { struct search_list_street *street=this_->levels[level-1].last->data; - char *s1,*s2; - int cmpres; - s1=g_utf8_casefold(street->name,-1); - s2=g_utf8_casefold(attr2.u.str,-1); - cmpres=strcmp(s1,s2); - dbg(1,"Compared %s with %s, got %d\n",s1,s2,cmpres); - g_free(s1); - g_free(s2); - if(cmpres) { + if(navit_utf8_strcasecmp(street->name, attr2.u.str)) { search_list_house_number_destroy(p); //this_->item=NULL; continue; diff --git a/navit/speech/cmdline/speech_cmdline.c b/navit/speech/cmdline/speech_cmdline.c index fa640b067..745cc8149 100644 --- a/navit/speech/cmdline/speech_cmdline.c +++ b/navit/speech/cmdline/speech_cmdline.c @@ -68,7 +68,11 @@ speech_cmdline_search(GList *l, int suffix_len, const char *s, int decode) if (decode) snd=urldecode(snd); snd_len=strlen(snd)-suffix_len; - if (!g_strncasecmp(s, snd, snd_len)) { + // TODO: Here we compare UTF-8 text with a filename. + // It's unclear how a case-insensitive comparison should + // work in general, so for now we only do it for ASCII + // text. + if (!g_ascii_strncasecmp(s, snd, snd_len)) { const char *ss=s+snd_len; while (*ss == ' ' || *ss == ',') ss++; diff --git a/navit/util.c b/navit/util.c index 1599fce45..bdf0aa61b 100644 --- a/navit/util.c +++ b/navit/util.c @@ -53,6 +53,19 @@ strtolower(char *dest, const char *src) *dest='\0'; } +int +navit_utf8_strcasecmp(const char *s1, const char *s2) +{ + char *s1_folded,*s2_folded; + int cmpres; + s1_folded=g_utf8_casefold(s1,-1); + s2_folded=g_utf8_casefold(s2,-1); + cmpres=strcmp(s1_folded,s2_folded); + dbg(3,"Compared %s with %s, got %d\n",s1_folded,s2_folded,cmpres); + g_free(s1_folded); + g_free(s2_folded); + return cmpres; +} static void hash_callback(gpointer key, gpointer value, gpointer user_data) diff --git a/navit/util.h b/navit/util.h index 1f8919b1d..9860d5b96 100644 --- a/navit/util.h +++ b/navit/util.h @@ -25,6 +25,7 @@ void strtoupper(char *dest, const char *src); void strtolower(char *dest, const char *src); +int navit_utf8_strcasecmp(const char *s1, const char *s2); GList * g_hash_to_list(GHashTable *h); GList * g_hash_to_list_keys(GHashTable *h); gchar * g_strconcat_printf(gchar *buffer, gchar *fmt, ...); diff --git a/navit/vehicle/file/vehicle_file.c b/navit/vehicle/file/vehicle_file.c index d6db3339c..ecc8300e1 100644 --- a/navit/vehicle/file/vehicle_file.c +++ b/navit/vehicle/file/vehicle_file.c @@ -464,7 +464,7 @@ vehicle_file_parse(struct vehicle_priv *priv, char *buffer) lat -= priv->geo.lat * 100; priv->geo.lat += lat / 60; - if (!g_strcasecmp(item[3],"S")) + if (!g_ascii_strcasecmp(item[3],"S")) priv->geo.lat=-priv->geo.lat; lng = g_ascii_strtod(item[4], NULL); @@ -472,7 +472,7 @@ vehicle_file_parse(struct vehicle_priv *priv, char *buffer) lng -= priv->geo.lng * 100; priv->geo.lng += lng / 60; - if (!g_strcasecmp(item[5],"W")) + if (!g_ascii_strcasecmp(item[5],"W")) priv->geo.lng=-priv->geo.lng; priv->valid=attr_position_valid_valid; dbg(2, "latitude '%2.4f' longitude %2.4f\n", priv->geo.lat, priv->geo.lng); @@ -1005,9 +1005,9 @@ vehicle_file_new_file(struct vehicle_methods ret->checksum_ignore=checksum_ignore->u.num; ret->attrs = attrs; on_eof = attr_search(attrs, NULL, attr_on_eof); - if (on_eof && !g_strcasecmp(on_eof->u.str, "stop")) + if (on_eof && !g_ascii_strcasecmp(on_eof->u.str, "stop")) ret->on_eof=1; - if (on_eof && !g_strcasecmp(on_eof->u.str, "exit")) + if (on_eof && !g_ascii_strcasecmp(on_eof->u.str, "exit")) ret->on_eof=2; dbg(0,"on_eof=%d\n", ret->on_eof); *meth = vehicle_file_methods; |