libport: Add a replacement implementation for strnlen.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2017-12-15 10:48:48 +01:00
parent acdbea2bee
commit 9d36aad457
6 changed files with 42 additions and 0 deletions

1
configure vendored
View File

@ -15747,6 +15747,7 @@ for ac_func in \
strdup \
strerror \
strncasecmp \
strnlen \
strtold \
strtoll \
strtoull \

View File

@ -2125,6 +2125,7 @@ AC_CHECK_FUNCS(\
strdup \
strerror \
strncasecmp \
strnlen \
strtold \
strtoll \
strtoull \

View File

@ -921,6 +921,9 @@
/* Define to 1 if you have the `strncasecmp' function. */
#undef HAVE_STRNCASECMP
/* Define to 1 if you have the `strnlen' function. */
#undef HAVE_STRNLEN
/* Define to 1 if you have the <stropts.h> header file. */
#undef HAVE_STROPTS_H

View File

@ -344,6 +344,10 @@ int strncasecmp(const char *str1, const char *str2, size_t n);
# endif
#endif /* !defined(HAVE_STRNCASECMP) */
#ifndef HAVE_STRNLEN
size_t strnlen( const char *str, size_t maxlen );
#endif /* !defined(HAVE_STRNLEN) */
#ifndef HAVE_STRERROR
const char *strerror(int err);
#endif /* !defined(HAVE_STRERROR) */
@ -538,6 +542,7 @@ extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compa
#define strcasecmp __WINE_NOT_PORTABLE(strcasecmp)
#define strerror __WINE_NOT_PORTABLE(strerror)
#define strncasecmp __WINE_NOT_PORTABLE(strncasecmp)
#define strnlen __WINE_NOT_PORTABLE(strnlen)
#define usleep __WINE_NOT_PORTABLE(usleep)
#endif /* NO_LIBWINE_PORT */

View File

@ -102,6 +102,7 @@ C_SRCS = \
strcasecmp.c \
strerror.c \
strncasecmp.c \
strnlen.c \
symlink.c \
usleep.c \
utf8.c \

31
libs/port/strnlen.c Normal file
View File

@ -0,0 +1,31 @@
/*
* strnlen function
*
* Copyright 2017 Alexandre Julliard
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include "wine/port.h"
#ifndef HAVE_STRNLEN
size_t strnlen( const char *str, size_t maxlen )
{
const char *ptr = memchr( str, 0, maxlen );
if (!ptr) return maxlen;
return ptr - str;
}
#endif /* HAVE_STRNLEN */