diff options
author | Dagfinn Ilmari Mannsåker <ilmari@ilmari.org> | 2017-10-21 20:05:17 +0100 |
---|---|---|
committer | Dagfinn Ilmari Mannsåker <ilmari@ilmari.org> | 2017-10-21 20:05:17 +0100 |
commit | aefb3fa072c057c13029faf2c7044bca8e0cc344 (patch) | |
tree | 9da4f463295151cce28cc409e69eebf2c73dcf5f /util.c | |
parent | b961752cf64eb09f62d550c34bc311c4447339c7 (diff) | |
download | perl-aefb3fa072c057c13029faf2c7044bca8e0cc344.tar.gz |
Provide fallback strnlen implementation
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -5480,6 +5480,36 @@ Perl_my_strlcpy(char *dst, const char *src, Size_t size) } #endif +/* +=for apidoc my_strnlen + +The C library C<strnlen> if available, or a Perl implementation of it. + +C<my_strnlen()> computes the length of the string, up to C<maxlen> +characters. It will will never attempt to address more than C<maxlen> +characters, making it suitable for use with strings that are not +guaranteed to be NUL-terminated. + +=cut + +Description stolen from http://man.openbsd.org/strnlen.3, +implementation stolen from PostgreSQL. +*/ +#ifndef HAS_STRNLEN +Size_t +Perl_my_strnlen(const char *str, Size_t maxlen) +{ + const char *p = str; + + PERL_ARGS_ASSERT_MY_STRNLEN; + + while(maxlen-- && *p) + p++; + + return p - str; +} +#endif + #if defined(_MSC_VER) && (_MSC_VER >= 1300) && (_MSC_VER < 1400) && (WINVER < 0x0500) /* VC7 or 7.1, building with pre-VC7 runtime libraries. */ long _ftol( double ); /* Defined by VC6 C libs. */ |