pgsql: Incorporate strerror_r() into src/port/snprintf.c, too.

Started by Tom Laneover 7 years ago5 messagescomitters
Jump to latest
#1Tom Lane
tgl@sss.pgh.pa.us

Incorporate strerror_r() into src/port/snprintf.c, too.

This provides the features that used to exist in useful_strerror()
for users of strerror_r(), too. Also, standardize on the GNU convention
that strerror_r returns a char pointer that may not be NULL.

I notice that libpq's win32.c contains a variant version of strerror_r
that probably ought to be folded into strerror.c. But lacking a
Windows environment, I should leave that to somebody else.

Discussion: /messages/by-id/2975.1526862605@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/758ce9b7794845f95473c569155d29fcf0e2751b

Modified Files
--------------
src/include/port.h | 7 ++-
src/interfaces/libpq/fe-auth.c | 6 +--
src/interfaces/libpq/fe-connect.c | 18 +++----
src/interfaces/libpq/fe-lobj.c | 14 +++---
src/interfaces/libpq/fe-misc.c | 2 +-
src/interfaces/libpq/fe-secure-openssl.c | 12 ++---
src/interfaces/libpq/fe-secure.c | 4 +-
src/interfaces/libpq/libpq-int.h | 2 +-
src/port/strerror.c | 85 +++++++++++++++++++++++---------
src/port/thread.c | 27 ----------
src/test/thread/thread_test.c | 5 +-
11 files changed, 99 insertions(+), 83 deletions(-)

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#1)
Re: pgsql: Incorporate strerror_r() into src/port/snprintf.c, too.

On 26/09/2018 18:36, Tom Lane wrote:

Incorporate strerror_r() into src/port/snprintf.c, too.

This provides the features that used to exist in useful_strerror()
for users of strerror_r(), too. Also, standardize on the GNU convention
that strerror_r returns a char pointer that may not be NULL.

Somehow, this is not working for me:

Undefined symbols for architecture x86_64:
"_libintl_gettext", referenced from:
_pg_strerror_r in strerror.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[4]: *** [../../../../src/Makefile.shlib:303: libpgtypes.3.12.dylib]
Error 1

It works if I don't use --enable-nls.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#2)
Re: pgsql: Incorporate strerror_r() into src/port/snprintf.c, too.

Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes:

Somehow, this is not working for me:

Undefined symbols for architecture x86_64:
"_libintl_gettext", referenced from:
_pg_strerror_r in strerror.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[4]: *** [../../../../src/Makefile.shlib:303: libpgtypes.3.12.dylib]
Error 1

It works if I don't use --enable-nls.

More context please? I'm guessing this is on macOS? Where did you get
libintl from? Is it, as it looks, getting through libpq and failing in
ecpg?

My first bet would be that ecpg for some reason lacks needed NLS
infrastructure ... have we ever tried to internationalize it?
Right now might not be the best time to try --- perhaps the path
of least resistance is to defeat strerror.c's NLS support when
it's being compiled in ecpg.

regards, tom lane

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#3)
Re: pgsql: Incorporate strerror_r() into src/port/snprintf.c, too.

I wrote:

My first bet would be that ecpg for some reason lacks needed NLS
infrastructure ... have we ever tried to internationalize it?

Oh, I see the problem: for some reason pgtypeslib fails to pull in
-lintl, unlike its siblings. Please try that again.

regards, tom lane

#5Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#4)
Re: pgsql: Incorporate strerror_r() into src/port/snprintf.c, too.

On 26/09/2018 22:49, Tom Lane wrote:

I wrote:

My first bet would be that ecpg for some reason lacks needed NLS
infrastructure ... have we ever tried to internationalize it?

Oh, I see the problem: for some reason pgtypeslib fails to pull in
-lintl, unlike its siblings. Please try that again.

Works now, thanks.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services