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>
|
||||
#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)
|
||||
#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->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
|
||||
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;
|
||||
const int bytes_per_dig = SCM_BITSPERDIG / 8;
|
||||
char addr[16];
|
||||
char *ptr = addr;
|
||||
unsigned char addr[16];
|
||||
unsigned char *ptr = addr;
|
||||
SCM result;
|
||||
|
||||
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
|
||||
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))
|
||||
{
|
||||
|
@ -364,7 +370,7 @@ SCM_DEFINE (scm_inet_pton, "inet-pton", 2, 0, 0,
|
|||
{
|
||||
int af;
|
||||
char *src;
|
||||
char dst[16];
|
||||
unsigned char dst[16];
|
||||
int rv;
|
||||
|
||||
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)
|
||||
return scm_ulong2num (ntohl (*(uint32_t *) dst));
|
||||
else
|
||||
return ipv6_net_to_num ((char *) dst);
|
||||
return ipv6_net_to_num (dst);
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
#endif
|
||||
|
@ -403,7 +409,7 @@ SCM_DEFINE (scm_inet_ntop, "inet-ntop", 2, 0, 0,
|
|||
#else
|
||||
char dst[46];
|
||||
#endif
|
||||
char addr6[16];
|
||||
unsigned char addr6[16];
|
||||
|
||||
SCM_VALIDATE_INUM_COPY (1, family, af);
|
||||
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. */
|
||||
#ifdef HAVE_STRUCT_LINGER
|
||||
char optval[sizeof (struct linger)];
|
||||
int optlen = sizeof (struct linger);
|
||||
socklen_t optlen = sizeof (struct linger);
|
||||
#else
|
||||
char optval[sizeof (size_t)];
|
||||
int optlen = sizeof (size_t);
|
||||
socklen_t optlen = sizeof (size_t);
|
||||
#endif
|
||||
int ilevel;
|
||||
int ioptname;
|
||||
|
@ -1010,7 +1016,7 @@ SCM_DEFINE (scm_accept, "accept", 1, 0, 0,
|
|||
int newfd;
|
||||
SCM address;
|
||||
SCM newsock;
|
||||
int addr_size = MAX_ADDR_SIZE;
|
||||
socklen_t addr_size = MAX_ADDR_SIZE;
|
||||
char max_addr[MAX_ADDR_SIZE];
|
||||
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
|
||||
{
|
||||
int fd;
|
||||
int addr_size = MAX_ADDR_SIZE;
|
||||
socklen_t addr_size = MAX_ADDR_SIZE;
|
||||
char max_addr[MAX_ADDR_SIZE];
|
||||
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
|
||||
{
|
||||
int fd;
|
||||
int addr_size = MAX_ADDR_SIZE;
|
||||
socklen_t addr_size = MAX_ADDR_SIZE;
|
||||
char max_addr[MAX_ADDR_SIZE];
|
||||
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
||||
|
||||
|
@ -1170,7 +1176,7 @@ SCM_DEFINE (scm_recvfrom, "recvfrom!", 2, 3, 0,
|
|||
int offset;
|
||||
int cend;
|
||||
SCM address;
|
||||
int addr_size = MAX_ADDR_SIZE;
|
||||
socklen_t addr_size = MAX_ADDR_SIZE;
|
||||
char max_addr[MAX_ADDR_SIZE];
|
||||
struct sockaddr *addr = (struct sockaddr *) max_addr;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue