Re: [HACKERS] taking stdbool.h into use - Mailing list pgsql-hackers

From Thomas Munro
Subject Re: [HACKERS] taking stdbool.h into use
Date
Msg-id CAEepm=23KfXdPtcnO5kwJRwwQ6PckkN-tQzAT6z1sc9YoHToVQ@mail.gmail.com
Whole thread Raw
In response to [HACKERS] taking stdbool.h into use  (Peter Eisentraut <peter.eisentraut@2ndquadrant.com>)
Responses Re: [HACKERS] taking stdbool.h into use
Re: [HACKERS] taking stdbool.h into use
List pgsql-hackers
On Wed, Aug 16, 2017 at 4:36 PM, Peter Eisentraut
<peter.eisentraut@2ndquadrant.com> wrote:
> Some not so long time ago, it was discussed to look into taking
> stdbool.h into use.  The reason was that third-party libraries (perl?,
> ldap?, postgis?) are increasingly doing so, and having incompatible
> definitions of bool could/does create a mess.
>
> Here is a patch set that aims to accomplish that.  On the way there, it
> cleans up various loose and weird uses of bool and proposes a way to
> ensure that the system catalog structs get a 1-byte bool even if the
> "standard" bool is not.
>
> I have done a fair amount of testing on this, including a hand-rigged
> setup where _Bool is not 1 byte.  But obviously, more and wider testing
> would be very useful.

Getting out of the way of C99 "bool" makes sense.  It is old enough to
vote.  On my system the tests pass at top level and tcl, plperl,
plpython after each patch is applied, when configured with:
 --enable-debug --enable-depend --enable-cassert --with-icu --with-python --with-perl --with-tcl --with-icu
--with-ldap

However my system has sizeof(bool) == 1 and so do all the systems I
have access to (x86 + POWER).  Where can we find a computer with
sizeof(bool) == 4?  According to the intertubes OSX on POWER and
Windows 32 bit systems had that in ancient prehistory but they don't
now.

> 0001-Fix-bool-int-type-confusion.patch

Looks good.

> 0002-Change-TRUE-FALSE-to-true-false.patch

Looks good.  What about these?

