Windows: remove XP support and forbid compilation and run on this platform
authorVincent Torri <vincent.torri@gmail.com>
Sun, 1 Oct 2017 16:07:02 +0000 (17:07 +0100)
committerAndy Williams <andy@andywilliams.me>
Sun, 1 Oct 2017 17:09:46 +0000 (18:09 +0100)
Test Plan: run on XP

Reviewers: jpeg, cedric, ajwillia.ms

Reviewed By: ajwillia.ms

Subscribers: ajwillia.ms

Differential Revision: https://phab.enlightenment.org/D5245

14 files changed:
m4/efl.m4
m4/evil_windows.m4
src/Makefile_Edje.am
src/Makefile_Evil.am
src/lib/ecore_con/efl_net_dialer_windows.c
src/lib/ecore_con/efl_net_server_windows.c
src/lib/ecore_win32/ecore_win32.c
src/lib/eina/eina_debug.c
src/lib/evil/Evil.h
src/lib/evil/evil_inet.c [deleted file]
src/lib/evil/evil_inet.h [deleted file]
src/lib/evil/evil_macro.h
src/lib/evil/evil_macro_wrapper.h
src/lib/evil/evil_main.c

index a8ca427..4b896ed 100644 (file)
--- a/m4/efl.m4
+++ b/m4/efl.m4
@@ -427,7 +427,7 @@ m4_defn([UP])_LIBS=" ${m4_defn([UP])_LDFLAGS} ${EFLALL_COV_LIBS} ${EFLALL_LIBS}
 m4_defn([UP])_INTERNAL_LIBS="${m4_defn([UP])_INTERNAL_LIBS} ${requirements_internal_libs_[]m4_defn([DOWN])}"
 USE_[]m4_defn([UP])_LIBS="${m4_defn([UP])_LIBS} lib/${libdirname}/lib${libname}.la"
 USE_[]m4_defn([UP])_INTERNAL_LIBS="${m4_defn([UP])_INTERNAL_LIBS} lib/${libdirname}/lib${libname}.la"
-m4_defn([UP])_CFLAGS="${EFLALL_COV_CFLAGS} ${EFLALL_CFLAGS} ${m4_defn([UP])_CFLAGS} -I\$(top_srcdir)/src/lib/${libdirname} -I\$(top_builddir)/src/lib/${libdirname} -I\$(top_srcdir)/src/bindings/cxx/${libdirname} -I\$(top_builddir)/src/bindings/${libdirname} ${requirements_cflags_[]m4_defn([DOWN])} ${requirements_cflags_eflall} -DEFL_[]m4_defn([UP])_BUILD=1"
+m4_defn([UP])_CFLAGS="${EFL_WINDOWS_VERSION_CFLAGS} ${EFLALL_COV_CFLAGS} ${EFLALL_CFLAGS} ${m4_defn([UP])_CFLAGS} -I\$(top_srcdir)/src/lib/${libdirname} -I\$(top_builddir)/src/lib/${libdirname} -I\$(top_srcdir)/src/bindings/cxx/${libdirname} -I\$(top_builddir)/src/bindings/${libdirname} ${requirements_cflags_[]m4_defn([DOWN])} ${requirements_cflags_eflall} -DEFL_[]m4_defn([UP])_BUILD=1"
 requirements_pc_[]m4_defn([DOWN])="${requirements_pc_[]m4_defn([DOWN])} ${requirements_pc_eflall}"
 requirements_pc_deps_[]m4_defn([DOWN])="${requirements_pc_deps_[]m4_defn([DOWN])} ${requirements_pc_deps_eflall}"
 
