Thread: const qualifier for list APIs

const qualifier for list APIs

From
Ashutosh Bapat
Date:
Hi All,
Functions like lappend_*() in list.c do not modify the second
argument. So it can be qualified as const. Any reason why we don't do
that? Is it because the target pointer ptr_value is not const
qualified?

In my code, I am using lappend() and passing it the output of
pq_getmsgstring() which returns const char *. The list is used to just
collect these pointers to be scanned later a few times within the same
function. So there is no possibility of freeing or changing area
within the StringInfo. So the coding practice though questionable, is
safe and avoids unnecessary pallocs. But SonarQube does complain about
it.

-- 
Best Wishes,
Ashutosh Bapat



Re: const qualifier for list APIs

From
Tom Lane
Date:
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> writes:
> Functions like lappend_*() in list.c do not modify the second
> argument. So it can be qualified as const. Any reason why we don't do
> that? Is it because the target pointer ptr_value is not const
> qualified?

It would be a lie in many (most?) cases, wherever somebody later pulls the
pointer out of the list without applying "const" to it.  So I can't see
that adding "const" there would be an improvement.

> So the coding practice though questionable, is
> safe and avoids unnecessary pallocs. But SonarQube does complain about
> it.

Maybe an explicit cast to (void *) would shut it up.

            regards, tom lane