Fix residual breakage from Windows socket-errno patch: the routines
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 3 Aug 2001 22:11:39 +0000 (22:11 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 3 Aug 2001 22:11:39 +0000 (22:11 +0000)
that should use regular errno, not WSAGetLastError(), now do so again.

src/interfaces/libpq/fe-connect.c
src/interfaces/libpq/fe-exec.c
src/interfaces/libpq/fe-lobj.c
src/interfaces/libpq/win32.h

index 756af07b65702c763864f8a6a98757b5f3c7e2cd..47f5d55c32325caeb0d4c4ded811395d5509ecf7 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.171 2001/07/31 02:14:49 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.172 2001/08/03 22:11:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -697,16 +697,16 @@ update_db_info(PGconn *conn)
 static int
 connectMakeNonblocking(PGconn *conn)
 {
-#ifdef WIN32
+#if defined(WIN32) || defined(__BEOS__)
    int         on = 1;
+#endif
 
+#if defined(WIN32)
    if (ioctlsocket(conn->sock, FIONBIO, &on) != 0)
 #elif defined(__BEOS__)
-       int         on = 1;
-
    if (ioctl(conn->sock, FIONBIO, &on) != 0)
 #else
-   if          (fcntl(conn->sock, F_SETFL, O_NONBLOCK) < 0)
+   if (fcntl(conn->sock, F_SETFL, O_NONBLOCK) < 0)
 #endif
    {
        printfPQExpBuffer(&conn->errorMessage,
@@ -1194,6 +1194,8 @@ keep_going:                       /* We will come back to here until there
        case CONNECTION_STARTED:
            {
                ACCEPT_TYPE_ARG3 laddrlen;
+               int         optval;
+               ACCEPT_TYPE_ARG3 optlen = sizeof(optval);
 
                /*
                 * Write ready, since we've made it here, so the
@@ -1205,10 +1207,6 @@ keep_going:                      /* We will come back to here until there
                 * state waiting for us on the socket.
                 */
 
-#ifndef WIN32
-               int   optval;
-               ACCEPT_TYPE_ARG3 optlen = sizeof(optval);
-
                if (getsockopt(conn->sock, SOL_SOCKET, SO_ERROR,
                               (char *) &optval, &optlen) == -1)
                {
@@ -1217,23 +1215,8 @@ keep_going:                      /* We will come back to here until there
                                      strerror(errno));
                    goto error_return;
                }
-#else
-               char far  optval[8];
-               ACCEPT_TYPE_ARG3 optlen = sizeof(optval);
-           
-               int OptResult=getsockopt(conn->sock, SOL_SOCKET, SO_ERROR,optval, &optlen);
-               if (OptResult==SOCKET_ERROR)
-               {
-                   printfPQExpBuffer(&conn->errorMessage,
-                           "PQconnectPoll() -- getsockopt() failed: "
-                           "errno=%i\n", errno);
-                   connectFailureMessage(conn, OptResult);
-                   goto error_return;
-               }
-#endif
                else if (optval != 0)
                {
-
                    /*
                     * When using a nonblocking connect, we will typically
                     * see connect failures at this point, so provide a
index 924da5fcf257ae075d6d317d50c8afd51ba72442..c512f6928c6c0ce08b822b91354573d0cd0a4bcf 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.104 2001/07/20 17:45:06 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.105 2001/08/03 22:11:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2037,6 +2037,10 @@ PQoidStatus(const PGresult *res)
    return buf;
 }
 
+#ifdef WIN32                   /* need to get at normal errno here */
+#undef errno
+#endif
+
 /*
   PQoidValue -
        a perhaps preferable form of the above which just returns
@@ -2051,11 +2055,7 @@ PQoidValue(const PGresult *res)
    if (!res || !res->cmdStatus || strncmp(res->cmdStatus, "INSERT ", 7) != 0)
        return InvalidOid;
 
-#ifdef WIN32
-   WSASetLastError(0);
-#else
    errno = 0;
-#endif
    result = strtoul(res->cmdStatus + 7, &endptr, 10);
 
    if (!endptr || (*endptr != ' ' && *endptr != '\0') || errno == ERANGE)
@@ -2064,6 +2064,10 @@ PQoidValue(const PGresult *res)
        return (Oid) result;
 }
 
+#ifdef WIN32                   /* back to socket errno */
+#define errno WSAGetLastError()
+#endif
+
 /*
    PQcmdTuples -
    if the last command was an INSERT/UPDATE/DELETE, return number
index 078184ceb0b15e84a266408b33455725ba2af059..f6761319dd6f21e86c1fa50e5bcc479c9d847208 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-lobj.c,v 1.35 2001/07/15 13:45:04 petere Exp $
+ *   $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-lobj.c,v 1.36 2001/08/03 22:11:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "libpq/libpq-fs.h"        /* must come after sys/stat.h */
 
 
+#ifdef WIN32                   /* need to use normal errno in this file */
+#undef errno
+#endif
+
+
 #define LO_BUFSIZE       8192
 
 static int lo_initialize(PGconn *conn);
index 988455a8ec15733e6b94964349f47d3959aa687a..38099b079e41a7295c50f3839f3f66146740371c 100644 (file)
@@ -7,7 +7,7 @@
 #define strncasecmp(a,b,c) _strnicmp(a,b,c)
 
 /*
- * Some compat functions
+ * Some other compat functions
  */
 #define open(a,b,c) _open(a,b,c)
 #define close(a) _close(a)
 /*
  * crypt not available (yet)
  */
-#define crypt(a,b) a
+#define crypt(a,b) (a)
 
 /*
- * assumes that errno is used for sockets only
- *
+ * Most of libpq uses "errno" to access error conditions from socket calls,
+ * so on Windows we want to redirect those usages to WSAGetLastError().
+ * Rather than #ifdef'ing every single place that has "errno", hack it up
+ * with a macro instead.  But there are a few places that do need to touch
+ * the regular errno variable.  For them, we #undef and then redefine errno.
  */
 
-#undef errno
-#undef EINTR
-#undef EAGAIN  /* doesn't apply on sockets */
-
 #define errno WSAGetLastError()
+
+#undef EAGAIN  /* doesn't apply on sockets */
+#undef EINTR
 #define EINTR WSAEINTR
 #define EWOULDBLOCK WSAEWOULDBLOCK
 #define ECONNRESET WSAECONNRESET