diff options
author | Karl Williamson <khw@cpan.org> | 2020-01-12 10:11:54 -0700 |
---|---|---|
committer | Karl Williamson <khw@cpan.org> | 2020-01-13 20:54:05 -0700 |
commit | 1ab100a8598da3fcda1b313c7a6415231a170eea (patch) | |
tree | 959c120e5f7b9c16d9612819836d054fb74cdae9 /util.c | |
parent | 7bea1fb03caa036528182ef907f72095b5d91dea (diff) | |
download | perl-1ab100a8598da3fcda1b313c7a6415231a170eea.tar.gz |
Rewrite and inline my_strnlen()
This commit changes this function to use memchr() instead of looping
byte-by-byte through the string. And it inlines it into 3 lines of
code. This should give comparable performance to a native libc
strnlen().
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 30 |
1 files changed, 0 insertions, 30 deletions
@@ -5574,36 +5574,6 @@ 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. */ |