mirror of
https://github.com/postgres/postgres.git
synced 2026-03-02 21:30:36 -05:00
Support use of strnlen() in pre-v11 branches.
Back-patch a minimal subset of commitsfffd651e8and46912d9b1, to support strnlen() on all platforms without adding any callers. This will be needed by a following bug fix.
This commit is contained in:
parent
066535d411
commit
7cdb976324
8 changed files with 80 additions and 5 deletions
23
configure
vendored
23
configure
vendored
|
|
@ -12915,6 +12915,16 @@ fi
|
|||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_DECL_STRLCPY $ac_have_decl
|
||||
_ACEOF
|
||||
ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default"
|
||||
if test "x$ac_cv_have_decl_strnlen" = xyes; then :
|
||||
ac_have_decl=1
|
||||
else
|
||||
ac_have_decl=0
|
||||
fi
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_DECL_STRNLEN $ac_have_decl
|
||||
_ACEOF
|
||||
|
||||
# This is probably only present on Darwin, but may as well check always
|
||||
ac_fn_c_check_decl "$LINENO" "F_FULLFSYNC" "ac_cv_have_decl_F_FULLFSYNC" "#include <fcntl.h>
|
||||
|
|
@ -13282,6 +13292,19 @@ esac
|
|||
|
||||
fi
|
||||
|
||||
ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen"
|
||||
if test "x$ac_cv_func_strnlen" = xyes; then :
|
||||
$as_echo "#define HAVE_STRNLEN 1" >>confdefs.h
|
||||
|
||||
else
|
||||
case " $LIBOBJS " in
|
||||
*" strnlen.$ac_objext "* ) ;;
|
||||
*) LIBOBJS="$LIBOBJS strnlen.$ac_objext"
|
||||
;;
|
||||
esac
|
||||
|
||||
fi
|
||||
|
||||
|
||||
|
||||
case $host_os in
|
||||
|
|
|
|||
|
|
@ -1555,7 +1555,7 @@ AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.h>])
|
|||
]) # fi
|
||||
|
||||
AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
|
||||
AC_CHECK_DECLS([strlcat, strlcpy])
|
||||
AC_CHECK_DECLS([strlcat, strlcpy, strnlen])
|
||||
# This is probably only present on Darwin, but may as well check always
|
||||
AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
|
||||
|
||||
|
|
@ -1647,7 +1647,7 @@ else
|
|||
AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
|
||||
fi
|
||||
|
||||
AC_REPLACE_FUNCS([crypt fls getopt getrusage inet_aton mkdtemp random rint srandom strerror strlcat strlcpy])
|
||||
AC_REPLACE_FUNCS([crypt fls getopt getrusage inet_aton mkdtemp random rint srandom strerror strlcat strlcpy strnlen])
|
||||
|
||||
case $host_os in
|
||||
|
||||
|
|
|
|||
|
|
@ -144,6 +144,10 @@
|
|||
don't. */
|
||||
#undef HAVE_DECL_STRLCPY
|
||||
|
||||
/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_STRNLEN
|
||||
|
||||
/* Define to 1 if you have the declaration of `strtoll', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_STRTOLL
|
||||
|
|
@ -504,6 +508,9 @@
|
|||
/* Define to 1 if you have the `strlcpy' function. */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define to 1 if you have the `strnlen' function. */
|
||||
#undef HAVE_STRNLEN
|
||||
|
||||
/* Define to 1 if you have the `strsignal' function. */
|
||||
#undef HAVE_STRSIGNAL
|
||||
|
||||
|
|
|
|||
|
|
@ -96,6 +96,10 @@
|
|||
don't. */
|
||||
#define HAVE_DECL_SNPRINTF 1
|
||||
|
||||
/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
|
||||
don't. */
|
||||
#define HAVE_DECL_STRNLEN 1
|
||||
|
||||
/* Define to 1 if you have the declaration of `strtoll', and to 0 if you
|
||||
don't. */
|
||||
#define HAVE_DECL_STRTOLL 1
|
||||
|
|
@ -268,6 +272,9 @@
|
|||
/* Define to 1 if you have the <pam/pam_appl.h> header file. */
|
||||
/* #undef HAVE_PAM_PAM_APPL_H */
|
||||
|
||||
/* Define to 1 if you have the `strnlen' function. */
|
||||
#define HAVE_STRNLEN 1
|
||||
|
||||
/* Define to 1 if you have the `poll' function. */
|
||||
/* #undef HAVE_POLL */
|
||||
|
||||
|
|
|
|||
|
|
@ -404,6 +404,10 @@ extern size_t strlcat(char *dst, const char *src, size_t siz);
|
|||
extern size_t strlcpy(char *dst, const char *src, size_t siz);
|
||||
#endif
|
||||
|
||||
#if !HAVE_DECL_STRNLEN
|
||||
extern size_t strnlen(const char *str, size_t maxlen);
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_RANDOM) && !defined(__BORLANDC__)
|
||||
extern long random(void);
|
||||
#endif
|
||||
|
|
|
|||
1
src/interfaces/libpq/.gitignore
vendored
1
src/interfaces/libpq/.gitignore
vendored
|
|
@ -12,6 +12,7 @@
|
|||
/snprintf.c
|
||||
/strerror.c
|
||||
/strlcpy.c
|
||||
/strnlen.c
|
||||
/system.c
|
||||
/thread.c
|
||||
/win32error.c
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ OBJS= fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o \
|
|||
OBJS += chklocale.o inet_net_ntop.o noblock.o pgstrcasecmp.o pqsignal.o \
|
||||
thread.o
|
||||
# libpgport C files that are needed if identified by configure
|
||||
OBJS += $(filter crypt.o getaddrinfo.o getpeereid.o inet_aton.o open.o system.o snprintf.o strerror.o strlcpy.o win32error.o win32setlocale.o, $(LIBOBJS))
|
||||
OBJS += $(filter crypt.o getaddrinfo.o getpeereid.o inet_aton.o open.o system.o snprintf.o strerror.o strlcpy.o strnlen.o win32error.o win32setlocale.o, $(LIBOBJS))
|
||||
# backend/libpq
|
||||
OBJS += ip.o md5.o
|
||||
# utils/mb
|
||||
|
|
@ -93,7 +93,7 @@ backend_src = $(top_srcdir)/src/backend
|
|||
# For some libpgport modules, this only happens if configure decides
|
||||
# the module is needed (see filter hack in OBJS, above).
|
||||
|
||||
chklocale.c crypt.c getaddrinfo.c getpeereid.c inet_aton.c inet_net_ntop.c noblock.c open.c system.c pgsleep.c pgstrcasecmp.c pqsignal.c snprintf.c strerror.c strlcpy.c thread.c win32error.c win32setlocale.c: % : $(top_srcdir)/src/port/%
|
||||
chklocale.c crypt.c getaddrinfo.c getpeereid.c inet_aton.c inet_net_ntop.c noblock.c open.c system.c pgsleep.c pgstrcasecmp.c pqsignal.c snprintf.c strerror.c strlcpy.c strnlen.c thread.c win32error.c win32setlocale.c: % : $(top_srcdir)/src/port/%
|
||||
rm -f $@ && $(LN_S) $< .
|
||||
|
||||
ip.c md5.c: % : $(backend_src)/libpq/%
|
||||
|
|
@ -145,7 +145,7 @@ clean distclean: clean-lib
|
|||
# Might be left over from a Win32 client-only build
|
||||
rm -f pg_config_paths.h
|
||||
rm -f inet_net_ntop.c noblock.c pgstrcasecmp.c pqsignal.c thread.c
|
||||
rm -f chklocale.c crypt.c getaddrinfo.c getpeereid.c inet_aton.c open.c system.c snprintf.c strerror.c strlcpy.c win32error.c win32setlocale.c
|
||||
rm -f chklocale.c crypt.c getaddrinfo.c getpeereid.c inet_aton.c open.c system.c snprintf.c strerror.c strlcpy.c strnlen.c win32error.c win32setlocale.c
|
||||
rm -f pgsleep.c
|
||||
rm -f md5.c ip.c
|
||||
rm -f encnames.c wchar.c
|
||||
|
|
|
|||
33
src/port/strnlen.c
Normal file
33
src/port/strnlen.c
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* strnlen.c
|
||||
* Fallback implementation of strnlen().
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* src/port/strnlen.c
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "c.h"
|
||||
|
||||
/*
|
||||
* Implementation of posix' strnlen for systems where it's not available.
|
||||
*
|
||||
* Returns the number of characters before a null-byte in the string pointed
|
||||
* to by str, unless there's no null-byte before maxlen. In the latter case
|
||||
* maxlen is returned.
|
||||
*/
|
||||
size_t
|
||||
strnlen(const char *str, size_t maxlen)
|
||||
{
|
||||
const char *p = str;
|
||||
|
||||
while (maxlen-- > 0 && *p)
|
||||
p++;
|
||||
return p - str;
|
||||
}
|
||||
Loading…
Reference in a new issue