mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 06:41:13 +02:00
squish remove some mingw-specific code that is covered by gnulib
* libguile/socket.c (scm_init_socket): Remove mingw-specific code. * libguile/fports.c: Remove ftruncate redefine; mingw is fine. (scm_i_fdes_to_port): If we have no F_GETFL, just do an fstat. The right place for an F_GETFL replacement would be in gnulib. (fport_input_waiting): Remove an outdated comment. * libguile/error.c (SCM_I_STRERROR, SCM_I_ERRNO): Remove, replacing uses with strerror and errno. * libguile/win32-socket.c: * libguile/win32-socket.h: Remove. Mingw has suitable replacements. * configure.ac: * libguile/Makefile.am (EXTRA_libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES): (noinst_HEADERS): Update for win32-socket removal.
This commit is contained in:
parent
7e369c3899
commit
09b204d387
7 changed files with 18 additions and 609 deletions
|
@ -707,9 +707,6 @@ case $host in
|
||||||
[Define if you have the <winsock2.h> header file.])])
|
[Define if you have the <winsock2.h> header file.])])
|
||||||
AC_CHECK_LIB(ws2_32, main)
|
AC_CHECK_LIB(ws2_32, main)
|
||||||
AC_LIBOBJ([win32-uname])
|
AC_LIBOBJ([win32-uname])
|
||||||
if test "$enable_networking" = yes ; then
|
|
||||||
AC_LIBOBJ([win32-socket])
|
|
||||||
fi
|
|
||||||
if test "$enable_shared" = yes ; then
|
if test "$enable_shared" = yes ; then
|
||||||
EXTRA_DEFS="-DSCM_IMPORT"
|
EXTRA_DEFS="-DSCM_IMPORT"
|
||||||
AC_DEFINE([USE_DLL_IMPORT], 1,
|
AC_DEFINE([USE_DLL_IMPORT], 1,
|
||||||
|
|
|
@ -434,7 +434,7 @@ EXTRA_libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES = _scm.h \
|
||||||
dynl.c regex-posix.c \
|
dynl.c regex-posix.c \
|
||||||
posix.c net_db.c socket.c \
|
posix.c net_db.c socket.c \
|
||||||
debug-malloc.c mkstemp.c \
|
debug-malloc.c mkstemp.c \
|
||||||
win32-uname.c win32-socket.c \
|
win32-uname.c \
|
||||||
locale-categories.h
|
locale-categories.h
|
||||||
|
|
||||||
## delete guile-snarf.awk from the installation bindir, in case it's
|
## delete guile-snarf.awk from the installation bindir, in case it's
|
||||||
|
@ -450,7 +450,7 @@ install-exec-hook:
|
||||||
noinst_HEADERS = conv-integer.i.c conv-uinteger.i.c \
|
noinst_HEADERS = conv-integer.i.c conv-uinteger.i.c \
|
||||||
srfi-14.i.c \
|
srfi-14.i.c \
|
||||||
quicksort.i.c \
|
quicksort.i.c \
|
||||||
win32-uname.h win32-socket.h \
|
win32-uname.h \
|
||||||
private-gc.h private-options.h
|
private-gc.h private-options.h
|
||||||
|
|
||||||
# vm instructions
|
# vm instructions
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2004, 2006, 2010,
|
/* Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2004, 2006, 2010,
|
||||||
* 2012 Free Software Foundation, Inc.
|
* 2012, 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
|
||||||
|
@ -100,17 +100,6 @@ SCM_DEFINE (scm_error_scm, "scm-error", 5, 0, 0,
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
#if defined __MINGW32__ && defined HAVE_NETWORKING
|
|
||||||
# include "win32-socket.h"
|
|
||||||
# define SCM_I_STRERROR(err) \
|
|
||||||
((err >= WSABASEERR) ? scm_i_socket_strerror (err) : strerror (err))
|
|
||||||
# define SCM_I_ERRNO() \
|
|
||||||
(errno ? errno : scm_i_socket_errno ())
|
|
||||||
#else
|
|
||||||
# define SCM_I_STRERROR(err) strerror (err)
|
|
||||||
# define SCM_I_ERRNO() errno
|
|
||||||
#endif /* __MINGW32__ */
|
|
||||||
|
|
||||||
/* strerror may not be thread safe, for instance in glibc (version 2.3.2) an
|
/* strerror may not be thread safe, for instance in glibc (version 2.3.2) an
|
||||||
error number not among the known values results in a string like "Unknown
|
error number not among the known values results in a string like "Unknown
|
||||||
error 9999" formed in a static buffer, which will be overwritten by a
|
error 9999" formed in a static buffer, which will be overwritten by a
|
||||||
|
@ -136,7 +125,7 @@ SCM_DEFINE (scm_strerror, "strerror", 1, 0, 0,
|
||||||
scm_dynwind_begin (0);
|
scm_dynwind_begin (0);
|
||||||
scm_i_dynwind_pthread_mutex_lock (&scm_i_misc_mutex);
|
scm_i_dynwind_pthread_mutex_lock (&scm_i_misc_mutex);
|
||||||
|
|
||||||
ret = scm_from_locale_string (SCM_I_STRERROR (scm_to_int (err)));
|
ret = scm_from_locale_string (strerror (scm_to_int (err)));
|
||||||
|
|
||||||
scm_dynwind_end ();
|
scm_dynwind_end ();
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -147,7 +136,7 @@ SCM_GLOBAL_SYMBOL (scm_system_error_key, "system-error");
|
||||||
void
|
void
|
||||||
scm_syserror (const char *subr)
|
scm_syserror (const char *subr)
|
||||||
{
|
{
|
||||||
SCM err = scm_from_int (SCM_I_ERRNO ());
|
SCM err = scm_from_int (errno);
|
||||||
|
|
||||||
/* It could be that we're getting here because the syscall was
|
/* It could be that we're getting here because the syscall was
|
||||||
interrupted by a signal. In that case a signal handler might have
|
interrupted by a signal. In that case a signal handler might have
|
||||||
|
|
|
@ -55,32 +55,12 @@
|
||||||
#endif
|
#endif
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
#include <full-write.h>
|
|
||||||
|
|
||||||
#include "libguile/iselect.h"
|
#include "libguile/iselect.h"
|
||||||
|
|
||||||
/* Some defines for Windows (native port, not Cygwin). */
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
# include <sys/stat.h>
|
|
||||||
# include <winsock2.h>
|
|
||||||
#endif /* __MINGW32__ */
|
|
||||||
|
|
||||||
#include <full-write.h>
|
#include <full-write.h>
|
||||||
|
|
||||||
/* Mingw (version 3.4.5, circa 2006) has ftruncate as an alias for chsize
|
|
||||||
already, but have this code here in case that wasn't so in past versions,
|
|
||||||
or perhaps to help other minimal DOS environments.
|
|
||||||
|
|
||||||
gnulib ftruncate.c has code using fcntl F_CHSIZE and F_FREESP, which
|
|
||||||
might be possibilities if we've got other systems without ftruncate. */
|
|
||||||
|
|
||||||
#if defined HAVE_CHSIZE && ! defined HAVE_FTRUNCATE
|
|
||||||
# define ftruncate(fd, size) chsize (fd, size)
|
|
||||||
# undef HAVE_FTRUNCATE
|
|
||||||
# define HAVE_FTRUNCATE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if SIZEOF_OFF_T == SIZEOF_INT
|
#if SIZEOF_OFF_T == SIZEOF_INT
|
||||||
#define OFF_T_MAX INT_MAX
|
#define OFF_T_MAX INT_MAX
|
||||||
#define OFF_T_MIN INT_MIN
|
#define OFF_T_MIN INT_MIN
|
||||||
|
@ -496,48 +476,6 @@ SCM_DEFINE (scm_open_file, "open-file", 2, 0, 0,
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
/*
|
|
||||||
* Try getting the appropiate file flags for a given file descriptor
|
|
||||||
* under Windows. This incorporates some fancy operations because Windows
|
|
||||||
* differentiates between file, pipe and socket descriptors.
|
|
||||||
*/
|
|
||||||
#ifndef O_ACCMODE
|
|
||||||
# define O_ACCMODE 0x0003
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int getflags (int fdes)
|
|
||||||
{
|
|
||||||
int flags = 0;
|
|
||||||
struct stat buf;
|
|
||||||
int error, optlen = sizeof (int);
|
|
||||||
|
|
||||||
/* Is this a socket ? */
|
|
||||||
if (getsockopt (fdes, SOL_SOCKET, SO_ERROR, (void *) &error, &optlen) >= 0)
|
|
||||||
flags = O_RDWR;
|
|
||||||
/* Maybe a regular file ? */
|
|
||||||
else if (fstat (fdes, &buf) < 0)
|
|
||||||
flags = -1;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Or an anonymous pipe handle ? */
|
|
||||||
if (buf.st_mode & _S_IFIFO)
|
|
||||||
flags = PeekNamedPipe ((HANDLE) _get_osfhandle (fdes), NULL, 0,
|
|
||||||
NULL, NULL, NULL) ? O_RDONLY : O_WRONLY;
|
|
||||||
/* stdin ? */
|
|
||||||
else if (fdes == fileno (stdin) && isatty (fdes))
|
|
||||||
flags = O_RDONLY;
|
|
||||||
/* stdout / stderr ? */
|
|
||||||
else if ((fdes == fileno (stdout) || fdes == fileno (stderr)) &&
|
|
||||||
isatty (fdes))
|
|
||||||
flags = O_WRONLY;
|
|
||||||
else
|
|
||||||
flags = buf.st_mode;
|
|
||||||
}
|
|
||||||
return flags;
|
|
||||||
}
|
|
||||||
#endif /* __MINGW32__ */
|
|
||||||
|
|
||||||
/* Building Guile ports from a file descriptor. */
|
/* Building Guile ports from a file descriptor. */
|
||||||
|
|
||||||
/* Build a Scheme port from an open file descriptor `fdes'.
|
/* Build a Scheme port from an open file descriptor `fdes'.
|
||||||
|
@ -551,14 +489,10 @@ scm_i_fdes_to_port (int fdes, long mode_bits, SCM name)
|
||||||
{
|
{
|
||||||
SCM port;
|
SCM port;
|
||||||
scm_t_port *pt;
|
scm_t_port *pt;
|
||||||
int flags;
|
|
||||||
|
|
||||||
/* test that fdes is valid. */
|
/* Test that fdes is valid. */
|
||||||
#ifdef __MINGW32__
|
#ifdef F_GETFL
|
||||||
flags = getflags (fdes);
|
int flags = fcntl (fdes, F_GETFL, 0);
|
||||||
#else
|
|
||||||
flags = fcntl (fdes, F_GETFL, 0);
|
|
||||||
#endif
|
|
||||||
if (flags == -1)
|
if (flags == -1)
|
||||||
SCM_SYSERROR;
|
SCM_SYSERROR;
|
||||||
flags &= O_ACCMODE;
|
flags &= O_ACCMODE;
|
||||||
|
@ -568,6 +502,13 @@ scm_i_fdes_to_port (int fdes, long mode_bits, SCM name)
|
||||||
{
|
{
|
||||||
SCM_MISC_ERROR ("requested file mode not available on fdes", SCM_EOL);
|
SCM_MISC_ERROR ("requested file mode not available on fdes", SCM_EOL);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* If we don't have F_GETFL, as on mingw, at least we can test that
|
||||||
|
it is a valid file descriptor. */
|
||||||
|
struct stat st;
|
||||||
|
if (fstat (fdes, &st) != 0)
|
||||||
|
SCM_SYSERROR;
|
||||||
|
#endif
|
||||||
|
|
||||||
scm_i_scm_pthread_mutex_lock (&scm_i_port_table_mutex);
|
scm_i_scm_pthread_mutex_lock (&scm_i_port_table_mutex);
|
||||||
|
|
||||||
|
@ -639,8 +580,6 @@ fport_input_waiting (SCM port)
|
||||||
return FD_ISSET (fdes, &read_set) ? 1 : 0;
|
return FD_ISSET (fdes, &read_set) ? 1 : 0;
|
||||||
|
|
||||||
#elif HAVE_IOCTL && defined (FIONREAD)
|
#elif HAVE_IOCTL && defined (FIONREAD)
|
||||||
/* Note: cannot test just defined(FIONREAD) here, since mingw has FIONREAD
|
|
||||||
(for use with winsock ioctlsocket()) but not ioctl(). */
|
|
||||||
int fdes = SCM_FSTREAM (port)->fdes;
|
int fdes = SCM_FSTREAM (port)->fdes;
|
||||||
int remir;
|
int remir;
|
||||||
ioctl(fdes, FIONREAD, &remir);
|
ioctl(fdes, FIONREAD, &remir);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
|
/* Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||||
* 2006, 2007, 2009, 2011, 2012 Free Software Foundation, Inc.
|
* 2006, 2007, 2009, 2011, 2012, 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
|
||||||
|
@ -44,11 +44,6 @@
|
||||||
# include "libguile/deprecation.h"
|
# include "libguile/deprecation.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
#include "win32-socket.h"
|
|
||||||
#include <netdb.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_STDINT_H
|
#ifdef HAVE_STDINT_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -59,9 +54,6 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#ifdef HAVE_WINSOCK2_H
|
|
||||||
#include <winsock2.h>
|
|
||||||
#else
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#ifdef HAVE_UNIX_DOMAIN_SOCKETS
|
#ifdef HAVE_UNIX_DOMAIN_SOCKETS
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
|
@ -69,7 +61,7 @@
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (HAVE_UNIX_DOMAIN_SOCKETS) && !defined (SUN_LEN)
|
#if defined (HAVE_UNIX_DOMAIN_SOCKETS) && !defined (SUN_LEN)
|
||||||
#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
|
#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
|
||||||
|
@ -1877,10 +1869,6 @@ scm_init_socket ()
|
||||||
scm_c_define ("MSG_DONTROUTE", scm_from_int (MSG_DONTROUTE));
|
scm_c_define ("MSG_DONTROUTE", scm_from_int (MSG_DONTROUTE));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
scm_i_init_socket_Win32 ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef IP_ADD_MEMBERSHIP
|
#ifdef IP_ADD_MEMBERSHIP
|
||||||
scm_c_define ("IP_ADD_MEMBERSHIP", scm_from_int (IP_ADD_MEMBERSHIP));
|
scm_c_define ("IP_ADD_MEMBERSHIP", scm_from_int (IP_ADD_MEMBERSHIP));
|
||||||
scm_c_define ("IP_DROP_MEMBERSHIP", scm_from_int (IP_DROP_MEMBERSHIP));
|
scm_c_define ("IP_DROP_MEMBERSHIP", scm_from_int (IP_DROP_MEMBERSHIP));
|
||||||
|
|
|
@ -1,469 +0,0 @@
|
||||||
/* Copyright (C) 2001, 2006, 2013 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* This 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 3 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This 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 this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
* 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include <config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "libguile/__scm.h"
|
|
||||||
#include "libguile/modules.h"
|
|
||||||
#include "libguile/numbers.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
#ifndef PATH_MAX
|
|
||||||
#define PATH_MAX 255
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "win32-socket.h"
|
|
||||||
|
|
||||||
/* Winsock API error description structure. The error description is
|
|
||||||
necessary because there is no error list available. */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
int error; /* Error code. */
|
|
||||||
char *str; /* Error description. */
|
|
||||||
int replace; /* Possible error code replacement. */
|
|
||||||
char *replace_str; /* Replacement symbol. */
|
|
||||||
char *correct_str; /* Original symbol. */
|
|
||||||
}
|
|
||||||
socket_error_t;
|
|
||||||
|
|
||||||
#define FILE_ETC_SERVICES "services"
|
|
||||||
#define ENVIRON_ETC_SERVICES "SERVICES"
|
|
||||||
#define FILE_ETC_NETWORKS "networks"
|
|
||||||
#define ENVIRON_ETC_NETWORKS "NETWORKS"
|
|
||||||
#define FILE_ETC_PROTOCOLS "protocol"
|
|
||||||
#define ENVIRON_ETC_PROTOCOLS "PROTOCOLS"
|
|
||||||
#define MAX_NAMLEN 256
|
|
||||||
#define MAX_ALIASES 4
|
|
||||||
|
|
||||||
/* Internal structure for a thread's M$-Windows servent interface. */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
FILE *fd; /* Current file. */
|
|
||||||
char file[PATH_MAX]; /* File name. */
|
|
||||||
struct servent ent; /* Return value. */
|
|
||||||
char name[MAX_NAMLEN]; /* Service name. */
|
|
||||||
char proto[MAX_NAMLEN]; /* Protocol name. */
|
|
||||||
char alias[MAX_ALIASES][MAX_NAMLEN]; /* All aliases. */
|
|
||||||
char *aliases[MAX_ALIASES]; /* Alias pointers. */
|
|
||||||
int port; /* Network port. */
|
|
||||||
}
|
|
||||||
scm_i_servent_t;
|
|
||||||
|
|
||||||
static scm_i_servent_t scm_i_servent;
|
|
||||||
|
|
||||||
/* Internal structure for a thread's M$-Windows protoent interface. */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
FILE *fd; /* Current file. */
|
|
||||||
char file[PATH_MAX]; /* File name. */
|
|
||||||
struct protoent ent; /* Return value. */
|
|
||||||
char name[MAX_NAMLEN]; /* Protocol name. */
|
|
||||||
char alias[MAX_ALIASES][MAX_NAMLEN]; /* All aliases. */
|
|
||||||
char *aliases[MAX_ALIASES]; /* Alias pointers. */
|
|
||||||
int proto; /* Protocol number. */
|
|
||||||
}
|
|
||||||
scm_i_protoent_t;
|
|
||||||
|
|
||||||
static scm_i_protoent_t scm_i_protoent;
|
|
||||||
|
|
||||||
/* Define replacement symbols for most of the WSA* error codes. */
|
|
||||||
#ifndef EWOULDBLOCK
|
|
||||||
# define EWOULDBLOCK WSAEWOULDBLOCK
|
|
||||||
#endif
|
|
||||||
#ifndef EINPROGRESS
|
|
||||||
# define EINPROGRESS WSAEINPROGRESS
|
|
||||||
#endif
|
|
||||||
#ifndef EALREADY
|
|
||||||
# define EALREADY WSAEALREADY
|
|
||||||
#endif
|
|
||||||
#ifndef EDESTADDRREQ
|
|
||||||
# define EDESTADDRREQ WSAEDESTADDRREQ
|
|
||||||
#endif
|
|
||||||
#ifndef EMSGSIZE
|
|
||||||
# define EMSGSIZE WSAEMSGSIZE
|
|
||||||
#endif
|
|
||||||
#ifndef EPROTOTYPE
|
|
||||||
# define EPROTOTYPE WSAEPROTOTYPE
|
|
||||||
#endif
|
|
||||||
#ifndef ENOTSOCK
|
|
||||||
# define ENOTSOCK WSAENOTSOCK
|
|
||||||
#endif
|
|
||||||
#ifndef ENOPROTOOPT
|
|
||||||
# define ENOPROTOOPT WSAENOPROTOOPT
|
|
||||||
#endif
|
|
||||||
#ifndef EPROTONOSUPPORT
|
|
||||||
# define EPROTONOSUPPORT WSAEPROTONOSUPPORT
|
|
||||||
#endif
|
|
||||||
#ifndef ESOCKTNOSUPPORT
|
|
||||||
# define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
|
|
||||||
#endif
|
|
||||||
#ifndef EOPNOTSUPP
|
|
||||||
# define EOPNOTSUPP WSAEOPNOTSUPP
|
|
||||||
#endif
|
|
||||||
#ifndef EPFNOSUPPORT
|
|
||||||
# define EPFNOSUPPORT WSAEPFNOSUPPORT
|
|
||||||
#endif
|
|
||||||
#ifndef EAFNOSUPPORT
|
|
||||||
# define EAFNOSUPPORT WSAEAFNOSUPPORT
|
|
||||||
#endif
|
|
||||||
#ifndef EADDRINUSE
|
|
||||||
# define EADDRINUSE WSAEADDRINUSE
|
|
||||||
#endif
|
|
||||||
#ifndef EADDRNOTAVAIL
|
|
||||||
# define EADDRNOTAVAIL WSAEADDRNOTAVAIL
|
|
||||||
#endif
|
|
||||||
#ifndef ENETDOWN
|
|
||||||
# define ENETDOWN WSAENETDOWN
|
|
||||||
#endif
|
|
||||||
#ifndef ENETUNREACH
|
|
||||||
# define ENETUNREACH WSAENETUNREACH
|
|
||||||
#endif
|
|
||||||
#ifndef ENETRESET
|
|
||||||
# define ENETRESET WSAENETRESET
|
|
||||||
#endif
|
|
||||||
#ifndef ECONNABORTED
|
|
||||||
# define ECONNABORTED WSAECONNABORTED
|
|
||||||
#endif
|
|
||||||
#ifndef ECONNRESET
|
|
||||||
# define ECONNRESET WSAECONNRESET
|
|
||||||
#endif
|
|
||||||
#ifndef ENOBUFS
|
|
||||||
# define ENOBUFS WSAENOBUFS
|
|
||||||
#endif
|
|
||||||
#ifndef EISCONN
|
|
||||||
# define EISCONN WSAEISCONN
|
|
||||||
#endif
|
|
||||||
#ifndef ENOTCONN
|
|
||||||
# define ENOTCONN WSAENOTCONN
|
|
||||||
#endif
|
|
||||||
#ifndef ESHUTDOWN
|
|
||||||
# define ESHUTDOWN WSAESHUTDOWN
|
|
||||||
#endif
|
|
||||||
#ifndef ETOOMANYREFS
|
|
||||||
# define ETOOMANYREFS WSAETOOMANYREFS
|
|
||||||
#endif
|
|
||||||
#ifndef ETIMEDOUT
|
|
||||||
# define ETIMEDOUT WSAETIMEDOUT
|
|
||||||
#endif
|
|
||||||
#ifndef ECONNREFUSED
|
|
||||||
# define ECONNREFUSED WSAECONNREFUSED
|
|
||||||
#endif
|
|
||||||
#ifndef ELOOP
|
|
||||||
# define ELOOP WSAELOOP
|
|
||||||
#endif
|
|
||||||
#ifndef EHOSTDOWN
|
|
||||||
# define EHOSTDOWN WSAEHOSTDOWN
|
|
||||||
#endif
|
|
||||||
#ifndef EHOSTUNREACH
|
|
||||||
# define EHOSTUNREACH WSAEHOSTUNREACH
|
|
||||||
#endif
|
|
||||||
#ifndef EPROCLIM
|
|
||||||
# define EPROCLIM WSAEPROCLIM
|
|
||||||
#endif
|
|
||||||
#ifndef EUSERS
|
|
||||||
# define EUSERS WSAEUSERS
|
|
||||||
#endif
|
|
||||||
#ifndef EDQUOT
|
|
||||||
# define EDQUOT WSAEDQUOT
|
|
||||||
#endif
|
|
||||||
#ifndef ESTALE
|
|
||||||
# define ESTALE WSAESTALE
|
|
||||||
#endif
|
|
||||||
#ifndef EREMOTE
|
|
||||||
# define EREMOTE WSAEREMOTE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* List of error structures. */
|
|
||||||
static socket_error_t socket_errno [] = {
|
|
||||||
/* 000 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 001 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 002 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 003 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 004 */ { WSAEINTR, "Interrupted function call", EINTR, NULL, "WSAEINTR" },
|
|
||||||
/* 005 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 006 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 007 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 008 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 009 */ { WSAEBADF, "Bad file number", EBADF, NULL, "WSAEBADF" },
|
|
||||||
/* 010 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 011 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 012 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 013 */ { WSAEACCES, "Permission denied", EACCES, NULL, "WSAEACCES" },
|
|
||||||
/* 014 */ { WSAEFAULT, "Bad address", EFAULT, NULL, "WSAEFAULT" },
|
|
||||||
/* 015 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 016 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 017 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 018 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 019 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 020 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 021 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 022 */ { WSAEINVAL, "Invalid argument", EINVAL, NULL, "WSAEINVAL" },
|
|
||||||
/* 023 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 024 */ { WSAEMFILE, "Too many open files", EMFILE, NULL, "WSAEMFILE" },
|
|
||||||
/* 025 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 026 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 027 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 028 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 029 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 030 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 031 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 032 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 033 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 034 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 035 */ { WSAEWOULDBLOCK, "Resource temporarily unavailable",
|
|
||||||
EWOULDBLOCK, "EWOULDBLOCK", "WSAEWOULDBLOCK" },
|
|
||||||
/* 036 */ { WSAEINPROGRESS, "Operation now in progress",
|
|
||||||
EINPROGRESS, "EINPROGRESS", "WSAEINPROGRESS" },
|
|
||||||
/* 037 */ { WSAEALREADY, "Operation already in progress",
|
|
||||||
EALREADY, "EALREADY", "WSAEALREADY" },
|
|
||||||
/* 038 */ { WSAENOTSOCK, "Socket operation on non-socket",
|
|
||||||
ENOTSOCK, "ENOTSOCK", "WSAENOTSOCK"},
|
|
||||||
/* 039 */ { WSAEDESTADDRREQ, "Destination address required",
|
|
||||||
EDESTADDRREQ, "EDESTADDRREQ", "WSAEDESTADDRREQ" },
|
|
||||||
/* 040 */ { WSAEMSGSIZE, "Message too long",
|
|
||||||
EMSGSIZE, "EMSGSIZE", "WSAEMSGSIZE" },
|
|
||||||
/* 041 */ { WSAEPROTOTYPE, "Protocol wrong type for socket",
|
|
||||||
EPROTOTYPE, "EPROTOTYPE", "WSAEPROTOTYPE" },
|
|
||||||
/* 042 */ { WSAENOPROTOOPT, "Bad protocol option",
|
|
||||||
ENOPROTOOPT, "ENOPROTOOPT", "WSAENOPROTOOPT" },
|
|
||||||
/* 043 */ { WSAEPROTONOSUPPORT, "Protocol not supported",
|
|
||||||
EPROTONOSUPPORT, "EPROTONOSUPPORT", "WSAEPROTONOSUPPORT" },
|
|
||||||
/* 044 */ { WSAESOCKTNOSUPPORT, "Socket type not supported",
|
|
||||||
ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT", "WSAESOCKTNOSUPPORT" },
|
|
||||||
/* 045 */ { WSAEOPNOTSUPP, "Operation not supported",
|
|
||||||
EOPNOTSUPP, "EOPNOTSUPP", "WSAEOPNOTSUPP" },
|
|
||||||
/* 046 */ { WSAEPFNOSUPPORT, "Protocol family not supported",
|
|
||||||
EPFNOSUPPORT, "EPFNOSUPPORT", "WSAEPFNOSUPPORT" },
|
|
||||||
/* 047 */ { WSAEAFNOSUPPORT,
|
|
||||||
"Address family not supported by protocol family",
|
|
||||||
EAFNOSUPPORT, "EAFNOSUPPORT", "WSAEAFNOSUPPORT" },
|
|
||||||
/* 048 */ { WSAEADDRINUSE, "Address already in use",
|
|
||||||
EADDRINUSE, "EADDRINUSE", "WSAEADDRINUSE" },
|
|
||||||
/* 049 */ { WSAEADDRNOTAVAIL, "Cannot assign requested address",
|
|
||||||
EADDRNOTAVAIL, "EADDRNOTAVAIL", "WSAEADDRNOTAVAIL" },
|
|
||||||
/* 050 */ { WSAENETDOWN, "Network is down",
|
|
||||||
ENETDOWN, "ENETDOWN", "WSAENETDOWN" },
|
|
||||||
/* 051 */ { WSAENETUNREACH, "Network is unreachable",
|
|
||||||
ENETUNREACH, "ENETUNREACH", "WSAENETUNREACH" },
|
|
||||||
/* 052 */ { WSAENETRESET, "Network dropped connection on reset",
|
|
||||||
ENETRESET, "ENETRESET", "WSAENETRESET" },
|
|
||||||
/* 053 */ { WSAECONNABORTED, "Software caused connection abort",
|
|
||||||
ECONNABORTED, "ECONNABORTED", "WSAECONNABORTED" },
|
|
||||||
/* 054 */ { WSAECONNRESET, "Connection reset by peer",
|
|
||||||
ECONNRESET, "ECONNRESET", "WSAECONNRESET" },
|
|
||||||
/* 055 */ { WSAENOBUFS, "No buffer space available",
|
|
||||||
ENOBUFS, "ENOBUFS", "WSAENOBUFS" },
|
|
||||||
/* 056 */ { WSAEISCONN, "Socket is already connected",
|
|
||||||
EISCONN, "EISCONN", "WSAEISCONN" },
|
|
||||||
/* 057 */ { WSAENOTCONN, "Socket is not connected",
|
|
||||||
ENOTCONN, "ENOTCONN", "WSAENOTCONN" },
|
|
||||||
/* 058 */ { WSAESHUTDOWN, "Cannot send after socket shutdown",
|
|
||||||
ESHUTDOWN, "ESHUTDOWN", "WSAESHUTDOWN" },
|
|
||||||
/* 059 */ { WSAETOOMANYREFS, "Too many references; can't splice",
|
|
||||||
ETOOMANYREFS, "ETOOMANYREFS", "WSAETOOMANYREFS" },
|
|
||||||
/* 060 */ { WSAETIMEDOUT, "Connection timed out",
|
|
||||||
ETIMEDOUT, "ETIMEDOUT", "WSAETIMEDOUT" },
|
|
||||||
/* 061 */ { WSAECONNREFUSED, "Connection refused",
|
|
||||||
ECONNREFUSED, "ECONNREFUSED", "WSAECONNREFUSED" },
|
|
||||||
/* 062 */ { WSAELOOP, "Too many levels of symbolic links",
|
|
||||||
ELOOP, "ELOOP", "WSAELOOP" },
|
|
||||||
/* 063 */ { WSAENAMETOOLONG, "File name too long",
|
|
||||||
ENAMETOOLONG, NULL, "WSAENAMETOOLONG" },
|
|
||||||
/* 064 */ { WSAEHOSTDOWN, "Host is down",
|
|
||||||
EHOSTDOWN, "EHOSTDOWN", "WSAEHOSTDOWN" },
|
|
||||||
/* 065 */ { WSAEHOSTUNREACH, "No route to host",
|
|
||||||
EHOSTUNREACH, "EHOSTUNREACH", "WSAEHOSTUNREACH" },
|
|
||||||
/* 066 */ { WSAENOTEMPTY, "Directory not empty",
|
|
||||||
ENOTEMPTY, NULL, "WSAENOTEMPTY" },
|
|
||||||
/* 067 */ { WSAEPROCLIM, "Too many processes",
|
|
||||||
EPROCLIM, "EPROCLIM", "WSAEPROCLIM" },
|
|
||||||
/* 068 */ { WSAEUSERS, "Too many users",
|
|
||||||
EUSERS, "EUSERS", "WSAEUSERS" },
|
|
||||||
/* 069 */ { WSAEDQUOT, "Disc quota exceeded",
|
|
||||||
EDQUOT, "EDQUOT", "WSAEDQUOT" },
|
|
||||||
/* 070 */ { WSAESTALE, "Stale NFS file handle",
|
|
||||||
ESTALE, "ESTALE", "WSAESTALE" },
|
|
||||||
/* 071 */ { WSAEREMOTE, "Too many levels of remote in path",
|
|
||||||
EREMOTE, "EREMOTE", "WSAEREMOTE" },
|
|
||||||
/* 072 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 073 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 074 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 075 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 076 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 077 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 078 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 079 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 080 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 081 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 082 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 083 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 084 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 085 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 086 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 087 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 088 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 089 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 090 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 091 */ { WSASYSNOTREADY, "Network subsystem is unavailable",
|
|
||||||
0, NULL, "WSASYSNOTREADY" },
|
|
||||||
/* 092 */ { WSAVERNOTSUPPORTED, "WINSOCK.DLL version out of range",
|
|
||||||
0, NULL, "WSAVERNOTSUPPORTED" },
|
|
||||||
/* 093 */ { WSANOTINITIALISED, "Successful WSAStartup not yet performed",
|
|
||||||
0, NULL, "WSANOTINITIALISED" },
|
|
||||||
/* 094 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 095 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 096 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 097 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 098 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 099 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 100 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 101 */ { WSAEDISCON, "Graceful shutdown in progress",
|
|
||||||
0, NULL, "WSAEDISCON" },
|
|
||||||
/* 102 */ { WSAENOMORE, "No more services",
|
|
||||||
0, NULL, "WSAENOMORE" },
|
|
||||||
/* 103 */ { WSAECANCELLED, "Service lookup cancelled",
|
|
||||||
0, NULL, "WSAECANCELLED" },
|
|
||||||
/* 104 */ { WSAEINVALIDPROCTABLE, "Invalid procedure call table",
|
|
||||||
0, NULL, "WSAEINVALIDPROCTABLE" },
|
|
||||||
/* 105 */ { WSAEINVALIDPROVIDER, "Invalid service provider",
|
|
||||||
0, NULL, "WSAEINVALIDPROVIDER" },
|
|
||||||
/* 106 */ { WSAEPROVIDERFAILEDINIT, "Service provider failure",
|
|
||||||
0, NULL, "WSAEPROVIDERFAILEDINIT" },
|
|
||||||
/* 107 */ { WSASYSCALLFAILURE, "System call failed",
|
|
||||||
0, NULL, "WSASYSCALLFAILURE" },
|
|
||||||
/* 108 */ { WSASERVICE_NOT_FOUND, "No such service",
|
|
||||||
0, NULL, "WSASERVICE_NOT_FOUND" },
|
|
||||||
/* 109 */ { WSATYPE_NOT_FOUND, "Class not found",
|
|
||||||
0, NULL, "WSATYPE_NOT_FOUND" },
|
|
||||||
/* 110 */ { WSA_E_NO_MORE, "No more services",
|
|
||||||
0, NULL, "WSA_E_NO_MORE" },
|
|
||||||
/* 111 */ { WSA_E_CANCELLED, "Service lookup cancelled",
|
|
||||||
0, NULL, "WSA_E_CANCELLED" },
|
|
||||||
/* 112 */ { WSAEREFUSED, "Database query refused",
|
|
||||||
0, NULL, "WSAEREFUSED" },
|
|
||||||
/* end */ { -1, NULL, -1, NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Extended list of error structures. */
|
|
||||||
static socket_error_t socket_h_errno [] = {
|
|
||||||
/* 000 */ { 0, NULL, 0, NULL, NULL },
|
|
||||||
/* 001 */ { WSAHOST_NOT_FOUND, "Host not found",
|
|
||||||
HOST_NOT_FOUND, "HOST_NOT_FOUND", "WSAHOST_NOT_FOUND" },
|
|
||||||
/* 002 */ { WSATRY_AGAIN, "Non-authoritative host not found",
|
|
||||||
TRY_AGAIN, "TRY_AGAIN", "WSATRY_AGAIN" },
|
|
||||||
/* 003 */ { WSANO_RECOVERY, "This is a non-recoverable error",
|
|
||||||
NO_RECOVERY, "NO_RECOVERY", "WSANO_RECOVERY" },
|
|
||||||
/* 004 */ { WSANO_DATA, "Valid name, no data record of requested type",
|
|
||||||
NO_DATA, "NO_DATA", "WSANO_DATA" },
|
|
||||||
/* 005 */ { WSANO_ADDRESS, "No address, look for MX record",
|
|
||||||
NO_ADDRESS, "NO_ADDRESS", "WSANO_ADDRESS" },
|
|
||||||
/* end */ { -1, NULL, -1, NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Returns the result of @code{WSAGetLastError()}. */
|
|
||||||
int
|
|
||||||
scm_i_socket_errno (void)
|
|
||||||
{
|
|
||||||
return WSAGetLastError ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns a valid error message for Winsock-API error codes obtained via
|
|
||||||
@code{WSAGetLastError()} or NULL otherwise. */
|
|
||||||
char *
|
|
||||||
scm_i_socket_strerror (int error)
|
|
||||||
{
|
|
||||||
if (error >= WSABASEERR && error <= (WSABASEERR + 112))
|
|
||||||
return socket_errno[error - WSABASEERR].str;
|
|
||||||
else if (error >= (WSABASEERR + 1000) && error <= (WSABASEERR + 1005))
|
|
||||||
return socket_h_errno[error - (WSABASEERR + 1000)].str;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Constructs a valid filename for the given file @var{file} in the M$-Windows
|
|
||||||
directory. This is usually the default location for the network files. */
|
|
||||||
char *
|
|
||||||
scm_i_socket_filename (char *file)
|
|
||||||
{
|
|
||||||
static char dir[PATH_MAX];
|
|
||||||
int len = PATH_MAX;
|
|
||||||
|
|
||||||
len = GetWindowsDirectory (dir, len);
|
|
||||||
if (dir[len - 1] != '\\')
|
|
||||||
strcat (dir, "\\");
|
|
||||||
strcat (dir, file);
|
|
||||||
return dir;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Removes comments and white spaces at end of line and returns a pointer
|
|
||||||
to the end of the line. */
|
|
||||||
static char *
|
|
||||||
scm_i_socket_uncomment (char *line)
|
|
||||||
{
|
|
||||||
char *end;
|
|
||||||
|
|
||||||
if ((end = strchr (line, '#')) != NULL)
|
|
||||||
*end-- = '\0';
|
|
||||||
else
|
|
||||||
{
|
|
||||||
end = line + strlen (line) - 1;
|
|
||||||
while (end > line && (*end == '\r' || *end == '\n'))
|
|
||||||
*end-- = '\0';
|
|
||||||
}
|
|
||||||
while (end > line && isspace ((int) (*end)))
|
|
||||||
*end-- = '\0';
|
|
||||||
|
|
||||||
return end;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Define both the original and replacement error symbol is possible. Thus
|
|
||||||
the user is able to check symbolic errors after unsuccessful networking
|
|
||||||
function calls. */
|
|
||||||
static void
|
|
||||||
scm_socket_symbols_Win32 (socket_error_t * e)
|
|
||||||
{
|
|
||||||
while (e->error != -1)
|
|
||||||
{
|
|
||||||
if (e->error)
|
|
||||||
{
|
|
||||||
if (e->correct_str)
|
|
||||||
scm_c_define (e->correct_str, scm_from_int (e->error));
|
|
||||||
if (e->replace && e->replace_str)
|
|
||||||
scm_c_define (e->replace_str, scm_from_int (e->replace));
|
|
||||||
}
|
|
||||||
e++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize Winsock API under M$-Windows. */
|
|
||||||
void
|
|
||||||
scm_i_init_socket_Win32 (void)
|
|
||||||
{
|
|
||||||
scm_socket_symbols_Win32 (socket_errno);
|
|
||||||
scm_socket_symbols_Win32 (socket_h_errno);
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
/* classes: h_files */
|
|
||||||
|
|
||||||
#ifndef SCM_WIN32_SOCKET_H
|
|
||||||
#define SCM_WIN32_SOCKET_H
|
|
||||||
|
|
||||||
/* Copyright (C) 2001, 2006, 2013 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* This 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 3 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This 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 this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
* 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "libguile/__scm.h"
|
|
||||||
|
|
||||||
#ifdef SCM_HAVE_WINSOCK2_H
|
|
||||||
# include <winsock2.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int scm_i_socket_errno (void);
|
|
||||||
char * scm_i_socket_strerror (int error);
|
|
||||||
void scm_i_init_socket_Win32 (void);
|
|
||||||
char * scm_i_socket_filename (char *file);
|
|
||||||
|
|
||||||
#endif /* SCM_WIN32_SOCKET_H */
|
|
Loading…
Add table
Add a link
Reference in a new issue