diff options
author | Tom de Vries <tdevries@suse.de> | 2024-11-22 17:34:50 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2024-11-22 17:34:50 +0100 |
commit | 8a7f13063a6d5314cfde5b4f1dc49afa2922cf8c (patch) | |
tree | 2c1d23a7ef8efb6bc3b227ae28e66c44c047003e /gdb/python | |
parent | 461248c1433714584060fd3a41efe28088aa855b (diff) | |
download | gdb-8a7f13063a6d5314cfde5b4f1dc49afa2922cf8c.zip gdb-8a7f13063a6d5314cfde5b4f1dc49afa2922cf8c.tar.gz gdb-8a7f13063a6d5314cfde5b4f1dc49afa2922cf8c.tar.bz2 |
[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>
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/python.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/gdb/python/python.c b/gdb/python/python.c index 397431a..7489b53 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -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. */ |