no getaddrinfo means no getnameinfo, either

svn: r1725
This commit is contained in:
Matthew Flatt 2005-12-31 02:52:53 +00:00
parent 28a7caa6bd
commit f60df3fbe5
8 changed files with 41 additions and 12 deletions

View File

@ -390,6 +390,7 @@ scheme_add_fd_eventmask
scheme_security_check_file
scheme_security_check_network
scheme_get_host_address
scheme_getnameinfo
scheme_get_port_file_descriptor
scheme_get_port_socket
scheme_set_type_printer

View File

@ -397,6 +397,7 @@ scheme_add_fd_eventmask
scheme_security_check_file
scheme_security_check_network
scheme_get_host_address
scheme_getnameinfo
scheme_get_port_file_descriptor
scheme_get_port_socket
scheme_set_type_printer

View File

@ -382,6 +382,7 @@ EXPORTS
scheme_security_check_file
scheme_security_check_network
scheme_get_host_address
scheme_getnameinfo
scheme_get_port_file_descriptor
scheme_get_port_socket
scheme_set_type_printer

View File

@ -2229,6 +2229,27 @@ static Scheme_Object *tcp_listener_p(int argc, Scheme_Object *argv[])
: scheme_false);
}
void scheme_getnameinfo(void *sa, int salen,
char *host, int hostlen,
char *serv, int servlen)
{
#ifdef HAVE_GETADDRINFO
getnameinfo(sa, salen, host, hostlen, serv, servlen,
NI_NUMERICHOST | NI_NUMERICSERV);
#else
if (host) {
unsigned char *b;
b = (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr;
sprintf(host, "%d.%d.%d.%d", b[0], b[1], b[2], b[3]);
}
if (serv) {
int id;
id = ntohs(((struct sockaddr_in *)sa)->sin_port);
sprintf(serv, "%d", id);
}
#endif
}
static Scheme_Object *tcp_addresses(int argc, Scheme_Object *argv[])
{
#ifdef USE_TCP
@ -2280,16 +2301,14 @@ static Scheme_Object *tcp_addresses(int argc, Scheme_Object *argv[])
}
there_len = l;
getnameinfo((struct sockaddr *)here, here_len,
host_buf, sizeof(host_buf),
NULL, 0,
NI_NUMERICHOST | NI_NUMERICSERV);
scheme_getnameinfo((struct sockaddr *)here, here_len,
host_buf, sizeof(host_buf),
NULL, 0);
result[0] = scheme_make_utf8_string(host_buf);
getnameinfo((struct sockaddr *)there, there_len,
host_buf, sizeof(host_buf),
NULL, 0,
NI_NUMERICHOST | NI_NUMERICSERV);
scheme_getnameinfo((struct sockaddr *)there, there_len,
host_buf, sizeof(host_buf),
NULL, 0);
result[1] = scheme_make_utf8_string(host_buf);
}
# else
@ -3100,10 +3119,9 @@ static int do_udp_recv(const char *name, Scheme_UDP *udp, char *bstr, long start
v[0] = scheme_make_integer(x);
getnameinfo((struct sockaddr *)src_addr, asize,
host_buf, sizeof(host_buf),
svc_buf, sizeof(svc_buf),
NI_NUMERICHOST | NI_NUMERICSERV);
scheme_getnameinfo((struct sockaddr *)src_addr, asize,
host_buf, sizeof(host_buf),
svc_buf, sizeof(svc_buf));
if (udp->previous_from_addr) {
mzchar *s;

View File

@ -778,6 +778,9 @@ MZ_EXTERN void scheme_security_check_network(const char *who, const char *host,
MZ_EXTERN struct mz_addrinfo *scheme_get_host_address(const char *address, int id, int *err,
int family, int passive, int tcp);
MZ_EXTERN void scheme_getnameinfo(void *sa, int salen,
char *host, int hostlen,
char *serv, int servlen);
MZ_EXTERN int scheme_get_port_file_descriptor(Scheme_Object *p, long *_fd);
MZ_EXTERN int scheme_get_port_socket(Scheme_Object *p, long *_s);

View File

@ -649,6 +649,9 @@ void (*scheme_security_check_file)(const char *who, const char *filename, int gu
void (*scheme_security_check_network)(const char *who, const char *host, int port, int client);
struct mz_addrinfo *(*scheme_get_host_address)(const char *address, int id, int *err,
int family, int passive, int tcp);
void (*scheme_getnameinfo)(void *sa, int salen,
char *host, int hostlen,
char *serv, int servlen);
int (*scheme_get_port_file_descriptor)(Scheme_Object *p, long *_fd);
int (*scheme_get_port_socket)(Scheme_Object *p, long *_s);
void (*scheme_set_type_printer)(Scheme_Type stype, Scheme_Type_Printer printer);

View File

@ -439,6 +439,7 @@
scheme_extension_table->scheme_security_check_file = scheme_security_check_file;
scheme_extension_table->scheme_security_check_network = scheme_security_check_network;
scheme_extension_table->scheme_get_host_address = scheme_get_host_address;
scheme_extension_table->scheme_getnameinfo = scheme_getnameinfo;
scheme_extension_table->scheme_get_port_file_descriptor = scheme_get_port_file_descriptor;
scheme_extension_table->scheme_get_port_socket = scheme_get_port_socket;
scheme_extension_table->scheme_set_type_printer = scheme_set_type_printer;

View File

@ -439,6 +439,7 @@
#define scheme_security_check_file (scheme_extension_table->scheme_security_check_file)
#define scheme_security_check_network (scheme_extension_table->scheme_security_check_network)
#define scheme_get_host_address (scheme_extension_table->scheme_get_host_address)
#define scheme_getnameinfo (scheme_extension_table->scheme_getnameinfo)
#define scheme_get_port_file_descriptor (scheme_extension_table->scheme_get_port_file_descriptor)
#define scheme_get_port_socket (scheme_extension_table->scheme_get_port_socket)
#define scheme_set_type_printer (scheme_extension_table->scheme_set_type_printer)