mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 21:03:12 +00:00
Make our wgettext() implementation a little less terrifying
Use wchar_t* directly instead of wcstring.c_str()
This commit is contained in:
parent
9b4e365517
commit
ac72db8ef0
1 changed files with 7 additions and 6 deletions
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue