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 :
|
do :
|
||||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
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([
|
AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([
|
||||||
pthread.h not found; use --disable-thread-safety to disable thread safety])])
|
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
|
# Do test here with the proper thread flags
|
||||||
PGAC_FUNC_STRERROR_R_INT
|
PGAC_FUNC_STRERROR_R_INT
|
||||||
|
@ -41,3 +41,23 @@ pg_str_endswith(const char *str, const char *end)
|
|||||||
str += slen - elen;
|
str += slen - elen;
|
||||||
return strcmp(str, end) == 0;
|
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);
|
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 */
|
#endif /* COMMON_STRING_H */
|
||||||
|
@ -496,6 +496,9 @@
|
|||||||
/* Define to 1 if you have the `strlcpy' function. */
|
/* Define to 1 if you have the `strlcpy' function. */
|
||||||
#undef HAVE_STRLCPY
|
#undef HAVE_STRLCPY
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strnlen' function. */
|
||||||
|
#undef HAVE_STRNLEN
|
||||||
|
|
||||||
/* Define to use have a strong random number source */
|
/* Define to use have a strong random number source */
|
||||||
#undef HAVE_STRONG_RANDOM
|
#undef HAVE_STRONG_RANDOM
|
||||||
|
|
||||||
|
@ -345,6 +345,9 @@
|
|||||||
/* Define to 1 if you have the <string.h> header file. */
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
#define HAVE_STRING_H 1
|
#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 to use have a strong random number source */
|
||||||
#define HAVE_STRONG_RANDOM 1
|
#define HAVE_STRONG_RANDOM 1
|
||||||
|
|
||||||
|
@ -43,6 +43,8 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
|
||||||
|
#include "common/string.h"
|
||||||
|
|
||||||
#ifndef NL_ARGMAX
|
#ifndef NL_ARGMAX
|
||||||
#define NL_ARGMAX 16
|
#define NL_ARGMAX 16
|
||||||
#endif
|
#endif
|
||||||
@ -790,16 +792,6 @@ bad_format:
|
|||||||
target->failed = true;
|
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
|
static void
|
||||||
fmtstr(char *value, int leftjust, int minlen, int maxwidth,
|
fmtstr(char *value, int leftjust, int minlen, int maxwidth,
|
||||||
int pointflag, PrintfTarget *target)
|
int pointflag, PrintfTarget *target)
|
||||||
|
Loading…
Reference in New Issue
Block a user