diff options
author | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2014-04-01 21:08:46 +0000 |
---|---|---|
committer | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2014-04-01 21:08:46 +0000 |
commit | 0c87f18a47cd614166efefc96305e2a29044347c (patch) | |
tree | 3524c8b555ffcff97216036ab0629199a846b4cf /navit/map.c | |
parent | 547946b09e32ff3708d39119ea822c116ae86816 (diff) | |
download | navit-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.c | 33 |
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); } |