postgresql/src/port
Tom Lane 3804539e48 Replace random(), pg_erand48(), etc with a better PRNG API and algorithm.
Standardize on xoroshiro128** as our basic PRNG algorithm, eliminating
a bunch of platform dependencies as well as fundamentally-obsolete PRNG
code.  In addition, this API replacement will ease replacing the
algorithm again in future, should that become necessary.

xoroshiro128** is a few percent slower than the drand48 family,
but it can produce full-width 64-bit random values not only 48-bit,
and it should be much more trustworthy.  It's likely to be noticeably
faster than the platform's random(), depending on which platform you
are thinking about; and we can have non-global state vectors easily,
unlike with random().  It is not cryptographically strong, but neither
are the functions it replaces.

Fabien Coelho, reviewed by Dean Rasheed, Aleksander Alekseev, and myself

Discussion: https://postgr.es/m/alpine.DEB.2.22.394.2105241211230.165418@pseudo
2021-11-28 21:33:07 -05:00
..
.gitignore
bsearch_arg.c Fix typos and grammar in comments and docs 2021-04-19 11:32:30 +09:00
chklocale.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
dirent.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
dirmod.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
dlopen.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
explicit_bzero.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
fls.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
getaddrinfo.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
getopt_long.c Fix our getopt_long's behavior for a command line argument of just "-". 2020-03-23 11:58:00 -04:00
getopt.c
getpeereid.c Remove check for accept() argument types 2021-11-09 15:35:26 +01:00
getrusage.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
gettimeofday.c Clean up newlines following left parentheses 2020-01-30 13:42:14 -03:00
inet_aton.c
inet_net_ntop.c
kill.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
link.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
Makefile Replace random(), pg_erand48(), etc with a better PRNG API and algorithm. 2021-11-28 21:33:07 -05:00
mkdtemp.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
noblock.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
open.c Revert "Fix issues with Windows' stat() for files pending on deletion" 2021-07-12 14:46:08 +09:00
path.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pg_bitutils.c Use direct function calls for pg_popcount{32,64} on non-x86 platforms 2021-08-16 11:51:15 -04:00
pg_crc32c_armv8_choose.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pg_crc32c_armv8.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pg_crc32c_sb8.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pg_crc32c_sse42_choose.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pg_crc32c_sse42.c pg_attribute_no_sanitize_alignment() macro 2021-02-12 17:23:35 +03:00
pg_strong_random.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pgcheckdir.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pgmkdirp.c
pgsleep.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pgstrcasecmp.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pgstrsignal.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pqsignal.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
pread.c Move our p{read,write}v replacements into their own files. 2021-01-14 11:16:59 +13:00
preadv.c Initial pgindent and pgperltidy run for v14. 2021-05-12 13:14:10 -04:00
pthread_barrier_wait.c Fix error handling in replacement pthread_barrier_init(). 2021-06-01 11:31:06 +12:00
pthread-win32.h
pwrite.c Move our p{read,write}v replacements into their own files. 2021-01-14 11:16:59 +13:00
pwritev.c Move our p{read,write}v replacements into their own files. 2021-01-14 11:16:59 +13:00
qsort_arg.c Use sort_template.h for qsort() and qsort_arg(). 2021-03-03 17:02:32 +13:00
qsort.c Use sort_template.h for qsort() and qsort_arg(). 2021-03-03 17:02:32 +13:00
quotes.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
README AIX: Fix missing libpq symbols by respecting SHLIB_EXPORTS. 2021-09-06 11:27:59 -07:00
setenv.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
snprintf.c Speed up printing of integers in snprintf.c. 2021-10-28 13:39:57 -04:00
strerror.c Treat ETIMEDOUT as indicating a non-recoverable connection failure. 2021-09-30 14:16:08 -04:00
strlcat.c
strlcpy.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
strnlen.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
strtof.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
system.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
tar.c Make the order of the header file includes consistent in non-backend modules. 2019-10-25 07:41:52 +05:30
thread.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
unsetenv.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
win32.ico
win32env.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
win32error.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
win32security.c windows: Only consider us to be running as service if stderr is invalid. 2021-09-07 11:56:13 -07:00
win32setlocale.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
win32stat.c Fix fstat() emulation on Windows with standard streams 2021-11-25 12:16:21 +09:00
win32ver.rc Update copyright for 2021 2021-01-02 13:06:25 -05:00

src/port/README

libpgport
=========

libpgport must have special behavior.  It supplies functions to both
libraries and applications.  However, there are two complexities:

1)  Libraries need to use object files that are compiled with exactly
the same flags as the library.  libpgport might not use the same flags,
so it is necessary to recompile the object files for individual
libraries.  This is done by removing -lpgport from the link line:

        # Need to recompile any libpgport object files
        LIBS := $(filter-out -lpgport, $(LIBS))

and adding infrastructure to recompile the object files:

        OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \
                connect.o misc.o path.o exec.o \
                $(filter strlcat.o, $(LIBOBJS))

The problem is that there is no testing of which object files need to be
added, but missing functions usually show up when linking user
applications.

2) For applications, we use -lpgport before -lpq, so the static files
from libpgport are linked first.  This avoids having applications
dependent on symbols that are _used_ by libpq, but not intended to be
exported by libpq.  libpq's libpgport usage changes over time, so such a
dependency is a problem.  Windows, Linux, AIX, and macOS use an export
list to control the symbols exported by libpq.