mirror of
https://github.com/postgres/postgres.git
synced 2026-04-22 06:37:06 -04:00
A warning on a NetBSD box revealed to me that pg_waldump/compat.c is using vprintf(), which snprintf.c did not provide coverage for. This is not good if we want to have uniform *printf behavior, and it's pretty silly to omit when it's a one-line function. I also noted that snprintf.c has pg_vsprintf() but for some reason it was not exposed to the outside world, creating another way in which code might accidentally invoke the platform *printf family. Let's just make sure that we replace all eight of the POSIX-standard printf family. Also, upgrade plperl.h and plpython.h to make sure that they do their undefine/redefine rain dance for all eight, not some random maybe-sufficient subset thereof. |
||
|---|---|---|
| .. | ||
| .gitignore | ||
| chklocale.c | ||
| crypt.c | ||
| dirent.c | ||
| dirmod.c | ||
| dlopen.c | ||
| erand48.c | ||
| fls.c | ||
| fseeko.c | ||
| getaddrinfo.c | ||
| getopt.c | ||
| getopt_long.c | ||
| getpeereid.c | ||
| getrusage.c | ||
| gettimeofday.c | ||
| inet_aton.c | ||
| inet_net_ntop.c | ||
| isinf.c | ||
| kill.c | ||
| Makefile | ||
| mkdtemp.c | ||
| noblock.c | ||
| open.c | ||
| path.c | ||
| pg_crc32c_armv8.c | ||
| pg_crc32c_armv8_choose.c | ||
| pg_crc32c_sb8.c | ||
| pg_crc32c_sse42.c | ||
| pg_crc32c_sse42_choose.c | ||
| pg_strong_random.c | ||
| pgcheckdir.c | ||
| pgmkdirp.c | ||
| pgsleep.c | ||
| pgstrcasecmp.c | ||
| pqsignal.c | ||
| pthread-win32.h | ||
| qsort.c | ||
| qsort_arg.c | ||
| quotes.c | ||
| random.c | ||
| README | ||
| rint.c | ||
| snprintf.c | ||
| sprompt.c | ||
| srandom.c | ||
| strerror.c | ||
| strlcat.c | ||
| strlcpy.c | ||
| strnlen.c | ||
| system.c | ||
| tar.c | ||
| thread.c | ||
| unsetenv.c | ||
| win32.ico | ||
| win32env.c | ||
| win32error.c | ||
| win32security.c | ||
| win32setlocale.c | ||
| win32ver.rc | ||
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, and macOS use an export list to
control the symbols exported by libpq.