1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-12 23:00:22 +02:00

Deprecate inet-ntoa' and inet-aton'.

Suggested by Bruno Haible.

* libguile/inet_aton.c: Remove.

* libguile/Makefile.am (EXTRA_libguile_la_SOURCES): Remove
  `inet_aton.c'.

* libguile/deprecated.c (scm_inet_aton, scm_inet_ntoa): New functions.

* libguile/deprecated.h: Update accordingly.

* libguile/socket.c (scm_inet_aton, scm_inet_ntoa): Remove.

* doc/ref/posix.texi (Network Address Conversion): Mark `inet-ntoa' and
  `inet-aton' as deprecated.
This commit is contained in:
Ludovic Courtès 2009-11-15 20:50:08 +01:00
parent 8912421cf3
commit 3452e6667f
6 changed files with 55 additions and 225 deletions

View file

@ -1,6 +1,6 @@
@c -*-texinfo-*- @c -*-texinfo-*-
@c This is part of the GNU Guile Reference Manual. @c This is part of the GNU Guile Reference Manual.
@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2008 @c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009
@c Free Software Foundation, Inc. @c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions. @c See the file guile.texi for copying conditions.
@ -2225,6 +2225,8 @@ The address of the local host using the loopback device, ie.@:
@deffn {Scheme Procedure} inet-aton address @deffn {Scheme Procedure} inet-aton address
@deffnx {C Function} scm_inet_aton (address) @deffnx {C Function} scm_inet_aton (address)
This function is deprecated in favor of @code{inet-pton}.
Convert an IPv4 Internet address from printable string Convert an IPv4 Internet address from printable string
(dotted decimal notation) to an integer. E.g., (dotted decimal notation) to an integer. E.g.,
@ -2235,6 +2237,8 @@ Convert an IPv4 Internet address from printable string
@deffn {Scheme Procedure} inet-ntoa inetid @deffn {Scheme Procedure} inet-ntoa inetid
@deffnx {C Function} scm_inet_ntoa (inetid) @deffnx {C Function} scm_inet_ntoa (inetid)
This function is deprecated in favor of @code{inet-ntop}.
Convert an IPv4 Internet address to a printable Convert an IPv4 Internet address to a printable
(dotted decimal notation) string. E.g., (dotted decimal notation) string. E.g.,
@ -3107,7 +3111,7 @@ returns the contents of the root index URL.
@example @example
(let ((s (socket PF_INET SOCK_STREAM 0))) (let ((s (socket PF_INET SOCK_STREAM 0)))
(connect s AF_INET (inet-aton "127.0.0.1") 80) (connect s AF_INET (inet-pton AF_INET "127.0.0.1") 80)
(display "GET / HTTP/1.0\r\n\r\n" s) (display "GET / HTTP/1.0\r\n\r\n" s)
(do ((line (read-line s) (read-line s))) (do ((line (read-line s) (read-line s)))
@ -3128,7 +3132,7 @@ client.
(let ((s (socket PF_INET SOCK_STREAM 0))) (let ((s (socket PF_INET SOCK_STREAM 0)))
(setsockopt s SOL_SOCKET SO_REUSEADDR 1) (setsockopt s SOL_SOCKET SO_REUSEADDR 1)
;; @r{Specific address?} ;; @r{Specific address?}
;; @r{(bind s AF_INET (inet-aton "127.0.0.1") 2904)} ;; @r{(bind s AF_INET (inet-pton AF_INET "127.0.0.1") 2904)}
(bind s AF_INET INADDR_ANY 2904) (bind s AF_INET INADDR_ANY 2904)
(listen s 5) (listen s 5)

View file

@ -398,7 +398,7 @@ BUILT_SOURCES = cpp_err_symbols.c cpp_sig_symbols.c libpath.h \
$(DOT_I_FILES) $(DOT_X_FILES) $(EXTRA_DOT_X_FILES) $(DOT_I_FILES) $(DOT_X_FILES) $(EXTRA_DOT_X_FILES)
EXTRA_libguile_la_SOURCES = _scm.h \ EXTRA_libguile_la_SOURCES = _scm.h \
inet_aton.c memmove.c putenv.c strerror.c \ memmove.c putenv.c strerror.c \
dynl.c regex-posix.c \ dynl.c regex-posix.c \
filesys.c posix.c net_db.c socket.c \ filesys.c posix.c net_db.c socket.c \
debug-malloc.c mkstemp.c \ debug-malloc.c mkstemp.c \

View file

@ -52,11 +52,14 @@
#include "libguile/smob.h" #include "libguile/smob.h"
#include "libguile/alist.h" #include "libguile/alist.h"
#include "libguile/keywords.h" #include "libguile/keywords.h"
#include "libguile/socket.h"
#include "libguile/feature.h" #include "libguile/feature.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <arpa/inet.h>
#if (SCM_ENABLE_DEPRECATED == 1) #if (SCM_ENABLE_DEPRECATED == 1)
/* From print.c: Internal symbol names of isyms. Deprecated in guile 1.7.0 on /* From print.c: Internal symbol names of isyms. Deprecated in guile 1.7.0 on
@ -1459,6 +1462,44 @@ scm_i_fluidp (SCM x)
return scm_is_fluid (x); return scm_is_fluid (x);
} }
/* Networking. */
SCM_DEFINE (scm_inet_aton, "inet-aton", 1, 0, 0,
(SCM address),
"Convert an IPv4 Internet address from printable string\n"
"(dotted decimal notation) to an integer. E.g.,\n\n"
"@lisp\n"
"(inet-aton \"127.0.0.1\") @result{} 2130706433\n"
"@end lisp")
#define FUNC_NAME s_scm_inet_aton
{
scm_c_issue_deprecation_warning
("`inet-aton' is deprecated. Use `inet-pton' instead.");
return scm_inet_pton (scm_from_int (AF_INET), address);
}
#undef FUNC_NAME
SCM_DEFINE (scm_inet_ntoa, "inet-ntoa", 1, 0, 0,
(SCM inetid),
"Convert an IPv4 Internet address to a printable\n"
"(dotted decimal notation) string. E.g.,\n\n"
"@lisp\n"
"(inet-ntoa 2130706433) @result{} \"127.0.0.1\"\n"
"@end lisp")
#define FUNC_NAME s_scm_inet_ntoa
{
scm_c_issue_deprecation_warning
("`inet-ntoa' is deprecated. Use `inet-ntop' instead.");
return scm_inet_ntop (scm_from_int (AF_INET), inetid);
}
#undef FUNC_NAME
void void
scm_i_defer_ints_etc () scm_i_defer_ints_etc ()
{ {

View file

@ -541,6 +541,12 @@ SCM_DEPRECATED SCM_STACKITEM *scm_i_stack_base (void);
#define SCM_FLUIDP(x) scm_i_fluidp (x) #define SCM_FLUIDP(x) scm_i_fluidp (x)
SCM_DEPRECATED int scm_i_fluidp (SCM x); SCM_DEPRECATED int scm_i_fluidp (SCM x);
/* Deprecated in Guile 1.9.5 on 2009-11-15 because these are IPv4-only
functions which are deprecated upstream. */
SCM_DEPRECATED SCM scm_inet_aton (SCM address);
SCM_DEPRECATED SCM scm_inet_ntoa (SCM inetid);
/* In the old days, SCM_CRITICAL_SECTION_START stopped signal handlers /* In the old days, SCM_CRITICAL_SECTION_START stopped signal handlers
from running, since in those days the handler directly ran scheme from running, since in those days the handler directly ran scheme
code, and that had to be avoided when the heap was not in a code, and that had to be avoided when the heap was not in a

View file

@ -1,174 +0,0 @@
/*
* Copyright (c) 1983, 1990, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)inet_addr.c 8.1 (Berkeley) 6/17/93";
#endif /* LIBC_SCCS and not lint */
#include <ctype.h>
#ifdef __MINGW32__
/* Include for MinGW only. Cygwin will have the latter. */
#include <winsock2.h>
#else
#include <sys/param.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#endif
#if 0
/*
* Ascii internet address interpretation routine.
* The value returned is in network order.
*/
u_long
inet_addr(const char *cp)
{
struct in_addr val;
if (inet_aton(cp, &val))
return (val.s_addr);
return (INADDR_NONE);
}
#endif
/* We provide this prototype to avoid compiler warnings. If this ever
conflicts with a declaration in a system header file, we'll find
out, because we should include that header file here. */
int inet_aton (const char *cp, struct in_addr *addr);
/*
* Check whether "cp" is a valid ascii representation
* of an Internet address and convert to a binary address.
* Returns 1 if the address is valid, 0 if not.
* This replaces inet_addr, the return value from which
* cannot distinguish between failure and a local broadcast address. */
int
inet_aton(const char *cp_arg, struct in_addr *addr)
{
register unsigned long val;
register int base, n;
register unsigned char c;
register unsigned const char *cp = (unsigned const char *) cp_arg;
unsigned int parts[4];
register unsigned int *pp = parts;
for (;;) {
/*
* Collect number up to ``.''.
* Values are specified as for C:
* 0x=hex, 0=octal, other=decimal.
*/
val = 0; base = 10;
if (*cp == '0') {
if (*++cp == 'x' || *cp == 'X')
base = 16, cp++;
else
base = 8;
}
while ((c = *cp) != '\0') {
if (isascii ((int) c) && isdigit ((int) c)) {
val = (val * base) + (c - '0');
cp++;
continue;
}
if (base == 16 && isascii ((int) c) && isxdigit ((int) c)) {
val = (val << 4) +
(c + 10 - (islower((int) c) ? 'a' : 'A'));
cp++;
continue;
}
break;
}
if (*cp == '.') {
/*
* Internet format:
* a.b.c.d
* a.b.c (with c treated as 16-bits)
* a.b (with b treated as 24 bits)
*/
if (pp >= parts + 3 || val > 0xff)
return (0);
*pp++ = val, cp++;
} else
break;
}
/*
* Check for trailing characters.
*/
if (*cp && (!isascii ((int) (*cp)) || !isspace ((int) (*cp))))
return (0);
/*
* Concoct the address according to
* the number of parts specified.
*/
n = pp - parts + 1;
switch (n) {
case 1: /* a -- 32 bits */
break;
case 2: /* a.b -- 8.24 bits */
if (val > 0xffffff)
return (0);
val |= parts[0] << 24;
break;
case 3: /* a.b.c -- 8.8.16 bits */
if (val > 0xffff)
return (0);
val |= (parts[0] << 24) | (parts[1] << 16);
break;
case 4: /* a.b.c.d -- 8.8.8.8 bits */
if (val > 0xff)
return (0);
val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
break;
}
if (addr)
addr->s_addr = htonl(val);
return (1);
}
/*
Local Variables:
c-file-style: "gnu"
End:
*/

View file

@ -137,53 +137,6 @@ SCM_DEFINE (scm_ntohl, "ntohl", 1, 0, 0,
} }
#undef FUNC_NAME #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),
"Convert an IPv4 Internet address from printable string\n"
"(dotted decimal notation) to an integer. E.g.,\n\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;
char *c_address;
int rv;
c_address = scm_to_locale_string (address);
rv = inet_aton (c_address, &soka);
free (c_address);
if (rv == 0)
SCM_MISC_ERROR ("bad address", SCM_EOL);
return scm_from_ulong (ntohl (soka.s_addr));
}
#undef FUNC_NAME
SCM_DEFINE (scm_inet_ntoa, "inet-ntoa", 1, 0, 0,
(SCM inetid),
"Convert an IPv4 Internet address to a printable\n"
"(dotted decimal notation) string. E.g.,\n\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_from_locale_string (s);
return answer;
}
#undef FUNC_NAME
#ifdef HAVE_INET_NETOF #ifdef HAVE_INET_NETOF
SCM_DEFINE (scm_inet_netof, "inet-netof", 1, 0, 0, SCM_DEFINE (scm_inet_netof, "inet-netof", 1, 0, 0,
(SCM address), (SCM address),