index c59e95d..8876d6c 100644 (file)
@@ -12,15 +12,15 @@ AC_DEFUN([EFL_SELECT_WINDOWS_VERSION],
 dnl configure option
 
 AC_ARG_WITH([windows-version],
-   [AC_HELP_STRING([--with-windows-version], [select the target Windows version (xp, vista or win7) @<:@default=win7@:>@])],
+   [AC_HELP_STRING([--with-windows-version], [select the target Windows version (vista or win7) @<:@default=win7@:>@])],
    [
     if test "x${with_windows_version}" = "xvista" ; then
        _winver="vista"
     else
-       if test "x${with_windows_version}" = "xxp" ; then
-          _winver="xp"
-       else
+       if test "x${with_windows_version}" = "xwin7" ; then
           _winver="win7"
+       else
+          _winver="error"
        fi
     fi
    ],
@@ -39,8 +39,7 @@ case "${_winver}" in
      _efl_windows_version="Windows 7"
      ;;
   *)
-     EFL_WINDOWS_VERSION_CFLAGS="-D_WIN32_WINNT=0x0501"
-     _efl_windows_version="Windows XP"
+     AC_MSG_ERROR([Wrong Windows version passed to configure. Run ./configure --help])
      ;;
 esac
 
index 5b87413..e1afdc7 100644 (file)
@@ -262,6 +262,7 @@ $(CWARNFLAGS) \
 -DTARGET_VT=11
 if HAVE_WIN32
 bin_edje_epp_epp_CPPFLAGS += \
+@EFL_WINDOWS_VERSION_CFLAGS@ \
 -I$(top_srcdir)/src/lib/evil \
 -I$(top_builddir)/src/lib/evil
 bin_edje_epp_epp_LDADD = lib/evil/libevil.la
index 0efcb71..7aff77d 100644 (file)
@@ -9,7 +9,6 @@ dist_install_evilheaders_DATA = \
 lib/evil/Evil.h \
 lib/evil/evil_dlfcn.h \
 lib/evil/evil_fcntl.h \
-lib/evil/evil_inet.h \
 lib/evil/evil_langinfo.h \
 lib/evil/evil_locale.h \
 lib/evil/evil_macro.h \
@@ -36,7 +35,6 @@ lib/evil/evil_dlfcn.c \
 lib/evil/evil_fcntl.c \
 lib/evil/evil_fnmatch.c \
 lib/evil/evil_fnmatch_list_of_states.c \
-lib/evil/evil_inet.c \
 lib/evil/evil_langinfo.c \
 lib/evil/evil_locale.c \
 lib/evil/evil_link_xp.cpp \
index 451c7e9..f174d2d 100644 (file)
@@ -36,7 +36,7 @@ _efl_net_dialer_windows_efl_net_dialer_dial(Eo *o, Efl_Net_Dialer_Windows_Data *
    Eina_Error err;
    HANDLE h;
    char cstr[256], sstr[256];
-   ULONG cpid = 0, spid = 0;
+   ULONG cpid, spid;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(address, EINVAL);
    EINA_SAFETY_ON_TRUE_RETURN_VAL(strchr(address, '/') != NULL, EINVAL);
@@ -81,30 +81,25 @@ _efl_net_dialer_windows_efl_net_dialer_dial(Eo *o, Efl_Net_Dialer_Windows_Data *
         return err;
      }
 
-#if _WIN32_WINNT >= 0x0600
-  if (!GetNamedPipeClientProcessId(_efl_net_socket_windows_handle_get(o), &cpid))
-     {
-        char *msg = evil_last_error_get();
-        WRN("server=%p (%s) could not GetNamedPipeClientProcessId(o): %s", o, address, msg);
-        free(msg);
-     }
-   if (!GetNamedPipeServerProcessId(_efl_net_socket_windows_handle_get(o), &spid))
-     {
-        char *msg = evil_last_error_get();
-        WRN("server=%p (%s) could not GetNamedPipeServerProcessId(o): %s", o, address, msg);
-        free(msg);
+  if (GetNamedPipeClientProcessId(_efl_net_socket_windows_handle_get(o), &cpid))
+    snprintf(cstr, sizeof(cstr), "%s:%lu", address, cpid);
+  else
+    {
+       char *msg = evil_last_error_get();
+       WRN("server=%p (%s) could not GetNamedPipeClientProcessId(o): %s", o, address, msg);
+       free(msg);
+       eina_strlcpy(cstr, address, sizeof(cstr));
+    }
+
+  if (GetNamedPipeServerProcessId(_efl_net_socket_windows_handle_get(o), &spid))
+    snprintf(sstr, sizeof(sstr), "%s:%lu", address, spid);
+  else
+    {
+       char *msg = evil_last_error_get();
+       WRN("server=%p (%s) could not GetNamedPipeServerProcessId(o): %s", o, address, msg);
+       free(msg);
+       eina_strlcpy(sstr, address, sizeof(sstr));
      }
-#endif
-
-   if (cpid)
-     snprintf(cstr, sizeof(cstr), "%s:%lu", address, cpid);
-   else
-     eina_strlcpy(cstr, address, sizeof(cstr));
-
-   if (spid)
-     snprintf(sstr, sizeof(sstr), "%s:%lu", address, spid);
-   else
-     eina_strlcpy(sstr, address, sizeof(sstr));
 
    efl_net_socket_address_remote_set(o, sstr);
    efl_net_socket_address_local_set(o, cstr);
index d588f77..f964d93 100644 (file)
@@ -52,35 +52,30 @@ _efl_net_server_windows_client_listen_success(void *data, Eo *client, DWORD used
    Eo *o = data;
    Efl_Net_Server_Windows_Data *pd = efl_data_scope_get(o, MY_CLASS);
    char cstr[256], sstr[256];
-   ULONG cpid = 0, spid = 0;
+   ULONG cpid, spid;
    const char *addr = efl_net_server_address_get(o);
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(pd, EINVAL);
 
-#if _WIN32_WINNT >= 0x0600
-   if (!GetNamedPipeClientProcessId(_efl_net_socket_windows_handle_get(client), &cpid))
+   if (GetNamedPipeClientProcessId(_efl_net_socket_windows_handle_get(client), &cpid))
+     snprintf(cstr, sizeof(cstr), "%s:%lu", addr, cpid);
+   else
      {
         char *msg = evil_last_error_get();
         WRN("server=%p (%s) could not GetNamedPipeClientProcessId(client): %s", o, addr, msg);
         free(msg);
+        eina_strlcpy(cstr, addr, sizeof(cstr));
      }
-   if (!GetNamedPipeServerProcessId(_efl_net_socket_windows_handle_get(client), &spid))
+
+   if (GetNamedPipeServerProcessId(_efl_net_socket_windows_handle_get(client), &spid))
+     snprintf(sstr, sizeof(sstr), "%s:%lu", addr, spid);
+   else
      {
         char *msg = evil_last_error_get();
         WRN("server=%p (%s) could not GetNamedPipeServerProcessId(client): %s", o, addr, msg);
         free(msg);
+        eina_strlcpy(sstr, addr, sizeof(sstr));
      }
-#endif
-
-   if (cpid)
-     snprintf(cstr, sizeof(cstr), "%s:%lu", addr, cpid);
-   else
-     eina_strlcpy(cstr, addr, sizeof(cstr));
-
-   if (spid)
-     snprintf(sstr, sizeof(sstr), "%s:%lu", addr, spid);
-   else
-     eina_strlcpy(sstr, addr, sizeof(sstr));
 
    DBG("server=%p received incoming connection at %s<->%s", o, sstr, cstr);
 
index bbcb22d..c207f0b 100644 (file)
 
 /* FIXME: uncomment when mingw-w64 will be updated in win-builds */
 
-/* #if _WIN32_WINNT >= 0x0600 */
-/* # ifndef WM_CLIPBOARDUPDATE */
-#  define WM_CLIPBOARDUPDATE 0x031D
-/* # endif */
+/* #ifndef WM_CLIPBOARDUPDATE */
+# define WM_CLIPBOARDUPDATE 0x031D
 /* #endif */
 
 /* OLE IID for Drag'n Drop */
index 2bc0579..c72f495 100644 (file)
@@ -55,7 +55,7 @@
 #include <fcntl.h>
 
 #ifdef _WIN32
-# include <winsock2.h>
+# include <ws2tcpip.h>
 # include <Evil.h>
 #endif
 
index 837803c..c8f1f68 100644 (file)
@@ -110,7 +110,6 @@ typedef unsigned long  gid_t;
 #include "evil_macro.h"
 #include "evil_dlfcn.h"
 #include "evil_fcntl.h"
-#include "evil_inet.h"
 #include "evil_langinfo.h"
 #include "evil_locale.h"
 #include "evil_main.h"
diff --git a/src/lib/evil/evil_inet.c b/src/lib/evil/evil_inet.c
deleted file mode 100644 (file)
index 54cee3d..0000000
+++ /dev/null
@@ -1,645 +0,0 @@
-
-/*
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
- * Copyright (c) 1996,1999 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Modifications: Vincent Torri, for the integration in Evil
- * - modification of the name of some functions
- * * modification of the management of the error
- */
-
-#if ! (_WIN32_WINNT >= 0x600 /* _WIN32_WINNT_VISTA */)
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include <errno.h>
-#include <stdio.h>
-#include <ctype.h>
-
-#ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-#endif
-#include <winsock2.h>
-#undef WIN32_LEAN_AND_MEAN
-
-#include "evil_macro.h"
-#include "evil_inet.h"
-
-#ifndef EMSGSIZE
-# define EMSGSIZE WSAEMSGSIZE
-#endif
-
-#ifndef EAFNOSUPPORT
-# define EAFNOSUPPORT WSAEAFNOSUPPORT
-#endif
-
-#define SPRINTF(x) ((size_t)sprintf x)
-
-#define ERRNO         ((int)GetLastError())
-#define SET_ERRNO(x)  (SetLastError((DWORD)(x)))
-
-#define ISDIGIT(x)  (isdigit((int)  ((unsigned char)x)))
-#define ISXDIGIT(x) (isxdigit((int) ((unsigned char)x)))
-#define ISUPPER(x)  (isupper((int)  ((unsigned char)x)))
-
-#define NS_IN6ADDRSZ 16
-#define NS_INT16SZ 2
-#define NS_INADDRSZ sizeof(IN_ADDR)
-
-
-struct ares_in6_addr {
-  union {
-    unsigned char _S6_u8[16];
-  } _S6_un;
-};
-
-const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } };
-
-
-/*
- * static int
- * inet_net_pton_ipv4(src, dst, size)
- *      convert IPv4 network number from presentation to network format.
- *      accepts hex octets, hex strings, decimal octets, and /CIDR.
- *      "size" is in bytes and describes "dst".
- * return:
- *      number of bits, either imputed classfully or specified with /CIDR,
- *      or -1 if some failure occurred (check errno).  ENOENT means it was
- *      not an IPv4 network specification.
- * note:
- *      network byte order assumed.  this means 192.5.5.240/28 has
- *      0b11110000 in its fourth octet.
- * note:
- *      On Windows we store the error in the thread errno, not
- *      in the winsock error code. This is to avoid loosing the
- *      actual last winsock error. So use macro ERRNO to fetch the
- *      errno this funtion sets when returning (-1), not SOCKERRNO.
- * author:
- *      Paul Vixie (ISC), June 1996
- */
-static int
-inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
-{
-  static const char xdigits[] = "0123456789abcdef";
-  static const char digits[] = "0123456789";
-  int n, ch, tmp = 0, dirty, bits;
-  const unsigned char *odst = dst;
-
-  ch = *src++;
-  if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
-      && ISXDIGIT(src[1])) {
-    /* Hexadecimal: Eat nybble string. */
-    if (!size)
-      goto emsgsize;
-    dirty = 0;
-    src++;  /* skip x or X. */
-    while ((ch = *src++) != '\0' && ISXDIGIT(ch)) {
-      if (ISUPPER(ch))
-        ch = tolower(ch);
-      n = (int)(strchr(xdigits, ch) - xdigits);
-      if (dirty == 0)
-        tmp = n;
-      else
-        tmp = (tmp << 4) | n;
-      if (++dirty == 2) {
-        if (!size--)
-          goto emsgsize;
-        *dst++ = (unsigned char) tmp;
-        dirty = 0;
-      }
-    }
-    if (dirty) {  /* Odd trailing nybble? */
-      if (!size--)
-        goto emsgsize;
-      *dst++ = (unsigned char) (tmp << 4);
-    }
-  } else if (ISDIGIT(ch)) {
-    /* Decimal: eat dotted digit string. */
-    for (;;) {
-      tmp = 0;
-      do {
-        n = (int)(strchr(digits, ch) - digits);
-        tmp *= 10;
-        tmp += n;
-        if (tmp > 255)
-          goto enoent;
-      } while ((ch = *src++) != '\0' &&
-               ISDIGIT(ch));
-      if (!size--)
-        goto emsgsize;
-      *dst++ = (unsigned char) tmp;
-      if (ch == '\0' || ch == '/')
-        break;
-      if (ch != '.')
-        goto enoent;
-      ch = *src++;
-      if (!ISDIGIT(ch))
-        goto enoent;
-    }
-  } else
-    goto enoent;
-
-  bits = -1;
-  if (ch == '/' &&
-      ISDIGIT(src[0]) && dst > odst) {
-    /* CIDR width specifier.  Nothing can follow it. */
-    ch = *src++;    /* Skip over the /. */
-    bits = 0;
-    do {
-      n = (int)(strchr(digits, ch) - digits);
-      bits *= 10;
-      bits += n;
-    } while ((ch = *src++) != '\0' && ISDIGIT(ch));
-    if (ch != '\0')
-      goto enoent;
-    if (bits > 32)
-      goto emsgsize;
-  }
-
-  /* Firey death and destruction unless we prefetched EOS. */
-  if (ch != '\0')
-    goto enoent;
-
-  /* If nothing was written to the destination, we found no address. */
-  if (dst == odst)
-    goto enoent;
-  /* If no CIDR spec was given, infer width from net class. */
-  if (bits == -1) {
-    if (*odst >= 240)       /* Class E */
-      bits = 32;
-    else if (*odst >= 224)  /* Class D */
-      bits = 8;
-    else if (*odst >= 192)  /* Class C */
-      bits = 24;
-    else if (*odst >= 128)  /* Class B */
-      bits = 16;
-    else                    /* Class A */
-      bits = 8;
-    /* If imputed mask is narrower than specified octets, widen. */
-    if (bits < ((dst - odst) * 8))
-      bits = (int)(dst - odst) * 8;
-    /*
-     * If there are no additional bits specified for a class D
-     * address adjust bits to 4.
-     */
-    if (bits == 8 && *odst == 224)
-      bits = 4;
-  }
-  /* Extend network to cover the actual mask. */
-  while (bits > ((dst - odst) * 8)) {
-    if (!size--)
-      goto emsgsize;
-    *dst++ = '\0';
-  }
-  return (bits);
-
-  enoent:
-  SET_ERRNO(ENOENT);
-  return (-1);
-
-  emsgsize:
-  SET_ERRNO(EMSGSIZE);
-  return (-1);
-}
-
-static int
-getbits(const char *src, int *bitsp)
-{
-  static const char digits[] = "0123456789";
-  int n;
-  int val;
-  char ch;
-
-  val = 0;
-  n = 0;
-  while ((ch = *src++) != '\0') {
-    const char *pch;
-
-    pch = strchr(digits, ch);
-    if (pch != NULL) {
-      if (n++ != 0 && val == 0)       /* no leading zeros */
-        return (0);
-      val *= 10;
-      val += (pch - digits);
-      if (val > 128)                  /* range */
-        return (0);
-      continue;
-    }
-    return (0);
-  }
-  if (n == 0)
-    return (0);
-  *bitsp = val;
-  return (1);
-}
-
-static int
-getv4(const char *src, unsigned char *dst, int *bitsp)
-{
-  static const char digits[] = "0123456789";
-  unsigned char *odst = dst;
-  int n;
-  unsigned int val;
-  char ch;
-
-  val = 0;
-  n = 0;
-  while ((ch = *src++) != '\0') {
-    const char *pch;
-
-    pch = strchr(digits, ch);
-    if (pch != NULL) {
-      if (n++ != 0 && val == 0)       /* no leading zeros */
-        return (0);
-      val *= 10;
-      val += (pch - digits);
-      if (val > 255)                  /* range */
-        return (0);
-      continue;
-    }
-    if (ch == '.' || ch == '/') {
-      if (dst - odst > 3)             /* too many octets? */
-        return (0);
-      *dst++ = (unsigned char)val;
-      if (ch == '/')
-        return (getbits(src, bitsp));
-      val = 0;
-      n = 0;
-      continue;
-    }
-    return (0);
-  }
-  if (n == 0)
-    return (0);
-  if (dst - odst > 3)             /* too many octets? */
-    return (0);
-  *dst++ = (unsigned char)val;
-  return (1);
-}
-
-static int
-inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
-{
-  static const char xdigits_l[] = "0123456789abcdef",
-    xdigits_u[] = "0123456789ABCDEF";
-  unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
-  const char *xdigits, *curtok;
-  int ch, saw_xdigit;
-  unsigned int val;
-  int digits;
-  int bits;
-  size_t bytes;
-  int words;
-  int ipv4;
-
-  memset((tp = tmp), '\0', NS_IN6ADDRSZ);
-  endp = tp + NS_IN6ADDRSZ;
-  colonp = NULL;
-  /* Leading :: requires some special handling. */
-  if (*src == ':')
-    if (*++src != ':')
-      goto enoent;
-  curtok = src;
-  saw_xdigit = 0;
-  val = 0;
-  digits = 0;
-  bits = -1;
-  ipv4 = 0;
-  while ((ch = *src++) != '\0') {
-    const char *pch;
-
-    if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
-      pch = strchr((xdigits = xdigits_u), ch);
-    if (pch != NULL) {
-      val <<= 4;
-      val |= (pch - xdigits);
-      if (++digits > 4)
-        goto enoent;
-      saw_xdigit = 1;
-      continue;
-    }
-    if (ch == ':') {
-      curtok = src;
-      if (!saw_xdigit) {
-        if (colonp)
-          goto enoent;
-        colonp = tp;
-        continue;
-      } else if (*src == '\0')
-        goto enoent;
-      if (tp + NS_INT16SZ > endp)
-        return (0);
-      *tp++ = (unsigned char)((val >> 8) & 0xff);
-      *tp++ = (unsigned char)(val & 0xff);
-      saw_xdigit = 0;
-      digits = 0;
-      val = 0;
-      continue;
-    }
-    if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
-        getv4(curtok, tp, &bits) > 0) {
-      tp += NS_INADDRSZ;
-      saw_xdigit = 0;
-      ipv4 = 1;
-      break;  /* '\0' was seen by inet_pton4(). */
-    }
-    if (ch == '/' && getbits(src, &bits) > 0)
-      break;
-    goto enoent;
-  }
-  if (saw_xdigit) {
-    if (tp + NS_INT16SZ > endp)
-      goto enoent;
-    *tp++ = (unsigned char)((val >> 8) & 0xff);
-    *tp++ = (unsigned char)(val & 0xff);
-  }
-  if (bits == -1)
-    bits = 128;
-
-  words = (bits + 15) / 16;
-  if (words < 2)
-    words = 2;
-  if (ipv4)
-    words = 8;
-  endp =  tmp + 2 * words;
-
-  if (colonp != NULL) {
-    /*
-     * Since some memmove()'s erroneously fail to handle
-     * overlapping regions, we'll do the shift by hand.
-     */
-    const ssize_t n = tp - colonp;
-    ssize_t i;
-
-    if (tp == endp)
-      goto enoent;
-    for (i = 1; i <= n; i++) {
-      *(endp - i) = *(colonp + n - i);
-      *(colonp + n - i) = 0;
-    }
-    tp = endp;
-  }
-  if (tp != endp)
-    goto enoent;
-
-  bytes = (bits + 7) / 8;
-  if (bytes > size)
-    goto emsgsize;
-  memcpy(dst, tmp, bytes);
-  return (bits);
-
-  enoent:
-  SET_ERRNO(ENOENT);
-  return (-1);
-
-  emsgsize:
-  SET_ERRNO(EMSGSIZE);
-  return (-1);
-}
-
-/*
- * int
- * inet_net_pton(af, src, dst, size)
- *      convert network number from presentation to network format.
- *      accepts hex octets, hex strings, decimal octets, and /CIDR.
- *      "size" is in bytes and describes "dst".
- * return:
- *      number of bits, either imputed classfully or specified with /CIDR,
- *      or -1 if some failure occurred (check errno).  ENOENT means it was
- *      not a valid network specification.
- * note:
- *      On Windows we store the error in the thread errno, not
- *      in the winsock error code. This is to avoid loosing the
- *      actual last winsock error. So use macro ERRNO to fetch the
- *      errno this funtion sets when returning (-1), not SOCKERRNO.
- * author:
- *      Paul Vixie (ISC), June 1996
- */
-static int
-ares_inet_net_pton(int af, const char *src, void *dst, size_t size)
-{
-  switch (af) {
-  case AF_INET:
-    return (inet_net_pton_ipv4(src, dst, size));
-  case AF_INET6:
-    return (inet_net_pton_ipv6(src, dst, size));
-  default:
-    SET_ERRNO(EAFNOSUPPORT);
-    return (-1);
-  }
-}
-
-int
-evil_inet_pton(int af, const char *src, void *dst)
-{
-  int result;
-  size_t size;
-
-  if (af == AF_INET)
-    size = sizeof(struct in_addr);
-  else if (af == AF_INET6)
-    size = sizeof(struct ares_in6_addr);
-  else
-  {
-    SET_ERRNO(EAFNOSUPPORT);
-    return -1;
-  }
-  result = ares_inet_net_pton(af, src, dst, size);
-  if ((result == -1) && (ERRNO == ENOENT))
-    return 0;
-  return (result > -1 ? 1 : -1);
-}
-
-/* const char *
- * inet_ntop4(src, dst, size)
- *     format an IPv4 address, more or less like inet_ntoa()
- * return:
- *     `dst' (as a const)
- * notes:
- *     (1) uses no statics
- *     (2) takes a unsigned char* not an in_addr as input
- * author:
- *     Paul Vixie, 1996.
- */
-static const char *
-inet_ntop4(const unsigned char *src, char *dst, size_t size)
-{
-  static const char fmt[] = "%u.%u.%u.%u";
-  char tmp[sizeof "255.255.255.255"];
-
-  if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size)
-    {
-      SET_ERRNO(ENOSPC);
-      return (NULL);
-    }
-    strcpy(dst, tmp);
-    return (dst);
-}
-
-/* const char *
- * inet_ntop6(src, dst, size)
- *    convert IPv6 binary address into presentation (printable) format
- * author:
- *    Paul Vixie, 1996.
- */
-static const char *
-inet_ntop6(const unsigned char *src, char *dst, size_t size)
-{
-  /*
-   * Note that int32_t and int16_t need only be "at least" large enough
-   * to contain a value of the specified size.  On some systems, like
-   * Crays, there is no such thing as an integer variable with 16 bits.
-   * Keep this in mind if you think this function should have been coded
-   * to use pointer overlays.  All the world's not a VAX.
-   */
-  char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
-  char *tp;
-  struct {
-    long base;
-    long len;
-  } best, cur;
-  unsigned long words[NS_IN6ADDRSZ / NS_INT16SZ];
-  int i;
-
-  /*
-   * Preprocess:
-   *  Copy the input (bytewise) array into a wordwise array.
-   *  Find the longest run of 0x00's in src[] for :: shorthanding.
-   */
-  memset(words, '\0', sizeof(words));
-  for (i = 0; i < NS_IN6ADDRSZ; i++)
-      words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
-
-  best.base = -1;
-  cur.base = -1;
-  best.len = 0;
-  cur.len = 0;
-
-  for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
-    {
-      if (words[i] == 0)
-        {
-          if (cur.base == -1)
-            cur.base = i, cur.len = 1;
-          else
-            cur.len++;
-        }
-      else
-        {
-          if (cur.base != -1)
-            {
-              if (best.base == -1 || cur.len > best.len)
-                best = cur;
-              cur.base = -1;
-            }
-        }
-    }
-  if (cur.base != -1)
-    {
-      if (best.base == -1 || cur.len > best.len)
-        best = cur;
-    }
-  if (best.base != -1 && best.len < 2)
-    best.base = -1;
-
-  /*
-   * Format the result.
-   */
-  tp = tmp;
-  for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
-    {
-      /* Are we inside the best run of 0x00's? */
-      if (best.base != -1 && i >= best.base &&
-          i < (best.base + best.len))
-        {
-          if (i == best.base)
-             *tp++ = ':';
-          continue;
-        }
-      /* Are we following an initial run of 0x00s or any real hex? */
-      if (i != 0)
-        *tp++ = ':';
-      /* Is this address an encapsulated IPv4? */
-      if (i == 6 && best.base == 0 &&
-          (best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
-        {
-          if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp)))
-            return (NULL);
-          tp += strlen(tp);
-          break;
-        }
-        tp += SPRINTF((tp, "%lx", words[i]));
-    }
-
-  /* Was it a trailing run of 0x00's? */
-  if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
-    *tp++ = ':';
-  *tp++ = '\0';
-
-  /*
-   * Check for overflow, copy, and we're done.
-   */
-  if ((size_t)(tp - tmp) > size)
-    {
-      SET_ERRNO(ENOSPC);
-      return (NULL);
-    }
-  strcpy(dst, tmp);
-  return (dst);
-}
-
-/* char *
- * inet_ntop(af, src, dst, size)
- *     convert a network format address to presentation format.
- * return:
- *     pointer to presentation format address (`dst'), or NULL (see errno).
- * note:
- *      On Windows we store the error in the thread errno, not
- *      in the winsock error code. This is to avoid loosing the
- *      actual last winsock error. So use macro ERRNO to fetch the
- *      errno this funtion sets when returning NULL, not SOCKERRNO.
- * author:
- *     Paul Vixie, 1996.
- */
-static const char *
-ares_inet_ntop(int af, const void *src, char *dst, size_t size)
-{
-  switch (af)
-    {
-    case AF_INET:
-      return (inet_ntop4(src, dst, size));
-    case AF_INET6:
-      return (inet_ntop6(src, dst, size));
-    default:
-      SET_ERRNO(EAFNOSUPPORT);
-      return (NULL);
-    }
-  /* NOTREACHED */
-}
-
-const char *evil_inet_ntop(int af, const char *src, void *dst, size_t size)
-{
-  const char *result;
-  result = ares_inet_ntop(af, src, dst, size);
-  if ((result == NULL) && (ERRNO == ENOSPC))
-    return NULL;
-  return result;
-}
-
-#endif
diff --git a/src/lib/evil/evil_inet.h b/src/lib/evil/evil_inet.h
deleted file mode 100644 (file)
index fb4e072..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-
-/* Copyright (C) 2005 by Daniel Stenberg
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting
- * documentation, and that the name of M.I.T. not be used in
- * advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- * M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is"
- * without express or implied warranty.
- */
-
-#ifndef __EVIL_INET_H__
-#define __EVIL_INET_H__
-
-
-#if ! (_WIN32_WINNT >= 0x600 /* _WIN32_WINNT_VISTA */)
-
-
-/**
- * @file evil_inet.h
- * @brief The file that provides functions ported from Unix in arpa/inet.h.
- * @defgroup Evil_Inet_Group Inet.h functions
- * @ingroup Evil
- *
- * This header provides functions ported from Unix in arpa/inet.h.
- *
- * @{
- */
-
-/**
- * @brief Convert IPv4 and IPv6 addresses from text to binary form.
- *
- * @param af The address family.
- * @param src The address to convert.
- * @param dst The converted address structure.
- * @return 1 on success, 0 or -1 otherwise.
- *
- * This function converts IPv4 and IPv6 addresses from @p src to the
- * binary form @p dst. The following address families to pass to @p af
- * are currently supported:
- *
- * <ul>
- * <li>i AF_INET: @p src points to a character string containing an IPv4
- * network address in dotted-decimal format, "ddd.ddd.ddd.ddd", where
- * ddd is a decimal number of up to three digits in the range 0 to
- * 255. The address is converted to a struct in_addr and copied to
- * dst, which must be sizeof(struct in_addr) (4) bytes (32 bits) long.
- * <li> AF_INET6: @p     src points to a character string containing an
- * IPv6 network address. The address is converted to a struct in6_addr
- * and copied to dst, which must be sizeof(struct in6_addr) (16) bytes
- * (128 bits) long. The allowed formats for IPv6 addresses follow
- * these rules:
- * <ol>
- * <li>The preferred format is x:x:x:x:x:x:x:x. This form consists of
- * eight hexadecimal numbers, each of which expresses a 16-bit value
- * (i.e., each x can be up to 4 hex digits).
- * <li>A series of contiguous zero values in the preferred format can
- * be abbreviated to ::. Only one instance of :: can occur in an
- * address. For example, the loopback address 0:0:0:0:0:0:0:1 can be
- * abbreviated as ::1. The wildcard address, consisting of all zeros,
- * can be written as ::.
- * <li>An alternate format is useful for expressing IPv4-mapped IPv6
- * addresses. This form is written as x:x:x:x:x:x:d.d.d.d, where the
- * six leading xs are hexadecimal values that define the six
- * most-significant 16-bit pieces of the address (i.e., 96 bits), and
- * the ds express a value in dotted-decimal notation that defines the
- * least significant 32 bits of the address. An example of such an
- * address is :: FFFF:204.152.189.116.
- * </ul>
- * </ul>
- * On success this function returns 1 (network address was successfully
- * converted). 0 is returned if @p src does not contain a character
- * string representing a valid network address in the specified
- * address family. If af does not contain a valid address family, -1
- * is returned and errno is set to EAFNOSUPPORT.
- *
- * @see evil_inet_ntop()
- * @see inet_ntop()
- *
- * Conformity: POSIX.1-2001.
- *
- * Supported OS: Windows XP, CE.
- *
- */
-EAPI int evil_inet_pton(int af, const char *src, void *dst);
-
-/**
- * @brief Convert IPv4 and IPv6 addresses from binary to text form.
- *
- * @param af The address family.
- * @param src The address structure to convert.
- * @param dst A buffer containing the converted string.
- * @param size The size of the buffer.
- * @return 1 on success, 0 otherwise.
- *
- * This function converts the network address structure @p src in the
- * @p af address family into a character string. The resulting string
- * is copied to the buffer pointed to by @p dst, which must be a
- * non-NULL pointer. The caller specifies the number of bytes
- * available in this buffer in the argument @p size. The following
- * address families to pass to @p af are currently supported:
- *
- * @li AF_INET: @p src points to a struct in_addr (in network byte
- * order) which is converted to an IPv4 network address in the
- * dotted-decimal format, "ddd.ddd.ddd.ddd". The buffer @p dst must be
- * at least INET_ADDRSTRLEN bytes long.
- * @li AF_INET6: @p src points to a struct in6_addr (in network byte
- * order) which is converted to a representation of this address in
- * the most appropriate IPv6 network address format for this
- * address. The buffer @p dst must be at least INET6_ADDRSTRLEN bytes
- * long.
- *
- * On success, this function returns a non-NULL pointer to @p dst. NULL is
- * returned if there was an error, with errno set to indicate the
- * error.
- *
- * @see evil_inet_pton()
- * @see inet_pton()
- *
- * Conformity: POSIX.1-2001.
- *
- * Supported OS: Windows XP, CE.
- *
- */
-EAPI const char *evil_inet_ntop(int af, const char *src, void *dst, size_t size);
-
-
-#endif /* _WIN32_WINNT >= _WIN32_WINNT_VISTA */
-
-
-/**
- * @}
- */
-
-
-#endif /* __EVIL_INET_H__ */
index 70de652..966710c 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef __EVIL_MACRO_H__
 #define __EVIL_MACRO_H__
 