src/backend/port/win32/crashdump.c:             ExInfo.ClientPointers = FALSE;
src/backend/port/win32/signal.c:        pgwin32_signal_event =
CreateEvent(NULL, TRUE, FALSE, NULL);
src/backend/port/win32/signal.c:
SleepEx(500, FALSE);
src/backend/port/win32/signal.c:        return FALSE;
src/backend/port/win32/socket.c:                waitevent =
CreateEvent(NULL, TRUE, FALSE, NULL);
src/backend/port/win32/socket.c:                        r =
WaitForMultipleObjectsEx(2, events, FALSE, 100, TRUE);
src/backend/port/win32/socket.c:                r =
WaitForMultipleObjectsEx(2, events, FALSE, timeout, TRUE);
src/backend/port/win32/socket.c:        r =
WaitForMultipleObjectsEx(numevents + 1, events, FALSE, timeoutval,
TRUE);
src/backend/port/win32/timer.c:         r =
WaitForSingleObjectEx(timerCommArea.event, waittime, FALSE);
src/backend/port/win32/timer.c:         timerCommArea.event =
CreateEvent(NULL, TRUE, FALSE, NULL);
src/backend/port/win32_sema.c:          rc =
WaitForMultipleObjectsEx(2, wh, FALSE, INFINITE, TRUE);
src/backend/port/win32_shmem.c: hmap = OpenFileMapping(FILE_MAP_READ,
FALSE, szShareMem);
src/backend/storage/ipc/dsm_impl.c:                   FALSE,       /* do not inherit the name */
src/backend/storage/ipc/dsm_impl.c:                                 PostmasterHandle, &hmap, 0, FALSE,
src/backend/storage/ipc/dsm_impl.c:                                 NULL, NULL, 0, FALSE,
src/backend/storage/ipc/latch.c:        latch->event =
CreateEvent(NULL, TRUE, FALSE, NULL);
src/backend/storage/ipc/latch.c:        latch->event =
CreateEvent(&sa, TRUE, FALSE, NULL);
src/interfaces/ecpg/ecpglib/misc.c:                             return FALSE;
src/interfaces/ecpg/ecpglib/misc.c:                     return FALSE;
src/interfaces/ecpg/ecpglib/misc.c:                     mutex->handle
= CreateMutex(NULL, FALSE, NULL);
src/interfaces/ecpg/pgtypeslib/datetime.c:      bool
EuroDates = FALSE;
src/interfaces/ecpg/pgtypeslib/datetime.c:      bool
EuroDates = FALSE;
src/interfaces/ecpg/pgtypeslib/dt_common.c:     intbc = FALSE;
src/interfaces/ecpg/pgtypeslib/dt_common.c:     intis2digits = FALSE;
src/interfaces/ecpg/pgtypeslib/dt_common.c:     inthaveTextMonth = FALSE;
src/interfaces/ecpg/pgtypeslib/dt_common.c:     intis2digits = FALSE;
src/interfaces/ecpg/pgtypeslib/dt_common.c:     intbc = FALSE;
src/interfaces/ecpg/pgtypeslib/interval.c:      bool
is_before = FALSE;
src/interfaces/ecpg/pgtypeslib/interval.c:      *is_zero = FALSE;
src/interfaces/ecpg/pgtypeslib/interval.c:      *is_zero = FALSE;
src/interfaces/ecpg/pgtypeslib/interval.c:      bool
is_before = FALSE;
src/interfaces/ecpg/pgtypeslib/interval.c:is_zero = FALSE;
src/interfaces/ecpg/pgtypeslib/numeric.c:       bool            have_dp = FALSE;
src/interfaces/ecpg/pgtypeslib/timestamp.c:             return FALSE;
src/interfaces/libpq/fe-secure.c: * The caller should say got_epipe =
FALSE if it is certain that it
src/pl/plperl/plperl.c:
eval_pv("PostgreSQL::InServer::SPI::bootstrap()", FALSE);
src/pl/plperl/plperl.c: eval_pv(PLC_TRUSTED, FALSE);
src/pl/plperl/plperl.c: eval_pv("my $a=chr(0x100); return $a =~
/\\xa9/i", FALSE);
src/pl/plperl/plperl.c:         eval_pv(plperl_on_plperl_init, FALSE);
src/pl/plperl/plperl.c:         eval_pv(plperl_on_plperlu_init, FALSE);
src/pl/plperl/plperl.c:         SV                **svp = av_fetch(av,
i, FALSE);
src/pl/plperl/plperl.c:                 while ((svp = av_fetch(rav, i,
FALSE)) != NULL)
src/pl/plperl/ppport.h:#  define ERRSV
get_sv("@",FALSE)
src/pl/plperl/ppport.h: utilize(!(flags & PERL_LOADMOD_DENY),
start_subparse(FALSE, 0),
src/pl/plperl/ppport.h:                 start_subparse(FALSE, 0),
src/pl/plperl/ppport.h: SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
src/pl/plperl/ppport.h:    return FALSE;
src/pl/plperl/ppport.h:    bool overflowed = FALSE;
src/pl/plperl/ppport.h:    bool overflowed = FALSE;
src/pl/plperl/ppport.h:    bool overflowed = FALSE;
src/pl/plpgsql/src/pl_comp.c: * if not recognized, fill in *word and
return FALSE.
src/port/kill.c:                if ((prochandle =
OpenProcess(PROCESS_TERMINATE, FALSE, (DWORD) pid)) == NULL)
src/port/pgsleep.c:             SleepEx((microsec < 500 ? 1 :
(microsec + 500) / 1000), FALSE);
src/test/regress/pg_regress.c:          r =
WaitForMultipleObjects(tests_left, active_pids, FALSE, INFINITE);

> 0003-Remove-TRUE-and-FALSE.patch

Looks good.  What about these?

src/interfaces/ecpg/include/ecpglib.h:#define FALSE     0
src/interfaces/ecpg/pgtypeslib/extern.h:#define FALSE   0

> 0004-Remove-BoolPtr-type.patch

Looks good.

> 0005-Make-casting-between-bool-and-GinTernaryValue-more-r.patch

- * For convenience, this is compatible with booleans. A boolean can be
+ * For convenience, this is compatible with bools. A bool can be

Maybe "compatible with bool" ?

+#elif SIZEOF_BOOL == 4
+typedef int GinTernaryValue;
+#else

Maybe int32?  I understand that PostgreSQL doesn't actually work if
int isn't of that size, but still.

> 0006-Add-bool8-typedef-for-system-catalog-structs.patch

Make sense.

> 0007-Avoid-use-of-bool-in-thread_test.c.patch

Looks good.

> 0008-Use-stdbool.h-if-available.patch

I'm afraid this autoconf stuff is gibberish, and I can't personally
tell if it's the right gibberish so no opinion on this one.

-- 
Thomas Munro
http://www.enterprisedb.com



pgsql-hackers by date:

Previous
From: Ashutosh Bapat
Date:
Subject: Re: [HACKERS] Log LDAP "diagnostic messages"?
Next
From: Masahiko Sawada
Date:
Subject: Re: [HACKERS] Quorum commit for multiple synchronous replication.