diff --git a/m4/efl.m4 b/m4/efl.m4 index a8ca42775e..4b896eda88 100644 --- 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}" diff --git a/m4/evil_windows.m4 b/m4/evil_windows.m4 index c59e95dfd3..8876d6c629 100644 --- a/m4/evil_windows.m4 +++ b/m4/evil_windows.m4 @@ -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 diff --git a/src/Makefile_Edje.am b/src/Makefile_Edje.am index 5b874135b4..e1afdc7444 100644 --- a/src/Makefile_Edje.am +++ b/src/Makefile_Edje.am @@ -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 diff --git a/src/Makefile_Evil.am b/src/Makefile_Evil.am index 0efcb711fb..7aff77d665 100644 --- a/src/Makefile_Evil.am +++ b/src/Makefile_Evil.am @@ -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 \ diff --git a/src/lib/ecore_con/efl_net_dialer_windows.c b/src/lib/ecore_con/efl_net_dialer_windows.c index 451c7e95fe..f174d2d87a 100644 --- a/src/lib/ecore_con/efl_net_dialer_windows.c +++ b/src/lib/ecore_con/efl_net_dialer_windows.c @@ -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); - } -#endif + 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 (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)); + 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)); + } efl_net_socket_address_remote_set(o, sstr); efl_net_socket_address_local_set(o, cstr); diff --git a/src/lib/ecore_con/efl_net_server_windows.c b/src/lib/ecore_con/efl_net_server_windows.c index d588f773e8..f964d93808 100644 --- a/src/lib/ecore_con/efl_net_server_windows.c +++ b/src/lib/ecore_con/efl_net_server_windows.c @@ -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); diff --git a/src/lib/ecore_win32/ecore_win32.c b/src/lib/ecore_win32/ecore_win32.c index bbcb22d177..c207f0b2ca 100644 --- a/src/lib/ecore_win32/ecore_win32.c +++ b/src/lib/ecore_win32/ecore_win32.c @@ -27,10 +27,8 @@ /* 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 */ diff --git a/src/lib/eina/eina_debug.c b/src/lib/eina/eina_debug.c index 2bc0579c3b..c72f495a83 100644 --- a/src/lib/eina/eina_debug.c +++ b/src/lib/eina/eina_debug.c @@ -55,7 +55,7 @@ #include #ifdef _WIN32 -# include +# include # include #endif diff --git a/src/lib/evil/Evil.h b/src/lib/evil/Evil.h index 837803cebb..c8f1f68f8b 100644 --- a/src/lib/evil/Evil.h +++ b/src/lib/evil/Evil.h @@ -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 index 54cee3d96f..0000000000 --- a/src/lib/evil/evil_inet.c +++ /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 -#include -#include - -#ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -#endif -#include -#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 index fb4e07260c..0000000000 --- a/src/lib/evil/evil_inet.h +++ /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: - * - *
    - *
  • 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. - *
  • 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: - *
      - *
    1. 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). - *
    2. 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 ::. - *
    3. 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. - *
- * - * 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__ */ diff --git a/src/lib/evil/evil_macro.h b/src/lib/evil/evil_macro.h index 70de652cd5..966710ca4f 100644 --- a/src/lib/evil/evil_macro.h +++ b/src/lib/evil/evil_macro.h @@ -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 diff --git a/src/lib/evil/evil_macro_wrapper.h b/src/lib/evil/evil_macro_wrapper.h index 4eea1fa538..ae748677b0 100644 --- a/src/lib/evil/evil_macro_wrapper.h +++ b/src/lib/evil/evil_macro_wrapper.h @@ -2,29 +2,6 @@ #define __EVIL_MACRO_WRAPPER_H__ -/* - * 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 */ diff --git a/src/lib/evil/evil_main.c b/src/lib/evil/evil_main.c index 2b7ae515af..8ddd85f499 100644 --- a/src/lib/evil/evil_main.c +++ b/src/lib/evil/evil_main.c @@ -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;