[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
CVS shishi/gl
From: |
shishi-commit |
Subject: |
CVS shishi/gl |
Date: |
Tue, 09 Nov 2004 19:18:50 +0100 |
Update of /home/cvs/shishi/gl
In directory dopio:/tmp/cvs-serv4285/gl
Modified Files:
Makefile.am
Added Files:
gai_strerror.c getaddrinfo.c getaddrinfo.h
Log Message:
Add getaddrinfo.
--- /home/cvs/shishi/gl/Makefile.am 2004/11/08 14:50:17 1.48
+++ /home/cvs/shishi/gl/Makefile.am 2004/11/09 18:18:50 1.49
@@ -9,7 +9,7 @@
#
# Generated by gnulib-tool.
# Invoked as: gnulib-tool --import
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gl
--m4-base=gl/m4 --libtool alloca alloca-opt allocsa error extensions getdate
getdomainname gethostname getline getopt getpass getsubopt gettext gettime
gettimeofday mktime progname readlink realloc restrict setenv stdbool strcase
strchrnul strdup strndup strnlen timegm time_r timespec vasnprintf vasprintf
xalloc xgetdomainname xgethostname xreadlink xsize xstrndup
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gl
--m4-base=gl/m4 --libtool alloca alloca-opt allocsa error extensions
getaddrinfo getdate getdomainname gethostname getline getopt getpass getsubopt
gettext gettime gettimeofday mktime progname readlink realloc restrict setenv
stdbool strcase strchrnul strdup strndup strnlen timegm time_r timespec
vasnprintf vasprintf xalloc xgetdomainname xgethostname xreadlink xsize xstrndup
AUTOMAKE_OPTIONS = 1.5 gnits no-dependencies
@@ -63,6 +63,12 @@
## end gnulib module allocsa
+## begin gnulib module getaddrinfo
+
+libgnu_la_SOURCES += getaddrinfo.h
+
+## end gnulib module getaddrinfo
+
## begin gnulib module getdate
libgnu_la_SOURCES += getdate.h getdate.y
--- /home/cvs/shishi/gl/gai_strerror.c 2004/11/09 18:18:50 NONE
+++ /home/cvs/shishi/gl/gai_strerror.c 2004/11/09 18:18:50 1.1
/* Copyright (C) 1997, 2001, 2002, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <address@hidden>, 1997.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <stdio.h>
#include <netdb.h>
#ifdef _LIBC
# include <libintl.h>
#else
# include "getaddrinfo.h"
# include "gettext.h"
# define _(String) gettext (String)
# define N_(String) String
#endif
static struct
{
int code;
const char *msg;
}
values[] =
{
{ EAI_ADDRFAMILY, N_("Address family for hostname not supported") },
{ EAI_AGAIN, N_("Temporary failure in name resolution") },
{ EAI_BADFLAGS, N_("Bad value for ai_flags") },
{ EAI_FAIL, N_("Non-recoverable failure in name resolution") },
{ EAI_FAMILY, N_("ai_family not supported") },
{ EAI_MEMORY, N_("Memory allocation failure") },
{ EAI_NODATA, N_("No address associated with hostname") },
{ EAI_NONAME, N_("Name or service not known") },
{ EAI_SERVICE, N_("Servname not supported for ai_socktype") },
{ EAI_SOCKTYPE, N_("ai_socktype not supported") },
{ EAI_SYSTEM, N_("System error") },
#ifdef __USE_GNU
{ EAI_INPROGRESS, N_("Processing request in progress") },
{ EAI_CANCELED, N_("Request canceled") },
{ EAI_NOTCANCELED, N_("Request not canceled") },
{ EAI_ALLDONE, N_("All requests done") },
{ EAI_INTR, N_("Interrupted by a signal") },
{ EAI_IDN_ENCODE, N_("Parameter string not correctly encoded") }
#endif
};
const char *
gai_strerror (int code)
{
size_t i;
for (i = 0; i < sizeof (values) / sizeof (values[0]); ++i)
if (values[i].code == code)
return _(values[i].msg);
return _("Unknown error");
}
#ifdef _LIBC
libc_hidden_def (gai_strerror)
#endif
--- /home/cvs/shishi/gl/getaddrinfo.c 2004/11/09 18:18:50 NONE
+++ /home/cvs/shishi/gl/getaddrinfo.c 2004/11/09 18:18:50 1.1
/* Get address information (partial implementation).
Copyright (C) 1997, 2001, 2002, 2004 Free Software Foundation, Inc.
Contributed by Simon Josefsson <address@hidden>.
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
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
/* Get calloc. */
#include <stdlib.h>
/* Get memcpy. */
#include <string.h>
#include "gettext.h"
#define _(String) gettext (String)
#define N_(String) String
/* Get struct hostent. */
#include <netdb.h>
#include "getaddrinfo.h"
/* Translate name of a service location and/or a service name to set of
socket addresses. */
int
getaddrinfo (const char *restrict nodename,
const char *restrict servname,
const struct addrinfo *restrict hints,
struct addrinfo **restrict res)
{
struct addrinfo *tmp;
struct servent *se;
struct hostent *he;
size_t sinlen;
if (hints && hints->ai_flags)
/* FIXME: Support more flags. */
return EAI_BADFLAGS;
if (hints
#if HAVE_IPV4
&& hints->ai_family != PF_INET
#endif
#if HAVE_IPV6
&& hints->ai_family != PF_INET6
#endif
&& hints->ai_family != PF_UNSPEC)
/* FIXME: Support more families. */
return EAI_FAMILY;
if (hints && hints->ai_socktype)
/* FIXME: Support more socket types. */
return EAI_SOCKTYPE;
if (hints &&
hints->ai_protocol != SOCK_STREAM && hints->ai_protocol != SOCK_DGRAM)
/* FIXME: Support other protocols. */
return EAI_SERVICE; /* FIXME: Better return code? */
if (!nodename)
/* FIXME: Support server bind mode. */
return EAI_NONAME;
if (servname)
{
const char *proto =
(hints && hints->ai_protocol == SOCK_DGRAM) ? "udp" : "tcp";
/* FIXME: Use getservbyname_r if available. */
se = getservbyname (servname, proto);
if (!se)
return EAI_SERVICE;
}
/* FIXME: Use gethostbyname_r if available. */
he = gethostbyname (nodename);
if (!he || he->h_addr_list[0] == NULL)
return EAI_NONAME;
switch (he->h_addrtype)
{
#if HAVE_IPV6
case PF_INET6:
sinlen = sizeof (struct sockaddr_in6);
break;
#endif
#if HAVE_IPV4
case PF_INET:
sinlen = sizeof (struct sockaddr_in);
break;
#endif
default:
return EAI_NODATA;
}
tmp = calloc (1, sizeof (*tmp) + sinlen);
if (!tmp)
return EAI_MEMORY;
switch (he->h_addrtype)
{
#if HAVE_IPV6
case PF_INET6:
{
struct sockaddr_in6 *sinp = (void *) tmp + sizeof (*tmp);
if (se)
sinp->sin6_port = se->s_port;
if (he->h_length != sizeof (sinp->sin6_addr))
return EAI_SYSTEM; /* FIXME: Better return code? Set errno? */
memcpy (&sinp->sin6_addr, he->h_addr_list[0], he->h_length);
tmp->ai_addr = (struct sockaddr *) sinp;
tmp->ai_addrlen = sinlen;
}
break;
#endif
#if HAVE_IPV4
case PF_INET:
{
struct sockaddr_in *sinp = (void *) tmp + sizeof (*tmp);
if (se)
sinp->sin_port = se->s_port;
if (he->h_length != sizeof (sinp->sin_addr))
return EAI_SYSTEM; /* FIXME: Better return code? Set errno? */
memcpy (&sinp->sin_addr, he->h_addr_list[0], he->h_length);
tmp->ai_addr = (struct sockaddr *) sinp;
tmp->ai_addrlen = sinlen;
}
break;
#endif
default:
free (tmp);
return EAI_NODATA;
}
tmp->ai_addr->sa_family = he->h_addrtype;
/* FIXME: If more than one address, create linked list of addrinfo's. */
*res = tmp;
return 0;
}
/* Free `addrinfo' structure AI including associated storage. */
void
freeaddrinfo (struct addrinfo *ai)
{
while (ai)
{
struct addrinfo *cur;
cur = ai;
ai = ai->ai_next;
free (cur);
}
}
--- /home/cvs/shishi/gl/getaddrinfo.h 2004/11/09 18:18:50 NONE
+++ /home/cvs/shishi/gl/getaddrinfo.h 2004/11/09 18:18:50 1.1
/* Get address information.
Copyright (C) 1996-2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Simon Josefsson <address@hidden>.
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
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef GETADDRINFO_H
# define GETADDRINFO_H
/* Get getaddrinfo declarations, if available. */
# include <sys/socket.h>
# include <netdb.h>
# if defined HAVE_GETADDRINFO && !HAVE_GETADDRINFO
/* Get socklen_t, struct sockaddr. */
# include <sys/types.h>
/* Structure to contain information about address of a service provider. */
struct addrinfo
{
int ai_flags; /* Input flags. */
int ai_family; /* Protocol family for socket. */
int ai_socktype; /* Socket type. */
int ai_protocol; /* Protocol for socket. */
socklen_t ai_addrlen; /* Length of socket address. */
struct sockaddr *ai_addr; /* Socket address for socket. */
char *ai_canonname; /* Canonical name for service location. */
struct addrinfo *ai_next; /* Pointer to next in list. */
};
/* Possible values for `ai_flags' field in `addrinfo' structure. */
# define AI_PASSIVE 0x0001 /* Socket address is intended for `bind'. */
# define AI_CANONNAME 0x0002 /* Request for canonical name. */
# define AI_NUMERICHOST 0x0004 /* Don't use name resolution. */
# define AI_V4MAPPED 0x0008 /* IPv4 mapped addresses are acceptable. */
# define AI_ALL 0x0010 /* Return IPv4 mapped and IPv6 addresses. */
# define AI_ADDRCONFIG 0x0020 /* Use configuration of this host to choose
returned address type.. */
/* Error values for `getaddrinfo' function. */
# define EAI_BADFLAGS -1 /* Invalid value for `ai_flags' field. */
# define EAI_NONAME -2 /* NAME or SERVICE is unknown. */
# define EAI_AGAIN -3 /* Temporary failure in name resolution. */
# define EAI_FAIL -4 /* Non-recoverable failure in name res. */
# define EAI_NODATA -5 /* No address associated with NAME. */
# define EAI_FAMILY -6 /* `ai_family' not supported. */
# define EAI_SOCKTYPE -7 /* `ai_socktype' not supported. */
# define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */
# define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */
# define EAI_MEMORY -10 /* Memory allocation failure. */
# define EAI_SYSTEM -11 /* System error returned in `errno'. */
# define EAI_OVERFLOW -12 /* Argument buffer overflow. */
# ifdef __USE_GNU
# define EAI_INPROGRESS -100 /* Processing request in progress. */
# define EAI_CANCELED -101 /* Request canceled. */
# define EAI_NOTCANCELED -102 /* Request not canceled. */
# define EAI_ALLDONE -103 /* All requests done. */
# define EAI_INTR -104 /* Interrupted by a signal. */
# define EAI_IDN_ENCODE -105 /* IDN encoding failed. */
# endif
/* Translate name of a service location and/or a service name to set of
socket addresses. */
extern int getaddrinfo (const char *restrict nodename,
const char *restrict servname,
const struct addrinfo *restrict hints,
struct addrinfo **restrict res);
/* Free `addrinfo' structure AI including associated storage. */
extern void freeaddrinfo (struct addrinfo *ai);
/* Convert error return from getaddrinfo() to a string. */
extern const char *gai_strerror (int ecode);
# endif
#endif /* GETADDRINFO_H */
- CVS shishi/gl, shishi-commit, 2004/11/08
- CVS shishi/gl,
shishi-commit <=
- CVS shishi/gl, shishi-commit, 2004/11/10
- CVS shishi/gl, shishi-commit, 2004/11/11
- CVS shishi/gl, shishi-commit, 2004/11/11
- CVS shishi/gl, shishi-commit, 2004/11/11
- CVS shishi/gl, shishi-commit, 2004/11/11
- CVS shishi/gl, shishi-commit, 2004/11/11
- CVS shishi/gl, shishi-commit, 2004/11/12
- CVS shishi/gl, shishi-commit, 2004/11/19
- CVS shishi/gl, shishi-commit, 2004/11/19
- CVS shishi/gl, shishi-commit, 2004/11/21