Re: Remove traces of long in dynahash.c

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Chao Li <li.evan.chao@gmail.com>, Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-08-20T07:40:21Z
Lists: pgsql-hackers

Attachments

On Tue, Aug 19, 2025 at 10:46:58AM -0400, Tom Lane wrote:
> +1 for getting rid of those while we're doing janitorial work here.
> They're not *quite* duplicates though, for instance next_pow2_int has
> different response to out-of-range values than pg_nextpower2_32.

This would mean introducing more flavors in pg_bitutils.h with limit
checks.  That does not seem completely right to do in this file, which
is a wrapper for all the __builtin_*() calls?  A second point is on
the signedness but we could just cap the maximum at
(PG_UINT{32,64}_MAX / 2), I guess, with two new routines like:
uint64 pg_nextpower2_64_max(uint64 num);
uint32 pg_prevpower2_32_max(uint32 num);

And then cast the unsigned results back to signed in dynahash.c.

Without this point, I have switched the patch to use int64, keeping
the signedness the same as the original.  I have missed that there was
one spot where we relied on NO_MAX_DSIZE.
--
Michael

Commits

  1. Remove dynahash.h

  2. Replace callers of dynahash.h's my_log() by equivalent in pg_bitutils.h

  3. Change dynahash.c and hsearch.h to use int64 instead of long