mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
remove mingw32 implementations of {get,end,set}{serv,proto}ent
* libguile/win32-socket.h: * libguile/win32-socket.c (getservent, endservent, setservent) (getprotoent, endprotoent, setprotoent): Remove mingw32 wrappers. Their place is in gnulib, if anywhere.
This commit is contained in:
parent
4c187d46d4
commit
7e369c3899
3 changed files with 11 additions and 187 deletions
|
@ -55,23 +55,15 @@
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
#include "win32-socket.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined (HAVE_H_ERRNO) && !defined (__MINGW32__) && !defined (__CYGWIN__)
|
#if defined (HAVE_H_ERRNO)
|
||||||
/* h_errno not found in netdb.h, maybe this will help. */
|
/* Only wrap gethostbyname / gethostbyaddr if h_errno is available. */
|
||||||
extern int h_errno;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_HSTRERROR && !HAVE_DECL_HSTRERROR \
|
#if defined HAVE_HSTRERROR && !HAVE_DECL_HSTRERROR
|
||||||
&& !defined __MINGW32__ && !defined __CYGWIN__
|
|
||||||
/* Some OSes, such as Tru64 5.1b, lack a declaration for hstrerror(3). */
|
/* Some OSes, such as Tru64 5.1b, lack a declaration for hstrerror(3). */
|
||||||
extern const char *hstrerror (int);
|
extern const char *hstrerror (int);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SCM_SYMBOL (scm_host_not_found_key, "host-not-found");
|
SCM_SYMBOL (scm_host_not_found_key, "host-not-found");
|
||||||
SCM_SYMBOL (scm_try_again_key, "try-again");
|
SCM_SYMBOL (scm_try_again_key, "try-again");
|
||||||
SCM_SYMBOL (scm_no_recovery_key, "no-recovery");
|
SCM_SYMBOL (scm_no_recovery_key, "no-recovery");
|
||||||
|
@ -200,6 +192,8 @@ SCM_DEFINE (scm_gethost, "gethost", 0, 1, 0,
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
|
#endif /* HAVE_H_ERRNO */
|
||||||
|
|
||||||
|
|
||||||
/* In all subsequent getMUMBLE functions, when we're called with no
|
/* In all subsequent getMUMBLE functions, when we're called with no
|
||||||
arguments, we're supposed to traverse the tables entry by entry.
|
arguments, we're supposed to traverse the tables entry by entry.
|
||||||
|
@ -263,7 +257,7 @@ SCM_DEFINE (scm_getnet, "getnet", 0, 1, 0,
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (HAVE_GETPROTOENT) || defined (__MINGW32__)
|
#if defined (HAVE_GETPROTOENT)
|
||||||
SCM_DEFINE (scm_getproto, "getproto", 0, 1, 0,
|
SCM_DEFINE (scm_getproto, "getproto", 0, 1, 0,
|
||||||
(SCM protocol),
|
(SCM protocol),
|
||||||
"@deffnx {Scheme Procedure} getprotobyname name\n"
|
"@deffnx {Scheme Procedure} getprotobyname name\n"
|
||||||
|
@ -314,7 +308,7 @@ SCM_DEFINE (scm_getproto, "getproto", 0, 1, 0,
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (HAVE_GETSERVENT) || defined (__MINGW32__)
|
#if defined (HAVE_GETSERVENT)
|
||||||
static SCM
|
static SCM
|
||||||
scm_return_entry (struct servent *entry)
|
scm_return_entry (struct servent *entry)
|
||||||
{
|
{
|
||||||
|
@ -416,7 +410,7 @@ SCM_DEFINE (scm_setnet, "setnet", 0, 1, 0,
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (HAVE_SETPROTOENT) && defined (HAVE_ENDPROTOENT) || defined (__MINGW32__)
|
#if defined (HAVE_SETPROTOENT) && defined (HAVE_ENDPROTOENT)
|
||||||
SCM_DEFINE (scm_setproto, "setproto", 0, 1, 0,
|
SCM_DEFINE (scm_setproto, "setproto", 0, 1, 0,
|
||||||
(SCM stayopen),
|
(SCM stayopen),
|
||||||
"If @var{stayopen} is omitted, this is equivalent to @code{endprotoent}.\n"
|
"If @var{stayopen} is omitted, this is equivalent to @code{endprotoent}.\n"
|
||||||
|
@ -432,7 +426,7 @@ SCM_DEFINE (scm_setproto, "setproto", 0, 1, 0,
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (HAVE_SETSERVENT) && defined (HAVE_ENDSERVENT) || defined (__MINGW32__)
|
#if defined (HAVE_SETSERVENT) && defined (HAVE_ENDSERVENT)
|
||||||
SCM_DEFINE (scm_setserv, "setserv", 0, 1, 0,
|
SCM_DEFINE (scm_setserv, "setserv", 0, 1, 0,
|
||||||
(SCM stayopen),
|
(SCM stayopen),
|
||||||
"If @var{stayopen} is omitted, this is equivalent to @code{endservent}.\n"
|
"If @var{stayopen} is omitted, this is equivalent to @code{endservent}.\n"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
|
/* Copyright (C) 2001, 2006, 2013 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
|
@ -441,169 +441,6 @@ scm_i_socket_uncomment (char *line)
|
||||||
return end;
|
return end;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The getservent() function reads the next line from the file `/etc/services'
|
|
||||||
and returns a structure servent containing the broken out fields from the
|
|
||||||
line. The `/etc/services' file is opened if necessary. */
|
|
||||||
struct servent *
|
|
||||||
getservent (void)
|
|
||||||
{
|
|
||||||
char line[MAX_NAMLEN], *end, *p;
|
|
||||||
int done = 0, i, n, a;
|
|
||||||
struct servent *e = NULL;
|
|
||||||
|
|
||||||
/* Ensure a open file. */
|
|
||||||
if (scm_i_servent.fd == NULL || feof (scm_i_servent.fd))
|
|
||||||
{
|
|
||||||
setservent (1);
|
|
||||||
if (scm_i_servent.fd == NULL)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!done)
|
|
||||||
{
|
|
||||||
/* Get new line. */
|
|
||||||
if (fgets (line, MAX_NAMLEN, scm_i_servent.fd) != NULL)
|
|
||||||
{
|
|
||||||
end = scm_i_socket_uncomment (line);
|
|
||||||
|
|
||||||
/* Scan the line. */
|
|
||||||
if ((i = sscanf (line, "%s %d/%s%n",
|
|
||||||
scm_i_servent.name,
|
|
||||||
&scm_i_servent.port,
|
|
||||||
scm_i_servent.proto, &n)) != 3)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* Scan the remaining aliases. */
|
|
||||||
p = line + n;
|
|
||||||
for (a = 0; a < MAX_ALIASES && p < end && i != -1 && n > 1;
|
|
||||||
a++, p += n)
|
|
||||||
i = sscanf (p, "%s%n", scm_i_servent.alias[a], &n);
|
|
||||||
|
|
||||||
/* Prepare the return value. */
|
|
||||||
e = &scm_i_servent.ent;
|
|
||||||
e->s_name = scm_i_servent.name;
|
|
||||||
e->s_port = htons (scm_i_servent.port);
|
|
||||||
e->s_proto = scm_i_servent.proto;
|
|
||||||
e->s_aliases = scm_i_servent.aliases;
|
|
||||||
scm_i_servent.aliases[a] = NULL;
|
|
||||||
while (a--)
|
|
||||||
scm_i_servent.aliases[a] = scm_i_servent.alias[a];
|
|
||||||
done = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return done ? e : NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The setservent() function opens and rewinds the `/etc/services' file.
|
|
||||||
This file can be set from outside with an environment variable specifying
|
|
||||||
the file name. */
|
|
||||||
void
|
|
||||||
setservent (int stayopen)
|
|
||||||
{
|
|
||||||
char *file = NULL;
|
|
||||||
|
|
||||||
endservent ();
|
|
||||||
if ((file = getenv (ENVIRON_ETC_SERVICES)) != NULL)
|
|
||||||
strcpy (scm_i_servent.file, file);
|
|
||||||
else if ((file = scm_i_socket_filename (FILE_ETC_SERVICES)) != NULL)
|
|
||||||
strcpy (scm_i_servent.file, file);
|
|
||||||
scm_i_servent.fd = fopen (scm_i_servent.file, "rt");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The endservent() function closes the `/etc/services' file. */
|
|
||||||
void
|
|
||||||
endservent (void)
|
|
||||||
{
|
|
||||||
if (scm_i_servent.fd != NULL)
|
|
||||||
{
|
|
||||||
fclose (scm_i_servent.fd);
|
|
||||||
scm_i_servent.fd = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The getprotoent() function reads the next line from the file
|
|
||||||
`/etc/protocols' and returns a structure protoent containing the broken
|
|
||||||
out fields from the line. The `/etc/protocols' file is opened if
|
|
||||||
necessary. */
|
|
||||||
struct protoent *
|
|
||||||
getprotoent (void)
|
|
||||||
{
|
|
||||||
char line[MAX_NAMLEN], *end, *p;
|
|
||||||
int done = 0, i, n, a;
|
|
||||||
struct protoent *e = NULL;
|
|
||||||
|
|
||||||
/* Ensure a open file. */
|
|
||||||
if (scm_i_protoent.fd == NULL || feof (scm_i_protoent.fd))
|
|
||||||
{
|
|
||||||
setprotoent (1);
|
|
||||||
if (scm_i_protoent.fd == NULL)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!done)
|
|
||||||
{
|
|
||||||
/* Get new line. */
|
|
||||||
if (fgets (line, MAX_NAMLEN, scm_i_protoent.fd) != NULL)
|
|
||||||
{
|
|
||||||
end = scm_i_socket_uncomment (line);
|
|
||||||
|
|
||||||
/* Scan the line. */
|
|
||||||
if ((i = sscanf (line, "%s %d%n",
|
|
||||||
scm_i_protoent.name,
|
|
||||||
&scm_i_protoent.proto, &n)) != 2)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* Scan the remaining aliases. */
|
|
||||||
p = line + n;
|
|
||||||
for (a = 0; a < MAX_ALIASES && p < end && i != -1 && n > 1;
|
|
||||||
a++, p += n)
|
|
||||||
i = sscanf (p, "%s%n", scm_i_protoent.alias[a], &n);
|
|
||||||
|
|
||||||
/* Prepare the return value. */
|
|
||||||
e = &scm_i_protoent.ent;
|
|
||||||
e->p_name = scm_i_protoent.name;
|
|
||||||
e->p_proto = scm_i_protoent.proto;
|
|
||||||
e->p_aliases = scm_i_protoent.aliases;
|
|
||||||
scm_i_protoent.aliases[a] = NULL;
|
|
||||||
while (a--)
|
|
||||||
scm_i_protoent.aliases[a] = scm_i_protoent.alias[a];
|
|
||||||
done = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return done ? e : NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The setprotoent() function opens and rewinds the `/etc/protocols' file.
|
|
||||||
As in setservent() the user can modify the location of the file using
|
|
||||||
an environment variable. */
|
|
||||||
void
|
|
||||||
setprotoent (int stayopen)
|
|
||||||
{
|
|
||||||
char *file = NULL;
|
|
||||||
|
|
||||||
endprotoent ();
|
|
||||||
if ((file = getenv (ENVIRON_ETC_PROTOCOLS)) != NULL)
|
|
||||||
strcpy (scm_i_protoent.file, file);
|
|
||||||
else if ((file = scm_i_socket_filename (FILE_ETC_PROTOCOLS)) != NULL)
|
|
||||||
strcpy (scm_i_protoent.file, file);
|
|
||||||
scm_i_protoent.fd = fopen (scm_i_protoent.file, "rt");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The endprotoent() function closes `/etc/protocols'. */
|
|
||||||
void
|
|
||||||
endprotoent (void)
|
|
||||||
{
|
|
||||||
if (scm_i_protoent.fd != NULL)
|
|
||||||
{
|
|
||||||
fclose (scm_i_protoent.fd);
|
|
||||||
scm_i_protoent.fd = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Define both the original and replacement error symbol is possible. Thus
|
/* Define both the original and replacement error symbol is possible. Thus
|
||||||
the user is able to check symbolic errors after unsuccessful networking
|
the user is able to check symbolic errors after unsuccessful networking
|
||||||
function calls. */
|
function calls. */
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#ifndef SCM_WIN32_SOCKET_H
|
#ifndef SCM_WIN32_SOCKET_H
|
||||||
#define SCM_WIN32_SOCKET_H
|
#define SCM_WIN32_SOCKET_H
|
||||||
|
|
||||||
/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
|
/* Copyright (C) 2001, 2006, 2013 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
|
@ -32,11 +32,4 @@ char * scm_i_socket_strerror (int error);
|
||||||
void scm_i_init_socket_Win32 (void);
|
void scm_i_init_socket_Win32 (void);
|
||||||
char * scm_i_socket_filename (char *file);
|
char * scm_i_socket_filename (char *file);
|
||||||
|
|
||||||
struct servent * getservent (void);
|
|
||||||
void setservent (int stayopen);
|
|
||||||
void endservent (void);
|
|
||||||
struct protoent * getprotoent (void);
|
|
||||||
void setprotoent (int stayopen);
|
|
||||||
void endprotoent (void);
|
|
||||||
|
|
||||||
#endif /* SCM_WIN32_SOCKET_H */
|
#endif /* SCM_WIN32_SOCKET_H */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue