mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 01:53:38 +08:00
[gdb/python] Ensure locale is restored in do_start_initialization
I noticed in do_start_initialization: ... std::string oldloc = setlocale (LC_ALL, NULL); setlocale (LC_ALL, ""); ... if (count == (size_t) -1) { fprintf (stderr, "Could not convert python path to string\n"); return false; } setlocale (LC_ALL, oldloc.c_str ()); ... that the old locale is not restored if the "return false" is triggered. Fix this by using SCOPE_EXIT. Tested on aarch64-linux. Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
parent
461248c143
commit
8a7f13063a
@ -2331,17 +2331,20 @@ do_start_initialization ()
|
||||
for Python versions that do not duplicate program_name. */
|
||||
static wchar_t *progname_copy;
|
||||
|
||||
std::string oldloc = setlocale (LC_ALL, NULL);
|
||||
setlocale (LC_ALL, "");
|
||||
size_t progsize = strlen (progname.get ());
|
||||
progname_copy = XNEWVEC (wchar_t, progsize + 1);
|
||||
size_t count = mbstowcs (progname_copy, progname.get (), progsize + 1);
|
||||
if (count == (size_t) -1)
|
||||
{
|
||||
fprintf (stderr, "Could not convert python path to string\n");
|
||||
return false;
|
||||
}
|
||||
setlocale (LC_ALL, oldloc.c_str ());
|
||||
{
|
||||
std::string oldloc = setlocale (LC_ALL, NULL);
|
||||
SCOPE_EXIT { setlocale (LC_ALL, oldloc.c_str ()); };
|
||||
|
||||
setlocale (LC_ALL, "");
|
||||
size_t progsize = strlen (progname.get ());
|
||||
progname_copy = XNEWVEC (wchar_t, progsize + 1);
|
||||
size_t count = mbstowcs (progname_copy, progname.get (), progsize + 1);
|
||||
if (count == (size_t) -1)
|
||||
{
|
||||
fprintf (stderr, "Could not convert python path to string\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Py_SetProgramName was deprecated in Python 3.11. Use PyConfig
|
||||
mechanisms for Python 3.10 and newer. */
|
||||
|
Loading…
Reference in New Issue
Block a user