+#if _WIN32_WINNT < 0x0600
+# error Windows XP not supported anymore
+#endif
+
 #ifdef EAPI
 # undef EAPI
 #endif
index 4eea1fa..ae74867 100644 (file)
@@ -3,29 +3,6 @@
 
 
 /*
- * evil_inet.h
- */
-
-#if ! (_WIN32_WINNT >= 0x600 /* _WIN32_WINNT_VISTA */)
-
-/**
- * @def inet_pton(x,y,z)
- *
- * Wrapper around evil_inet_pton().
- */
-#define inet_pton(x,y,z) evil_inet_pton(x,y,z)
-
-/**
- * @def inet_ntop(x,y,z,s)
- *
- * Wrapper around evil_inet_ntop().
- */
-#define inet_ntop(x,y,z,s) evil_inet_ntop(x,y,z,s)
-
-
-#endif /* _WIN32_WINNT >= _WIN32_WINNT_VISTA */
-
-/*
  * evil_locale.h
  */
 
index 2b7ae51..8ddd85f 100644 (file)
@@ -35,6 +35,17 @@ evil_init(void)
    if (++_evil_init_count != 1)
      return _evil_init_count;
 
+   {
+      DWORD v;
+
+      v = GetVersion();
+      if (!v || ((DWORD)(LOBYTE(LOWORD(v))) < 6))
+        {
+           fprintf(stderr, "Windows XP not supported anymore, exiting.\n");
+           return 0;
+        }
+   }
+
    if (!QueryPerformanceFrequency(&freq))
        return 0;