mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-25 20:50:31 +02:00
Use socklen_t for socket calls whenever it is
available and appropriate. This fixes some type problems on systems (recent linux) where int wasn't quite right. If HAVE_SOCKLEN_T isn't defined, then revert to int. This is a short-term fix, local to socket.c, and will be addressed more generally in the next major release. (ipv6_net_to_num): Change the argument type from "const char *" to "const unsigned char *" to match the sign of the s6_addr type. (ipv6_num_to_net): Change the argument type from "const char *" to "const unsigned char *" to match its usage. (s_scm_inet_pton): Use unsigned type when calling ipv6_net_to_num. (s_scm_inet_ntop): Use unsigned type when calling ipv6_net_to_num. (s_scm_getsockopt): Use scm_socklen_t rather than int. (s_scm_accept): Use socklen_t rather than int. (s_scm_getsockname): Use socklen_t rather than int. (s_scm_getpeername): Use socklen_t rather than int. (s_scm_recvfrom): Use socklen_t rather than int.
This commit is contained in:
parent
f5dcc0e8bb
commit
042121e055
1 changed files with 19 additions and 13 deletions
|
@ -73,6 +73,12 @@
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Temporary hack -- in the next major Guile release, this will be
|
||||||
|
handled more generally. */
|
||||||
|
#ifndef HAVE_SOCKLEN_T
|
||||||
|
typedef int socklen_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined (HAVE_UNIX_DOMAIN_SOCKETS) && !defined (SUN_LEN)
|
#if defined (HAVE_UNIX_DOMAIN_SOCKETS) && !defined (SUN_LEN)
|
||||||
#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
|
#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
|
||||||
+ strlen ((ptr)->sun_path))
|
+ strlen ((ptr)->sun_path))
|
||||||
|
@ -278,12 +284,12 @@ SCM_DEFINE (scm_inet_makeaddr, "inet-makeaddr", 2, 0, 0,
|
||||||
|
|
||||||
/* convert a 128 bit IPv6 address in network order to a host ordered
|
/* convert a 128 bit IPv6 address in network order to a host ordered
|
||||||
SCM integer. */
|
SCM integer. */
|
||||||
static SCM ipv6_net_to_num (const char *src)
|
static SCM ipv6_net_to_num (const unsigned char *src)
|
||||||
{
|
{
|
||||||
int big_digits = 128 / SCM_BITSPERDIG;
|
int big_digits = 128 / SCM_BITSPERDIG;
|
||||||
const int bytes_per_dig = SCM_BITSPERDIG / 8;
|
const int bytes_per_dig = SCM_BITSPERDIG / 8;
|
||||||
char addr[16];
|
unsigned char addr[16];
|
||||||
char *ptr = addr;
|
unsigned char *ptr = addr;
|
||||||
SCM result;
|
SCM result;
|
||||||
|
|
||||||
memcpy (addr, src, 16);
|
memcpy (addr, src, 16);
|
||||||
|
@ -317,7 +323,7 @@ static SCM ipv6_net_to_num (const char *src)
|
||||||
|
|
||||||
/* convert a host ordered SCM integer to a 128 bit IPv6 address in
|
/* convert a host ordered SCM integer to a 128 bit IPv6 address in
|
||||||
network order. */
|
network order. */
|
||||||
static void ipv6_num_to_net (SCM src, char *dst)
|
static void ipv6_num_to_net (SCM src, unsigned char *dst)
|
||||||
{
|
{
|
||||||
if (SCM_INUMP (src))
|
if (SCM_INUMP (src))
|
||||||
{
|
{
|
||||||
|
@ -364,7 +370,7 @@ SCM_DEFINE (scm_inet_pton, "inet-pton", 2, 0, 0,
|
||||||
{
|
{
|
||||||
int af;
|
int af;
|
||||||
char *src;
|
char *src;
|
||||||
char dst[16];
|
unsigned char dst[16];
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
SCM_VALIDATE_INUM_COPY (1, family, af);
|
SCM_VALIDATE_INUM_COPY (1, family, af);
|
||||||
|
@ -378,7 +384,7 @@ SCM_DEFINE (scm_inet_pton, "inet-pton", 2, 0, 0,
|
||||||
if (af == AF_INET)
|
if (af == AF_INET)
|
||||||
return scm_ulong2num (ntohl (*(uint32_t *) dst));
|
return scm_ulong2num (ntohl (*(uint32_t *) dst));
|
||||||
else
|
else
|
||||||
return ipv6_net_to_num ((char *) dst);
|
return ipv6_net_to_num (dst);
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
#endif
|
#endif
|
||||||
|
@ -403,7 +409,7 @@ SCM_DEFINE (scm_inet_ntop, "inet-ntop", 2, 0, 0,
|
||||||
#else
|
#else
|
||||||
char dst[46];
|
char dst[46];
|
||||||
#endif
|
#endif
|
||||||
char addr6[16];
|
unsigned char addr6[16];
|
||||||
|
|
||||||
SCM_VALIDATE_INUM_COPY (1, family, af);
|
SCM_VALIDATE_INUM_COPY (1, family, af);
|
||||||
SCM_ASSERT_RANGE (1, family, af == AF_INET || af == AF_INET6);
|
SCM_ASSERT_RANGE (1, family, af == AF_INET || af == AF_INET6);
|
||||||
|
@ -497,10 +503,10 @@ SCM_DEFINE (scm_getsockopt, "getsockopt", 3, 0, 0,
|
||||||
/* size of optval is the largest supported option. */
|
/* size of optval is the largest supported option. */
|
||||||
#ifdef HAVE_STRUCT_LINGER
|
#ifdef HAVE_STRUCT_LINGER
|
||||||
char optval[sizeof (struct linger)];
|
char optval[sizeof (struct linger)];
|
||||||
int optlen = sizeof (struct linger);
|
socklen_t optlen = sizeof (struct linger);
|
||||||
#else
|
#else
|
||||||
char optval[sizeof (size_t)];
|
char optval[sizeof (size_t)];
|
||||||
int optlen = sizeof (size_t);
|
socklen_t optlen = sizeof (size_t);
|
||||||
#endif
|
#endif
|
||||||
int ilevel;
|
int ilevel;
|
||||||
int ioptname;
|
int ioptname;
|
||||||
|
@ -1010,7 +1016,7 @@ SCM_DEFINE (scm_accept, "accept", 1, 0, 0,
|
||||||
int newfd;
|
int newfd;
|
||||||
SCM address;
|
SCM address;
|
||||||
SCM newsock;
|
SCM newsock;
|
||||||
int addr_size = MAX_ADDR_SIZE;
|
socklen_t addr_size = MAX_ADDR_SIZE;
|
||||||
char max_addr[MAX_ADDR_SIZE];
|
char max_addr[MAX_ADDR_SIZE];
|
||||||
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
||||||
|
|
||||||
|
@ -1034,7 +1040,7 @@ SCM_DEFINE (scm_getsockname, "getsockname", 1, 0, 0,
|
||||||
#define FUNC_NAME s_scm_getsockname
|
#define FUNC_NAME s_scm_getsockname
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
int addr_size = MAX_ADDR_SIZE;
|
socklen_t addr_size = MAX_ADDR_SIZE;
|
||||||
char max_addr[MAX_ADDR_SIZE];
|
char max_addr[MAX_ADDR_SIZE];
|
||||||
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
||||||
|
|
||||||
|
@ -1056,7 +1062,7 @@ SCM_DEFINE (scm_getpeername, "getpeername", 1, 0, 0,
|
||||||
#define FUNC_NAME s_scm_getpeername
|
#define FUNC_NAME s_scm_getpeername
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
int addr_size = MAX_ADDR_SIZE;
|
socklen_t addr_size = MAX_ADDR_SIZE;
|
||||||
char max_addr[MAX_ADDR_SIZE];
|
char max_addr[MAX_ADDR_SIZE];
|
||||||
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
||||||
|
|
||||||
|
@ -1170,7 +1176,7 @@ SCM_DEFINE (scm_recvfrom, "recvfrom!", 2, 3, 0,
|
||||||
int offset;
|
int offset;
|
||||||
int cend;
|
int cend;
|
||||||
SCM address;
|
SCM address;
|
||||||
int addr_size = MAX_ADDR_SIZE;
|
socklen_t addr_size = MAX_ADDR_SIZE;
|
||||||
char max_addr[MAX_ADDR_SIZE];
|
char max_addr[MAX_ADDR_SIZE];
|
||||||
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue