[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
guile/guile-core/libguile ChangeLog net_db.c ne...
From: |
Gary Houston |
Subject: |
guile/guile-core/libguile ChangeLog net_db.c ne... |
Date: |
Sun, 22 Apr 2001 09:05:22 -0700 |
CVSROOT: /cvs
Module name: guile
Changes by: Gary Houston <> 01/04/22 09:05:21
Modified files:
guile-core/libguile: ChangeLog net_db.c net_db.h socket.c
socket.h
Log message:
* net_db.c: remove bogus "close" declaration.
(inet_aton declaration, scm_inet_aton, scm_inet_ntoa,
scm_inet_netof, scm_lnaof, scm_inet_makeaddr, INADDR_ANY etc.):
moved to socket.c.
* net_db.h: declarations moved too.
* socket.c (scm_htonl, scm_ntohl): use uint32_t instead of unsigned
long.
(ipv6_net_to_num, ipv6_num_to_net): new static procedures.
(VALIDATE_INET6): new macro.
(scm_inet_pton, scm_inet_ntop): new procedures, implementing
inet-pton and inet-ntop.
(scm_fill_sockaddr): use VALIDATE_INET6 and ipv6_num_to_net.
(scm_addr_vector): use ipv6_net_to_num.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/libguile/ChangeLog.diff?cvsroot=OldCVS&tr1=1.1363&tr2=1.1364&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/libguile/net_db.c.diff?cvsroot=OldCVS&tr1=1.57&tr2=1.58&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/libguile/net_db.h.diff?cvsroot=OldCVS&tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/libguile/socket.c.diff?cvsroot=OldCVS&tr1=1.70&tr2=1.71&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/libguile/socket.h.diff?cvsroot=OldCVS&tr1=1.11&tr2=1.12&r1=text&r2=text
Patches:
Index: guile/guile-core/libguile/ChangeLog
diff -u guile/guile-core/libguile/ChangeLog:1.1363
guile/guile-core/libguile/ChangeLog:1.1364
--- guile/guile-core/libguile/ChangeLog:1.1363 Sat Apr 21 14:50:06 2001
+++ guile/guile-core/libguile/ChangeLog Sun Apr 22 09:05:21 2001
@@ -1,3 +1,20 @@
+2001-04-22 Gary Houston <address@hidden>
+
+ * net_db.c: remove bogus "close" declaration.
+ (inet_aton declaration, scm_inet_aton, scm_inet_ntoa,
+ scm_inet_netof, scm_lnaof, scm_inet_makeaddr, INADDR_ANY etc.):
+ moved to socket.c.
+ * net_db.h: declarations moved too.
+
+ * socket.c (scm_htonl, scm_ntohl): use uint32_t instead of unsigned
+ long.
+ (ipv6_net_to_num, ipv6_num_to_net): new static procedures.
+ (VALIDATE_INET6): new macro.
+ (scm_inet_pton, scm_inet_ntop): new procedures, implementing
+ inet-pton and inet-ntop.
+ (scm_fill_sockaddr): use VALIDATE_INET6 and ipv6_num_to_net.
+ (scm_addr_vector): use ipv6_net_to_num.
+
2001-04-21 Dirk Herrmann <address@hidden>
* eq.c (scm_equal_p), ramap.c (scm_init_ramap): Don't compute the
Index: guile/guile-core/libguile/net_db.c
diff -u guile/guile-core/libguile/net_db.c:1.57
guile/guile-core/libguile/net_db.c:1.58
--- guile/guile-core/libguile/net_db.c:1.57 Tue Apr 10 00:57:05 2001
+++ guile/guile-core/libguile/net_db.c Sun Apr 22 09:05:21 2001
@@ -71,122 +71,12 @@
#include <netinet/in.h>
#include <arpa/inet.h>
-
-
-#ifndef STDC_HEADERS
-int close ();
-#endif /* STDC_HEADERS */
-
-#ifndef HAVE_INET_ATON
-/* for our definition in inet_aton.c, not usually needed. */
-extern int inet_aton ();
-#endif
-
#ifndef HAVE_H_ERRNO
/* h_errno not found in netdb.h, maybe this will help. */
extern int h_errno;
#endif
-
-SCM_DEFINE (scm_inet_aton, "inet-aton", 1, 0, 0,
- (SCM address),
- "Converts a string containing an Internet host address in the\n"
- "traditional dotted decimal notation into an integer.\n"
- "@lisp\n"
- "(inet-aton \"127.0.0.1\") @result{} 2130706433\n"
- "@end lisp")
-#define FUNC_NAME s_scm_inet_aton
-{
- struct in_addr soka;
-
- SCM_VALIDATE_STRING (1, address);
- SCM_STRING_COERCE_0TERMINATION_X (address);
- if (inet_aton (SCM_STRING_CHARS (address), &soka) == 0)
- SCM_MISC_ERROR ("bad address", SCM_EOL);
- return scm_ulong2num (ntohl (soka.s_addr));
-}
-#undef FUNC_NAME
-
-
-SCM_DEFINE (scm_inet_ntoa, "inet-ntoa", 1, 0, 0,
- (SCM inetid),
- "Converts an integer Internet host address into a string with\n"
- "the traditional dotted decimal representation.\n"
- "@lisp\n"
- "(inet-ntoa 2130706433) @result{} \"127.0.0.1\"\n"
- "@end lisp")
-#define FUNC_NAME s_scm_inet_ntoa
-{
- struct in_addr addr;
- char *s;
- SCM answer;
- addr.s_addr = htonl (SCM_NUM2ULONG (1, inetid));
- s = inet_ntoa (addr);
- answer = scm_makfromstr (s, strlen (s), 0);
- return answer;
-}
-#undef FUNC_NAME
-
-#ifdef HAVE_INET_NETOF
-SCM_DEFINE (scm_inet_netof, "inet-netof", 1, 0, 0,
- (SCM address),
- "Return the network number part of the given integer Internet\n"
- "address.\n"
- "@lisp\n"
- "(inet-netof 2130706433) @result{} 127\n"
- "@end lisp")
-#define FUNC_NAME s_scm_inet_netof
-{
- struct in_addr addr;
- addr.s_addr = htonl (SCM_NUM2ULONG (1, address));
- return scm_ulong2num ((unsigned long) inet_netof (addr));
-}
-#undef FUNC_NAME
-#endif
-#ifdef HAVE_INET_LNAOF
-SCM_DEFINE (scm_lnaof, "inet-lnaof", 1, 0, 0,
- (SCM address),
- "Return the local-address-with-network part of the given\n"
- "Internet address.\n"
- "@lisp\n"
- "(inet-lnaof 2130706433) @result{} 1\n"
- "@end lisp")
-#define FUNC_NAME s_scm_lnaof
-{
- struct in_addr addr;
- addr.s_addr = htonl (SCM_NUM2ULONG (1, address));
- return scm_ulong2num ((unsigned long) inet_lnaof (addr));
-}
-#undef FUNC_NAME
-#endif
-
-#ifdef HAVE_INET_MAKEADDR
-SCM_DEFINE (scm_inet_makeaddr, "inet-makeaddr", 2, 0, 0,
- (SCM net, SCM lna),
- "Makes an Internet host address by combining the network number\n"
- "@var{net} with the local-address-within-network number\n"
- "@var{lna}.\n"
- "@lisp\n"
- "(inet-makeaddr 127 1) @result{} 2130706433\n"
- "@end lisp")
-#define FUNC_NAME s_scm_inet_makeaddr
-{
- struct in_addr addr;
- unsigned long netnum;
- unsigned long lnanum;
-
-#if 0 /* GJB:FIXME:: */
- SCM_VALIDATE_INUM_COPY (1,net,netnum);
- SCM_VALIDATE_INUM_COPY (2,lna,lnanum);
-#else
- netnum = SCM_NUM2ULONG (1, net);
- lnanum = SCM_NUM2ULONG (2, lna);
-#endif
- addr = inet_makeaddr (netnum, lnanum);
- return scm_ulong2num (ntohl (addr.s_addr));
-}
-#undef FUNC_NAME
-#endif
+
SCM_SYMBOL (scm_host_not_found_key, "host-not-found");
SCM_SYMBOL (scm_try_again_key, "try-again");
@@ -554,19 +444,6 @@
void
scm_init_net_db ()
{
-#ifdef INADDR_ANY
- scm_sysintern ("INADDR_ANY", scm_ulong2num (INADDR_ANY));
-#endif
-#ifdef INADDR_BROADCAST
- scm_sysintern ("INADDR_BROADCAST", scm_ulong2num (INADDR_BROADCAST));
-#endif
-#ifdef INADDR_NONE
- scm_sysintern ("INADDR_NONE", scm_ulong2num (INADDR_NONE));
-#endif
-#ifdef INADDR_LOOPBACK
- scm_sysintern ("INADDR_LOOPBACK", scm_ulong2num (INADDR_LOOPBACK));
-#endif
-
scm_add_feature ("net-db");
#ifndef SCM_MAGIC_SNARFER
#include "libguile/net_db.x"
Index: guile/guile-core/libguile/net_db.h
diff -u guile/guile-core/libguile/net_db.h:1.6
guile/guile-core/libguile/net_db.h:1.7
--- guile/guile-core/libguile/net_db.h:1.6 Mon Jun 12 05:28:23 2000
+++ guile/guile-core/libguile/net_db.h Sun Apr 22 09:05:21 2001
@@ -1,8 +1,8 @@
/* classes: h_files */
-#ifndef NETDBH
-#define NETDBH
-/* Copyright (C) 1995, 2000 Free Software Foundation, Inc.
+#ifndef SCM_NETDBH
+#define SCM_NETDBH
+/* Copyright (C) 1995, 2000, 2001 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -51,12 +51,6 @@
-extern SCM scm_gethost (SCM name);
-extern SCM scm_inet_aton (SCM address);
-extern SCM scm_inet_ntoa (SCM inetid);
-extern SCM scm_inet_netof (SCM address);
-extern SCM scm_lnaof (SCM address);
-extern SCM scm_inet_makeaddr (SCM net, SCM lna);
extern SCM scm_getnet (SCM name);
extern SCM scm_getproto (SCM name);
extern SCM scm_getserv (SCM name, SCM proto);
@@ -66,7 +60,7 @@
extern SCM scm_setserv (SCM arg);
extern void scm_init_net_db (void);
-#endif /* NETDBH */
+#endif /* SCM_NETDBH */
/*
Local Variables:
Index: guile/guile-core/libguile/socket.c
diff -u guile/guile-core/libguile/socket.c:1.70
guile/guile-core/libguile/socket.c:1.71
--- guile/guile-core/libguile/socket.c:1.70 Sat Apr 21 12:10:15 2001
+++ guile/guile-core/libguile/socket.c Sun Apr 22 09:05:21 2001
@@ -119,11 +119,12 @@
SCM_DEFINE (scm_htonl, "htonl", 1, 0, 0,
(SCM in),
"Return a new integer from @var{value} by converting from host\n"
- "to network order. @var{value} must be within the range of a C\n"
- "unsigned long integer.")
+ "to network order. @var{value} must be within the range of a\n"
+ "32 bit unsigned integer.")
#define FUNC_NAME s_scm_htonl
{
- unsigned long c_in = SCM_NUM2ULONG (1, in);
+ uint32_t c_in = SCM_NUM2ULONG (1, in);
+
return scm_ulong2num (htonl (c_in));
}
#undef FUNC_NAME
@@ -132,14 +133,278 @@
(SCM in),
"Return a new integer from @var{value} by converting from\n"
"network to host order. @var{value} must be within the range of\n"
- "a C unsigned long integer.")
+ "a 32 bit unsigned integer.")
#define FUNC_NAME s_scm_ntohl
{
- unsigned long c_in = SCM_NUM2ULONG (1, in);
+ uint32_t c_in = SCM_NUM2ULONG (1, in);
+
return scm_ulong2num (ntohl (c_in));
}
#undef FUNC_NAME
+#ifndef HAVE_INET_ATON
+/* for our definition in inet_aton.c, not usually needed. */
+extern int inet_aton ();
+#endif
+
+SCM_DEFINE (scm_inet_aton, "inet-aton", 1, 0, 0,
+ (SCM address),
+ "Converts a string containing an Internet host address in the\n"
+ "traditional dotted decimal notation into an integer.\n"
+ "@lisp\n"
+ "(inet-aton \"127.0.0.1\") @result{} 2130706433\n"
+ "@end lisp")
+#define FUNC_NAME s_scm_inet_aton
+{
+ struct in_addr soka;
+
+ SCM_VALIDATE_STRING (1, address);
+ SCM_STRING_COERCE_0TERMINATION_X (address);
+ if (inet_aton (SCM_STRING_CHARS (address), &soka) == 0)
+ SCM_MISC_ERROR ("bad address", SCM_EOL);
+ return scm_ulong2num (ntohl (soka.s_addr));
+}
+#undef FUNC_NAME
+
+
+SCM_DEFINE (scm_inet_ntoa, "inet-ntoa", 1, 0, 0,
+ (SCM inetid),
+ "Converts an integer Internet host address into a string with\n"
+ "the traditional dotted decimal representation.\n"
+ "@lisp\n"
+ "(inet-ntoa 2130706433) @result{} \"127.0.0.1\"\n"
+ "@end lisp")
+#define FUNC_NAME s_scm_inet_ntoa
+{
+ struct in_addr addr;
+ char *s;
+ SCM answer;
+ addr.s_addr = htonl (SCM_NUM2ULONG (1, inetid));
+ s = inet_ntoa (addr);
+ answer = scm_makfromstr (s, strlen (s), 0);
+ return answer;
+}
+#undef FUNC_NAME
+
+#ifdef HAVE_INET_NETOF
+SCM_DEFINE (scm_inet_netof, "inet-netof", 1, 0, 0,
+ (SCM address),
+ "Return the network number part of the given integer Internet\n"
+ "address.\n"
+ "@lisp\n"
+ "(inet-netof 2130706433) @result{} 127\n"
+ "@end lisp")
+#define FUNC_NAME s_scm_inet_netof
+{
+ struct in_addr addr;
+ addr.s_addr = htonl (SCM_NUM2ULONG (1, address));
+ return scm_ulong2num ((unsigned long) inet_netof (addr));
+}
+#undef FUNC_NAME
+#endif
+
+#ifdef HAVE_INET_LNAOF
+SCM_DEFINE (scm_lnaof, "inet-lnaof", 1, 0, 0,
+ (SCM address),
+ "Return the local-address-with-network part of the given\n"
+ "Internet address.\n"
+ "@lisp\n"
+ "(inet-lnaof 2130706433) @result{} 1\n"
+ "@end lisp")
+#define FUNC_NAME s_scm_lnaof
+{
+ struct in_addr addr;
+ addr.s_addr = htonl (SCM_NUM2ULONG (1, address));
+ return scm_ulong2num ((unsigned long) inet_lnaof (addr));
+}
+#undef FUNC_NAME
+#endif
+
+#ifdef HAVE_INET_MAKEADDR
+SCM_DEFINE (scm_inet_makeaddr, "inet-makeaddr", 2, 0, 0,
+ (SCM net, SCM lna),
+ "Makes an Internet host address by combining the network number\n"
+ "@var{net} with the local-address-within-network number\n"
+ "@var{lna}.\n"
+ "@lisp\n"
+ "(inet-makeaddr 127 1) @result{} 2130706433\n"
+ "@end lisp")
+#define FUNC_NAME s_scm_inet_makeaddr
+{
+ struct in_addr addr;
+ unsigned long netnum;
+ unsigned long lnanum;
+
+ netnum = SCM_NUM2ULONG (1, net);
+ lnanum = SCM_NUM2ULONG (2, lna);
+ addr = inet_makeaddr (netnum, lnanum);
+ return scm_ulong2num (ntohl (addr.s_addr));
+}
+#undef FUNC_NAME
+#endif
+
+/* flip a 128 bit IPv6 address between host and network order. */
+#ifdef WORDS_BIGENDIAN
+#define FLIP_NET_HOST_128(addr)
+#else
+#define FLIP_NET_HOST_128(addr)\
+{\
+ int i;\
+ \
+ for (i = 0; i < 8; i++)\
+ {\
+ char c = (addr)[i];\
+ \
+ (addr)[i] = (addr)[15 - i];\
+ (addr)[15 - i] = c;\
+ }\
+}
+#endif
+
+/* convert a 128 bit IPv6 address in network order to a host ordered
+ SCM integer. */
+static SCM ipv6_net_to_num (const char *src)
+{
+ int big_digits = 128 / SCM_BITSPERDIG;
+ const int bytes_per_dig = SCM_BITSPERDIG / 8;
+ char addr[16];
+ char *ptr = addr;
+ SCM result;
+
+ memcpy (addr, src, 16);
+ /* get rid of leading zeros. */
+ while (big_digits > 0)
+ {
+ long test = 0;
+
+ memcpy (&test, ptr, bytes_per_dig);
+ if (test != 0)
+ break;
+ ptr += bytes_per_dig;
+ big_digits--;
+ }
+ FLIP_NET_HOST_128 (addr);
+ if (big_digits * bytes_per_dig <= sizeof (unsigned long))
+ {
+ /* this is just so that we use INUM where possible. */
+ unsigned long l_addr;
+
+ memcpy (&l_addr, addr, sizeof (unsigned long));
+ result = scm_ulong2num (l_addr);
+ }
+ else
+ {
+ result = scm_mkbig (big_digits, 0);
+ memcpy (SCM_BDIGITS (result), addr, big_digits * bytes_per_dig);
+ }
+ return result;
+}
+
+/* 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)
+{
+ if (SCM_INUMP (src))
+ {
+ uint32_t addr = htonl (SCM_INUM (src));
+
+ memset (dst, 0, 12);
+ memcpy (dst + 12, &addr, 4);
+ }
+ else
+ {
+ memset (dst, 0, 16);
+ memcpy (dst, SCM_BDIGITS (src),
+ SCM_NUMDIGS (src) * (SCM_BITSPERDIG / 8));
+ FLIP_NET_HOST_128 (dst);
+ }
+}
+
+/* check that an SCM variable contains an IPv6 integer address. */
+#define VALIDATE_INET6(which_arg, address)\
+ if (SCM_INUMP (address))\
+ SCM_ASSERT_RANGE (which_arg, address, SCM_INUM (address) >= 0);\
+ else\
+ {\
+ SCM_VALIDATE_BIGINT (which_arg, address);\
+ SCM_ASSERT_RANGE (which_arg, address,\
+ !SCM_BIGSIGN (address)\
+ && (SCM_BITSPERDIG\
+ * SCM_NUMDIGS (address) <= 128));\
+ }
+
+#ifdef HAVE_INET_PTON
+SCM_DEFINE (scm_inet_pton, "inet-pton", 2, 0, 0,
+ (SCM family, SCM address),
+ "Convert a printable string network address into\n"
+ "an integer. Note that unlike the C version of this function,\n"
+ "the result is an integer with normal host byte ordering.\n"
+ "@var{family} can be @code{AF_INET} or @code{AF_INET6}. e.g.,\n"
+ "@lisp\n"
+ "(inet-pton AF_INET "127.0.0.1") @result{} 2130706433\n"
+ "(inet-pton AF_INET6 "::1") @result{} 1\n"
+ "@end lisp")
+#define FUNC_NAME s_scm_inet_pton
+{
+ int af;
+ char *src;
+ char dst[16];
+ int rv;
+
+ SCM_VALIDATE_INUM_COPY (1, family, af);
+ SCM_ASSERT_RANGE (1, family, af == AF_INET || af == AF_INET6);
+ SCM_VALIDATE_STRING_COPY (2, address, src);
+ rv = inet_pton (af, src, dst);
+ if (rv == -1)
+ SCM_SYSERROR;
+ else if (rv == 0)
+ SCM_MISC_ERROR ("Bad address", SCM_EOL);
+ if (af == AF_INET)
+ return scm_ulong2num (ntohl (*(uint32_t *) dst));
+ else
+ return ipv6_net_to_num ((char *) dst);
+}
+#undef FUNC_NAME
+#endif
+
+#ifdef HAVE_INET_NTOP
+SCM_DEFINE (scm_inet_ntop, "inet-ntop", 2, 0, 0,
+ (SCM family, SCM address),
+ "Convert an integer network address into a printable string.\n"
+ "Note that unlike the C version of this function,\n"
+ "the input is an integer with normal host byte ordering.\n"
+ "@var{family} can be @code{AF_INET} or @code{AF_INET6}. e.g.,\n"
+ "@lisp\n"
+ "(inet-ntop AF_INET 2130706433) @result{} "127.0.0.1"\n"
+ "(inet-ntop AF_INET6 (- (expt 2 128) 1)) @result{}\n"
+ "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff\n"
+ "@end lisp")
+#define FUNC_NAME s_scm_inet_ntop
+{
+ int af;
+#ifdef INET6_ADDRSTRLEN
+ char dst[INET6_ADDRSTRLEN];
+#else
+ char dst[46];
+#endif
+ char addr6[16];
+
+ SCM_VALIDATE_INUM_COPY (1, family, af);
+ SCM_ASSERT_RANGE (1, family, af == AF_INET || af == AF_INET6);
+ if (af == AF_INET)
+ *(uint32_t *) addr6 = htonl (SCM_NUM2ULONG (2, address));
+ else
+ {
+ VALIDATE_INET6 (2, address);
+ ipv6_num_to_net (address, addr6);
+ }
+ if (inet_ntop (af, &addr6, dst, sizeof dst) == NULL)
+ SCM_SYSERROR;
+ return scm_makfrom0str (dst);
+}
+#undef FUNC_NAME
+#endif
+
SCM_SYMBOL (sym_socket, "socket");
#define SCM_SOCK_FD_TO_PORT(fd) scm_fdes_to_port (fd, "r+0", sym_socket)
@@ -366,24 +631,6 @@
}
#undef FUNC_NAME
-/* flip a 128 bit IPv6 address between host and network order. */
-#ifdef WORDS_BIGENDIAN
-#define FLIP_NET_HOST_128(addr)
-#else
-#define FLIP_NET_HOST_128(addr)\
-{\
- int i;\
- \
- for (i = 0; i < 8; i++)\
- {\
- char c = (addr)[i];\
- \
- (addr)[i] = (addr)[15 - i];\
- (addr)[15 - i] = c;\
- }\
-}
-#endif
-
SCM_DEFINE (scm_shutdown, "shutdown", 2, 0, 0,
(SCM sock, SCM how),
"Sockets can be closed simply by using @code{close-port}. The\n"
@@ -462,16 +709,7 @@
unsigned long flowinfo = 0;
unsigned long scope_id = 0;
- if (SCM_INUMP (address))
- SCM_ASSERT_RANGE (which_arg, address, SCM_INUM (address) >= 0);
- else
- {
- SCM_VALIDATE_BIGINT (which_arg, address);
- SCM_ASSERT_RANGE (which_arg, address,
- !SCM_BIGSIGN (address)
- && (SCM_BITSPERDIG
- * SCM_NUMDIGS (address) <= 128));
- }
+ VALIDATE_INET6 (which_arg, address);
SCM_VALIDATE_CONS (which_arg + 1, *args);
SCM_VALIDATE_INUM_COPY (which_arg + 1, SCM_CAR (*args), port);
*args = SCM_CDR (*args);
@@ -493,20 +731,7 @@
soka->sin6_len = sizeof (struct sockaddr_in6);
#endif
soka->sin6_family = AF_INET6;
- if (SCM_INUMP (address))
- {
- uint32_t addr = htonl (SCM_INUM (address));
-
- memset (soka->sin6_addr.s6_addr, 0, 12);
- memcpy (soka->sin6_addr.s6_addr + 12, &addr, 4);
- }
- else
- {
- memset (soka->sin6_addr.s6_addr, 0, 16);
- memcpy (soka->sin6_addr.s6_addr, SCM_BDIGITS (address),
- SCM_NUMDIGS (address) * (SCM_BITSPERDIG / 8));
- FLIP_NET_HOST_128 (soka->sin6_addr.s6_addr);
- }
+ ipv6_num_to_net (address, soka->sin6_addr.s6_addr);
soka->sin6_port = htons (port);
soka->sin6_flowinfo = flowinfo;
#ifdef HAVE_SIN6_SCOPE_ID
@@ -692,43 +917,11 @@
case AF_INET6:
{
const struct sockaddr_in6 *nad = (struct sockaddr_in6 *) address;
- int big_digits = 128 / SCM_BITSPERDIG;
- int bytes_per_dig = SCM_BITSPERDIG / 8;
- char addr[16];
- char *ptr = addr;
- SCM scm_addr;
-
- memcpy (addr, nad->sin6_addr.s6_addr, 16);
- /* get rid of leading zeros. */
- while (big_digits > 0)
- {
- long test = 0;
-
- memcpy (&test, ptr, bytes_per_dig);
- if (test != 0)
- break;
- ptr += bytes_per_dig;
- big_digits--;
- }
- FLIP_NET_HOST_128 (addr);
- if (big_digits * bytes_per_dig <= sizeof (unsigned long))
- {
- /* this is just so that we use INUM where possible. */
- unsigned long l_addr;
-
- memcpy (&l_addr, addr, sizeof (unsigned long));
- scm_addr = scm_ulong2num (l_addr);
- }
- else
- {
- scm_addr = scm_mkbig (big_digits, 0);
- memcpy (SCM_BDIGITS (scm_addr), addr, big_digits * bytes_per_dig);
- }
result = scm_c_make_vector (5, SCM_UNSPECIFIED);
ve = SCM_VELTS (result);
ve[0] = scm_ulong2num ((unsigned long) fam);
- ve[1] = scm_addr;
+ ve[1] = ipv6_net_to_num (nad->sin6_addr.s6_addr);
ve[2] = scm_ulong2num ((unsigned long) ntohs (nad->sin6_port));
ve[3] = scm_ulong2num ((unsigned long) nad->sin6_flowinfo);
#ifdef HAVE_SIN6_SCOPE_ID
@@ -1073,6 +1266,20 @@
#endif
#ifdef PF_INET6
scm_sysintern ("PF_INET6", SCM_MAKINUM (PF_INET6));
+#endif
+
+ /* standard addresses. */
+#ifdef INADDR_ANY
+ scm_sysintern ("INADDR_ANY", scm_ulong2num (INADDR_ANY));
+#endif
+#ifdef INADDR_BROADCAST
+ scm_sysintern ("INADDR_BROADCAST", scm_ulong2num (INADDR_BROADCAST));
+#endif
+#ifdef INADDR_NONE
+ scm_sysintern ("INADDR_NONE", scm_ulong2num (INADDR_NONE));
+#endif
+#ifdef INADDR_LOOPBACK
+ scm_sysintern ("INADDR_LOOPBACK", scm_ulong2num (INADDR_LOOPBACK));
#endif
/* socket types. */
Index: guile/guile-core/libguile/socket.h
diff -u guile/guile-core/libguile/socket.h:1.11
guile/guile-core/libguile/socket.h:1.12
--- guile/guile-core/libguile/socket.h:1.11 Mon Jun 12 05:28:24 2000
+++ guile/guile-core/libguile/socket.h Sun Apr 22 09:05:21 2001
@@ -1,8 +1,8 @@
/* classes: h_files */
-#ifndef SOCKETH
-#define SOCKETH
-/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+#ifndef SCM_SOCKETH
+#define SCM_SOCKETH
+/* Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation,
Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -52,6 +52,14 @@
extern SCM scm_ntohs (SCM in);
extern SCM scm_htonl (SCM in);
extern SCM scm_ntohl (SCM in);
+extern SCM scm_gethost (SCM name);
+extern SCM scm_inet_aton (SCM address);
+extern SCM scm_inet_ntoa (SCM inetid);
+extern SCM scm_inet_netof (SCM address);
+extern SCM scm_lnaof (SCM address);
+extern SCM scm_inet_makeaddr (SCM net, SCM lna);
+extern SCM scm_inet_pton (SCM family, SCM address);
+extern SCM scm_inet_ntop (SCM family, SCM address);
extern SCM scm_socket (SCM family, SCM style, SCM proto);
extern SCM scm_socketpair (SCM family, SCM style, SCM proto);
extern SCM scm_getsockopt (SCM sfd, SCM level, SCM optname);
@@ -69,7 +77,7 @@
extern SCM scm_sendto (SCM sockfd, SCM message, SCM fam, SCM address, SCM
args_and_flags);
extern void scm_init_socket (void);
-#endif /* SOCKETH */
+#endif /* SCM_SOCKETH */
/*
Local Variables:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- guile/guile-core/libguile ChangeLog net_db.c ne...,
Gary Houston <=