diff --git a/configure.ac b/configure.ac index 4157982d3..d8919d3a9 100644 --- a/configure.ac +++ b/configure.ac @@ -707,9 +707,6 @@ case $host in [Define if you have the header file.])]) AC_CHECK_LIB(ws2_32, main) AC_LIBOBJ([win32-uname]) - if test "$enable_networking" = yes ; then - AC_LIBOBJ([win32-socket]) - fi if test "$enable_shared" = yes ; then EXTRA_DEFS="-DSCM_IMPORT" AC_DEFINE([USE_DLL_IMPORT], 1, diff --git a/libguile/Makefile.am b/libguile/Makefile.am index 8df2f7c4a..d77bdfe2d 100644 --- a/libguile/Makefile.am +++ b/libguile/Makefile.am @@ -434,7 +434,7 @@ EXTRA_libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES = _scm.h \ dynl.c regex-posix.c \ posix.c net_db.c socket.c \ debug-malloc.c mkstemp.c \ - win32-uname.c win32-socket.c \ + win32-uname.c \ locale-categories.h ## 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 \ srfi-14.i.c \ quicksort.i.c \ - win32-uname.h win32-socket.h \ + win32-uname.h \ private-gc.h private-options.h # vm instructions diff --git a/libguile/error.c b/libguile/error.c index 790ed0571..0df4c737e 100644 --- a/libguile/error.c +++ b/libguile/error.c @@ -1,5 +1,5 @@ /* 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 * 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 -#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 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 @@ -136,7 +125,7 @@ SCM_DEFINE (scm_strerror, "strerror", 1, 0, 0, scm_dynwind_begin (0); 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 (); return ret; @@ -147,7 +136,7 @@ SCM_GLOBAL_SYMBOL (scm_system_error_key, "system-error"); void 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 interrupted by a signal. In that case a signal handler might have diff --git a/libguile/fports.c b/libguile/fports.c index c1a2800a2..cdb9f99a9 100644 --- a/libguile/fports.c +++ b/libguile/fports.c @@ -55,32 +55,12 @@ #endif #include #include - -#include +#include #include "libguile/iselect.h" -/* Some defines for Windows (native port, not Cygwin). */ -#ifdef __MINGW32__ -# include -# include -#endif /* __MINGW32__ */ - #include -/* 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 #define OFF_T_MAX INT_MAX #define OFF_T_MIN INT_MIN @@ -496,48 +476,6 @@ SCM_DEFINE (scm_open_file, "open-file", 2, 0, 0, #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. */ /* 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_t_port *pt; - int flags; - /* test that fdes is valid. */ -#ifdef __MINGW32__ - flags = getflags (fdes); -#else - flags = fcntl (fdes, F_GETFL, 0); -#endif + /* Test that fdes is valid. */ +#ifdef F_GETFL + int flags = fcntl (fdes, F_GETFL, 0); if (flags == -1) SCM_SYSERROR; 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); } +#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); @@ -639,8 +580,6 @@ fport_input_waiting (SCM port) return FD_ISSET (fdes, &read_set) ? 1 : 0; #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 remir; ioctl(fdes, FIONREAD, &remir); diff --git a/libguile/socket.c b/libguile/socket.c index 5119ce3c6..ecb6754ae 100644 --- a/libguile/socket.c +++ b/libguile/socket.c @@ -1,5 +1,5 @@ /* 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 * modify it under the terms of the GNU Lesser General Public License @@ -44,11 +44,6 @@ # include "libguile/deprecation.h" #endif -#ifdef __MINGW32__ -#include "win32-socket.h" -#include -#endif - #ifdef HAVE_STDINT_H #include #endif @@ -59,9 +54,6 @@ #include #endif #include -#ifdef HAVE_WINSOCK2_H -#include -#else #include #ifdef HAVE_UNIX_DOMAIN_SOCKETS #include @@ -69,7 +61,7 @@ #include #include #include -#endif + #if defined (HAVE_UNIX_DOMAIN_SOCKETS) && !defined (SUN_LEN) #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)); #endif -#ifdef __MINGW32__ - scm_i_init_socket_Win32 (); -#endif - #ifdef 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)); diff --git a/libguile/win32-socket.c b/libguile/win32-socket.c deleted file mode 100644 index 7ffb9611f..000000000 --- a/libguile/win32-socket.c +++ /dev/null @@ -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 -#endif - -#include "libguile/__scm.h" -#include "libguile/modules.h" -#include "libguile/numbers.h" - -#include -#include -#include -#include -#include -#include - -#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); -} diff --git a/libguile/win32-socket.h b/libguile/win32-socket.h deleted file mode 100644 index 0168c064c..000000000 --- a/libguile/win32-socket.h +++ /dev/null @@ -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 -#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 */