Test the existence of strndup(3) before using it.
This can eliminate the ad-hoc "#ifdef WIN32" and can also support other platforms lacking it as well (including Darwin 9).
This commit is contained in:
parent
4c61662644
commit
023b9c1e7e
1
NEWS
1
NEWS
@ -1,5 +1,6 @@
|
|||||||
ver 0.19.9 (not yet released)
|
ver 0.19.9 (not yet released)
|
||||||
* fix build failure with uClibc
|
* fix build failure with uClibc
|
||||||
|
* fix build failure on non-POSIX operating systems
|
||||||
|
|
||||||
ver 0.19.8 (2015/01/14)
|
ver 0.19.8 (2015/01/14)
|
||||||
* input
|
* input
|
||||||
|
@ -206,6 +206,7 @@ if test x$host_is_linux = xyes; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CHECK_FUNCS(getpwnam_r getpwuid_r)
|
AC_CHECK_FUNCS(getpwnam_r getpwuid_r)
|
||||||
|
AC_CHECK_FUNCS(strndup)
|
||||||
|
|
||||||
if test x$host_is_linux = xyes; then
|
if test x$host_is_linux = xyes; then
|
||||||
MPD_OPTIONAL_FUNC(eventfd, eventfd, USE_EVENTFD)
|
MPD_OPTIONAL_FUNC(eventfd, eventfd, USE_EVENTFD)
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include "Alloc.hxx"
|
#include "Alloc.hxx"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -62,14 +63,14 @@ xstrdup(const char *s)
|
|||||||
char *
|
char *
|
||||||
xstrndup(const char *s, size_t n)
|
xstrndup(const char *s, size_t n)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef HAVE_STRNDUP
|
||||||
char *p = (char *)xalloc(n + 1);
|
|
||||||
memcpy(p, s, n);
|
|
||||||
p[n] = 0;
|
|
||||||
#else
|
|
||||||
char *p = strndup(s, n);
|
char *p = strndup(s, n);
|
||||||
if (gcc_unlikely(p == nullptr))
|
if (gcc_unlikely(p == nullptr))
|
||||||
oom();
|
oom();
|
||||||
|
#else
|
||||||
|
char *p = (char *)xalloc(n + 1);
|
||||||
|
memcpy(p, s, n);
|
||||||
|
p[n] = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
|
Loading…
Reference in New Issue
Block a user