mirror of https://github.com/c-ares/c-ares.git
parent
2cb5cbba34
commit
797372b0f4
8 changed files with 208 additions and 7 deletions
@ -0,0 +1,43 @@ |
|||||||
|
|
||||||
|
/* $Id$ */ |
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
* |
||||||
|
* Permission to use, copy, modify, and distribute this |
||||||
|
* software and its documentation for any purpose and without |
||||||
|
* fee is hereby granted, provided that the above copyright |
||||||
|
* notice appear in all copies and that both that copyright |
||||||
|
* notice and this permission notice appear in supporting |
||||||
|
* documentation, and that the name of M.I.T. not be used in |
||||||
|
* advertising or publicity pertaining to distribution of the |
||||||
|
* software without specific, written prior permission. |
||||||
|
* M.I.T. makes no representations about the suitability of |
||||||
|
* this software for any purpose. It is provided "as is" |
||||||
|
* without express or implied warranty. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "setup.h" |
||||||
|
#include "ares_strdup.h" |
||||||
|
|
||||||
|
#ifndef HAVE_STRDUP |
||||||
|
char *ares_strdup(const char *s1) |
||||||
|
{ |
||||||
|
size_t sz; |
||||||
|
char * s2; |
||||||
|
|
||||||
|
if(s1) { |
||||||
|
sz = strlen(s1); |
||||||
|
if(sz < (size_t)-1) { |
||||||
|
sz++; |
||||||
|
if(sz < ((size_t)-1) / sizeof(char)) { |
||||||
|
s2 = malloc(sz * sizeof(char)); |
||||||
|
if(s2) { |
||||||
|
memcpy(s2, s1, sz * sizeof(char)); |
||||||
|
return s2; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return (char *)NULL; |
||||||
|
} |
||||||
|
#endif |
@ -0,0 +1,27 @@ |
|||||||
|
#ifndef HEADER_CARES_STRDUP_H |
||||||
|
#define HEADER_CARES_STRDUP_H |
||||||
|
|
||||||
|
/* $Id$ */ |
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
* |
||||||
|
* Permission to use, copy, modify, and distribute this |
||||||
|
* software and its documentation for any purpose and without |
||||||
|
* fee is hereby granted, provided that the above copyright |
||||||
|
* notice appear in all copies and that both that copyright |
||||||
|
* notice and this permission notice appear in supporting |
||||||
|
* documentation, and that the name of M.I.T. not be used in |
||||||
|
* advertising or publicity pertaining to distribution of the |
||||||
|
* software without specific, written prior permission. |
||||||
|
* M.I.T. makes no representations about the suitability of |
||||||
|
* this software for any purpose. It is provided "as is" |
||||||
|
* without express or implied warranty. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "setup.h" |
||||||
|
|
||||||
|
#ifndef HAVE_STRDUP |
||||||
|
extern char *ares_strdup(const char *s1); |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif /* HEADER_CARES_STRDUP_H */ |
@ -0,0 +1,126 @@ |
|||||||
|
#*************************************************************************** |
||||||
|
# $Id$ |
||||||
|
# |
||||||
|
# Copyright (C) 2008 by Daniel Stenberg et al |
||||||
|
# |
||||||
|
# Permission to use, copy, modify, and distribute this software and its |
||||||
|
# documentation for any purpose and without fee is hereby granted, provided |
||||||
|
# that the above copyright notice appear in all copies and that both that |
||||||
|
# copyright notice and this permission notice appear in supporting |
||||||
|
# documentation, and that the name of M.I.T. not be used in advertising or |
||||||
|
# publicity pertaining to distribution of the software without specific, |
||||||
|
# written prior permission. M.I.T. makes no representations about the |
||||||
|
# suitability of this software for any purpose. It is provided "as is" |
||||||
|
# without express or implied warranty. |
||||||
|
# |
||||||
|
#*************************************************************************** |
||||||
|
|
||||||
|
# File version for 'aclocal' use. Keep it a single number. |
||||||
|
# serial 1 |
||||||
|
|
||||||
|
|
||||||
|
dnl CARES_INCLUDES_STRING |
||||||
|
dnl ------------------------------------------------- |
||||||
|
dnl Set up variable with list of headers that must be |
||||||
|
dnl included when string.h is to be included. |
||||||
|
|
||||||
|
AC_DEFUN([CARES_INCLUDES_STRING], [ |
||||||
|
cares_includes_string="\ |
||||||
|
/* includes start */ |
||||||
|
#ifdef HAVE_SYS_TYPES_H |
||||||
|
# include <sys/types.h> |
||||||
|
#endif |
||||||
|
#ifdef HAVE_STRING_H |
||||||
|
# include <string.h> |
||||||
|
#endif |
||||||
|
/* includes end */" |
||||||
|
AC_CHECK_HEADERS( |
||||||
|
sys/types.h string.h, |
||||||
|
[], [], [$cares_includes_string]) |
||||||
|
]) |
||||||
|
|
||||||
|
|
||||||
|
dnl CARES_CHECK_FUNC_STRDUP |
||||||
|
dnl ------------------------------------------------- |
||||||
|
dnl Verify if strdup is available, prototyped, and |
||||||
|
dnl can be compiled. If all of these are true, and |
||||||
|
dnl usage has not been previously disallowed with |
||||||
|
dnl shell variable cares_disallow_strdup, then |
||||||
|
dnl HAVE_STRDUP will be defined. |
||||||
|
|
||||||
|
AC_DEFUN([CARES_CHECK_FUNC_STRDUP], [ |
||||||
|
AC_REQUIRE([CARES_INCLUDES_STRING])dnl |
||||||
|
# |
||||||
|
tst_links_strdup="unknown" |
||||||
|
tst_proto_strdup="unknown" |
||||||
|
tst_compi_strdup="unknown" |
||||||
|
tst_allow_strdup="unknown" |
||||||
|
# |
||||||
|
AC_MSG_CHECKING([if strdup can be linked]) |
||||||
|
AC_LINK_IFELSE([ |
||||||
|
AC_LANG_FUNC_LINK_TRY([strdup]) |
||||||
|
],[ |
||||||
|
AC_MSG_RESULT([yes]) |
||||||
|
tst_links_strdup="yes" |
||||||
|
],[ |
||||||
|
AC_MSG_RESULT([no]) |
||||||
|
tst_links_strdup="no" |
||||||
|
]) |
||||||
|
# |
||||||
|
if test "$tst_links_strdup" = "yes"; then |
||||||
|
AC_MSG_CHECKING([if strdup is prototyped]) |
||||||
|
AC_EGREP_CPP([strdup],[ |
||||||
|
$cares_includes_string |
||||||
|
],[ |
||||||
|
AC_MSG_RESULT([yes]) |
||||||
|
tst_proto_strdup="yes" |
||||||
|
],[ |
||||||
|
AC_MSG_RESULT([no]) |
||||||
|
tst_proto_strdup="no" |
||||||
|
]) |
||||||
|
fi |
||||||
|
# |
||||||
|
if test "$tst_proto_strdup" = "yes"; then |
||||||
|
AC_MSG_CHECKING([if strdup is compilable]) |
||||||
|
AC_COMPILE_IFELSE([ |
||||||
|
AC_LANG_PROGRAM([[ |
||||||
|
$cares_includes_string |
||||||
|
]],[[ |
||||||
|
if(0 != strdup(0)) |
||||||
|
return 1; |
||||||
|
]]) |
||||||
|
],[ |
||||||
|
AC_MSG_RESULT([yes]) |
||||||
|
tst_compi_strdup="yes" |
||||||
|
],[ |
||||||
|
AC_MSG_RESULT([no]) |
||||||
|
tst_compi_strdup="no" |
||||||
|
]) |
||||||
|
fi |
||||||
|
# |
||||||
|
if test "$tst_compi_strdup" = "yes"; then |
||||||
|
AC_MSG_CHECKING([if strdup usage allowed]) |
||||||
|
if test "x$cares_disallow_strdup" != "xyes"; then |
||||||
|
AC_MSG_RESULT([yes]) |
||||||
|
tst_allow_strdup="yes" |
||||||
|
else |
||||||
|
AC_MSG_RESULT([no]) |
||||||
|
tst_allow_strdup="no" |
||||||
|
fi |
||||||
|
fi |
||||||
|
# |
||||||
|
AC_MSG_CHECKING([if strdup might be used]) |
||||||
|
if test "$tst_links_strdup" = "yes" && |
||||||
|
test "$tst_proto_strdup" = "yes" && |
||||||
|
test "$tst_compi_strdup" = "yes" && |
||||||
|
test "$tst_allow_strdup" = "yes"; then |
||||||
|
AC_MSG_RESULT([yes]) |
||||||
|
AC_DEFINE_UNQUOTED(HAVE_STRDUP, 1, |
||||||
|
[Define to 1 if you have the strdup function.]) |
||||||
|
ac_cv_func_strdup="yes" |
||||||
|
else |
||||||
|
AC_MSG_RESULT([no]) |
||||||
|
ac_cv_func_strdup="no" |
||||||
|
fi |
||||||
|
]) |
||||||
|
|
Loading…
Reference in new issue