Imported Upstream version 2.0.22
[platform/upstream/libevent.git] / evutil.c
index e17e5b8..3344517 100644 (file)
--- a/evutil.c
+++ b/evutil.c
@@ -259,7 +259,6 @@ evutil_ersatz_socketpair(int family, int type, int protocol,
                goto tidy_up_and_fail;
        if (size != sizeof(listen_addr))
                goto abort_tidy_up_and_fail;
-       evutil_closesocket(listener);
        /* Now check we are talking to ourself by matching port and host on the
           two sockets.  */
        if (getsockname(connector, (struct sockaddr *) &connect_addr, &size) == -1)
@@ -269,6 +268,7 @@ evutil_ersatz_socketpair(int family, int type, int protocol,
                || listen_addr.sin_addr.s_addr != connect_addr.sin_addr.s_addr
                || listen_addr.sin_port != connect_addr.sin_port)
                goto abort_tidy_up_and_fail;
+       evutil_closesocket(listener);
        fd[0] = connector;
        fd[1] = acceptor;
 
@@ -1562,7 +1562,7 @@ evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap)
        int r;
        if (!buflen)
                return 0;
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(WIN32)
        r = _vsnprintf(buf, buflen, format, ap);
        if (r < 0)
                r = _vscprintf(format, ap);
@@ -2109,6 +2109,18 @@ _evutil_weakrand(void)
 #endif
 }
 
+/**
+ * Volatile pointer to memset: we use this to keep the compiler from
+ * eliminating our call to memset.
+ */
+void * (*volatile evutil_memset_volatile_)(void *, int, size_t) = memset;
+
+void
+evutil_memclear_(void *mem, size_t len)
+{
+       evutil_memset_volatile_(mem, 0, len);
+}
+
 int
 evutil_sockaddr_is_loopback(const struct sockaddr *addr)
 {