mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-17 19:30:00 +08:00
Add pg_strnlen() a portable implementation of strlen.
As the OS version is likely going to be more optimized, fall back to it if available, as detected by configure.
This commit is contained in:
parent
71c75ddfbb
commit
8a241792f9
2
configure
vendored
2
configure
vendored
@ -8777,7 +8777,7 @@ fi
|
||||
|
||||
|
||||
|
||||
for ac_func in strerror_r getpwuid_r gethostbyname_r
|
||||
for ac_func in strerror_r getpwuid_r gethostbyname_r strnlen
|
||||
do :
|
||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||
|
@ -961,7 +961,7 @@ LIBS="$LIBS $PTHREAD_LIBS"
|
||||
AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([
|
||||
pthread.h not found; use --disable-thread-safety to disable thread safety])])
|
||||
|
||||
AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r])
|
||||
AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r strnlen])
|
||||
|
||||
# Do test here with the proper thread flags
|
||||
PGAC_FUNC_STRERROR_R_INT
|
||||
|
@ -41,3 +41,23 @@ pg_str_endswith(const char *str, const char *end)
|
||||
str += slen - elen;
|
||||
return strcmp(str, end) == 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Portable version of posix' strnlen.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#ifndef HAVE_STRNLEN
|
||||
size_t
|
||||
pg_strnlen(const char *str, size_t maxlen)
|
||||
{
|
||||
const char *p = str;
|
||||
|
||||
while (maxlen-- > 0 && *p)
|
||||
p++;
|
||||
return p - str;
|
||||
}
|
||||
#endif
|
||||
|
@ -12,4 +12,19 @@
|
||||
|
||||
extern bool pg_str_endswith(const char *str, const char *end);
|
||||
|
||||
/*
|
||||
* Portable version of posix' strnlen.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Use the system strnlen if provided, it's likely to be faster.
|
||||
*/
|
||||
#ifdef HAVE_STRNLEN
|
||||
#define pg_strnlen(str, maxlen) strnlen(str, maxlen)
|
||||
#else
|
||||
extern size_t pg_strnlen(const char *str, size_t maxlen);
|
||||
#endif
|
||||
|
||||
#endif /* COMMON_STRING_H */
|
||||
|
@ -496,6 +496,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 use have a strong random number source */
|
||||
#undef HAVE_STRONG_RANDOM
|
||||
|
||||
|
@ -345,6 +345,9 @@
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the `strnlen' function. */
|
||||
#define HAVE_STRNLEN
|
||||
|
||||
/* Define to use have a strong random number source */
|
||||
#define HAVE_STRONG_RANDOM 1
|
||||
|
||||
|
@ -43,6 +43,8 @@
|
||||
#endif
|
||||
#include <sys/param.h>
|
||||
|
||||
#include "common/string.h"
|
||||
|
||||
#ifndef NL_ARGMAX
|
||||
#define NL_ARGMAX 16
|
||||
#endif
|
||||
@ -790,16 +792,6 @@ bad_format:
|
||||
target->failed = true;
|
||||
}
|
||||
|
||||
static size_t
|
||||
pg_strnlen(const char *str, size_t maxlen)
|
||||
{
|
||||
const char *p = str;
|
||||
|
||||
while (maxlen-- > 0 && *p)
|
||||
p++;
|
||||
return p - str;
|
||||
}
|
||||
|
||||
static void
|
||||
fmtstr(char *value, int leftjust, int minlen, int maxwidth,
|
||||
int pointflag, PrintfTarget *target)
|
||||
|
Loading…
Reference in New Issue
Block a user