Make our wgettext() implementation a little less terrifying

Use wchar_t* directly instead of wcstring.c_str()
This commit is contained in:
ridiculousfish 2015-07-25 16:01:43 -07:00
parent 9b4e365517
commit ac72db8ef0

View file

@ -56,9 +56,9 @@ const file_id_t kInvalidFileID = {(dev_t)-1LL, (ino_t)-1LL, (uint64_t)-1LL, -1,
/* Lock to protect wgettext */ /* Lock to protect wgettext */
static pthread_mutex_t wgettext_lock; static pthread_mutex_t wgettext_lock;
/* Maps string keys to (immortal) pointers to string values */ /* Maps string keys to (immortal) pointers to string values. */
typedef std::map<wcstring, wcstring *> wgettext_map_t; typedef std::map<wcstring, const wchar_t *> wgettext_map_t;
static std::map<wcstring, wcstring *> wgettext_map; static wgettext_map_t wgettext_map;
void wutil_init() void wutil_init()
{ {
@ -481,15 +481,16 @@ const wchar_t *wgettext(const wchar_t *in)
wcstring key = in; wcstring key = in;
scoped_lock lock(wgettext_lock); scoped_lock lock(wgettext_lock);
wcstring *& val = wgettext_map[key]; // Reference to pointer to string
const wchar_t *& val = wgettext_map[key];
if (val == NULL) if (val == NULL)
{ {
cstring mbs_in = wcs2string(key); cstring mbs_in = wcs2string(key);
char *out = fish_gettext(mbs_in.c_str()); char *out = fish_gettext(mbs_in.c_str());
val = new wcstring(format_string(L"%s", out)); //note that this writes into the map! val = wcsdup(format_string(L"%s", out).c_str()); //note that this writes into the map!
} }
errno = err; errno = err;
return val->c_str(); //looks dangerous but is safe, since the string is stored in the map return val; //looks dangerous but is safe, since the string is stored in the map
} }
int wmkdir(const wcstring &name, int mode) int wmkdir(const wcstring &name, int mode)