当前位置: 技术问答>linux和unix
不显示删除回复显示所有回复显示星级回复显示得分回复 ubuntu10.04 安装 mysql4.0 源码出错,提示gethostbyname_r的参数数量不对
来源: 互联网 发布时间:2016-10-04
本文导语: 以下是mysql的源码: #if defined(HAVE_GETHOSTBYNAME_R) #if defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) struct hostent *my_gethostbyname_r(const char *name, struct hostent *result, char *buffer, ...
以下是mysql的源码:
里面的gethostbyname_r 有两种类型,一种是3个参数的, 一种是5个参数的,可是我在linux下查了一下,只有5个参数的那形式,没有3个参数的形式。 这个是怎么回事啊?
#if defined(HAVE_GETHOSTBYNAME_R)
#if defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)
struct hostent *my_gethostbyname_r(const char *name,
struct hostent *result, char *buffer,
int buflen, int *h_errnop)
{
struct hostent *hp;
DBUG_ASSERT((size_t) buflen >= sizeof(*result));
if (gethostbyname_r(name,result, buffer, (size_t) buflen, &hp, h_errnop))
return 0;
return hp;
}
#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT)
struct hostent *my_gethostbyname_r(const char *name,
struct hostent *result, char *buffer,
int buflen, int *h_errnop)
{
if (gethostbyname_r(name,result,(struct hostent_data *) buffer) == -1)
{
*h_errnop= errno;
return 0;
}
return result;
}
#else
/* gethostbyname_r with similar interface as gethostbyname() */
struct hostent *my_gethostbyname_r(const char *name,
struct hostent *result, char *buffer,
int buflen, int *h_errnop)
{
struct hostent *hp;
DBUG_ASSERT(buflen >= sizeof(struct hostent_data));
hp= gethostbyname_r(name,result,(struct hostent_data *) buffer);
*h_errnop= errno;
return hp;
}
#endif /* GLIBC2_STYLE_GETHOSTBYNAME_R */
里面的gethostbyname_r 有两种类型,一种是3个参数的, 一种是5个参数的,可是我在linux下查了一下,只有5个参数的那形式,没有3个参数的形式。 这个是怎么回事啊?
|
mysql的代码这么写,是为了兼容不同的操作系统。
AIX的gethostbyname_r就是三个参数
#include netdb.h>
int gethostbyname_r(Name, Htent, Ht_data)
const char *Name, struct hostent *Htent, struct hostent_data *Ht_data;
AIX的gethostbyname_r就是三个参数
#include netdb.h>
int gethostbyname_r(Name, Htent, Ht_data)
const char *Name, struct hostent *Htent, struct hostent_data *Ht_data;