mirror of
https://github.com/postgres/postgres.git
synced 2026-06-09 00:32:10 -04:00
Fix another case of indirectly casting away const.
Like8f1791c61, this fixes a case of implicitly casting away const by not treating the result of strrchr() on a const pointer as const. This was missed at the time because the machines reporting those warnings weren't building with --with-llvm. While here, clean up another infelicity: in the probably- impossible case that the input string contains only one dot, this function would call pnstrdup() with a length of -1 and thereby emit a module name equal to the function name. It seems to me we should emit modname = NULL instead. Also remove a useless Assert and two redundant assignments. Back-patch, as8f1791c61was, so that users of back branches don't see this warning when building with late-model gcc. Reported-by: hubert depesz lubaczewski <depesz@depesz.com> Author: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/aiGNJ89PBqvq2Yyz@depesz.com Backpatch-through: 14
This commit is contained in:
parent
4dce650cc1
commit
c35f85ac02
1 changed files with 14 additions and 10 deletions
|
|
@ -1050,9 +1050,6 @@ llvm_create_types(void)
|
|||
void
|
||||
llvm_split_symbol_name(const char *name, char **modname, char **funcname)
|
||||
{
|
||||
*modname = NULL;
|
||||
*funcname = NULL;
|
||||
|
||||
/*
|
||||
* Module function names are pgextern.$module.$funcname
|
||||
*/
|
||||
|
|
@ -1062,14 +1059,21 @@ llvm_split_symbol_name(const char *name, char **modname, char **funcname)
|
|||
* Symbol names cannot contain a ., therefore we can split based on
|
||||
* first and last occurrence of one.
|
||||
*/
|
||||
*funcname = strrchr(name, '.');
|
||||
(*funcname)++; /* jump over . */
|
||||
const char *lastdot;
|
||||
|
||||
*modname = pnstrdup(name + strlen("pgextern."),
|
||||
*funcname - name - strlen("pgextern.") - 1);
|
||||
Assert(funcname);
|
||||
|
||||
*funcname = pstrdup(*funcname);
|
||||
name += strlen("pgextern.");
|
||||
lastdot = strrchr(name, '.');
|
||||
if (lastdot)
|
||||
{
|
||||
*modname = pnstrdup(name, lastdot - name);
|
||||
*funcname = pstrdup(lastdot + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* hmm, no second dot? */
|
||||
*modname = NULL;
|
||||
*funcname = pstrdup(name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue