summaryrefslogtreecommitdiff
path: root/navit/map.c
diff options
context:
space:
mode:
authormdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220>2014-04-01 21:08:46 +0000
committermdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220>2014-04-01 21:08:46 +0000
commit0c87f18a47cd614166efefc96305e2a29044347c (patch)
tree3524c8b555ffcff97216036ab0629199a846b4cf /navit/map.c
parent547946b09e32ff3708d39119ea822c116ae86816 (diff)
downloadnavit-0c87f18a47cd614166efefc96305e2a29044347c.tar.gz
Add:core:New function to perform a temporary charset conversion of map originated string.
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5762 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/map.c')
-rw-r--r--navit/map.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/navit/map.c b/navit/map.c
index e64de77d9..fbc7fba87 100644
--- a/navit/map.c
+++ b/navit/map.c
@@ -207,6 +207,32 @@ map_requires_conversion(struct map *this_)
return (this_->meth.charset != NULL && strcmp(this_->meth.charset, "utf-8"));
}
+char *map_converted_string_tmp=NULL;
+
+/**
+ * @brief Converts a string from a map into a temporary allocated buffer. Conversion is not performed and original string is returned
+ * if map doesn't require conversion. So lifetime of returned value is very limited.
+ *
+ * @param this_ The map the string to be converted is from
+ * @param str The string to be converted
+ * @return The converted string. Don't care about it after use.
+ */
+char *
+map_convert_string_tmp(struct map *this_, char *str)
+{
+ if(map_converted_string_tmp!=NULL)
+ g_free(map_converted_string_tmp);
+ map_converted_string_tmp=NULL;
+ if(!this_ || !this_->meth.charset || !strcmp(this_->meth.charset, "utf-8"))
+ return str;
+ map_converted_string_tmp=g_convert(str, -1, "utf-8", this_->meth.charset, NULL, NULL, NULL);
+ if(!map_converted_string_tmp) {
+ dbg(0,"Error converting '%s' from %s to utf-8\n", str, this_->meth.charset);
+ return str;
+ }
+ return map_converted_string_tmp;
+}
+
/**
* @brief Converts a string from a map
*
@@ -217,12 +243,17 @@ map_requires_conversion(struct map *this_)
char *
map_convert_string(struct map *this_, char *str)
{
- return g_convert(str, -1,"utf-8",this_->meth.charset,NULL,NULL,NULL);
+ return map_convert_dup(map_convert_string_tmp(this_,str));
}
+
char *
map_convert_dup(char *str)
{
+ if(map_converted_string_tmp==str) {
+ map_converted_string_tmp=NULL;
+ return str;
+ }
return g_strdup(str);
}