summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsleske <sleske@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-08-11 20:26:25 +0000
committersleske <sleske@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-08-11 20:26:25 +0000
commitb2b4ea881bff70f3f6f748c6c26f332b3962ea8f (patch)
tree90e65b2707333b8c47d6cab4d7557df2322ec354
parentafa961b8b380160b6c87b5153054cb8d3658458e (diff)
downloadnavit-b2b4ea881bff70f3f6f748c6c26f332b3962ea8f.tar.gz
Fix:core:Fix warnings by not using g_str(n)casecmp; new function navit_utf8_strcasecmp.|Part of #1154.
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5572 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r--navit/file.c2
-rw-r--r--navit/linguistics.c8
-rw-r--r--navit/navigation.c3
-rw-r--r--navit/search.c15
-rw-r--r--navit/speech/cmdline/speech_cmdline.c6
-rw-r--r--navit/util.c13
-rw-r--r--navit/util.h1
-rw-r--r--navit/vehicle/file/vehicle_file.c8
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;