Commit 5d305d86 authored by Bruce Momjian's avatar Bruce Momjian

libpq: use pgsocket for socket values, for portability

Previously, 'int' was used for socket values in libpq, but socket values
are unsigned on Windows.  This is a style correction.

Initial patch and previous PGINVALID_SOCKET initial patch by Joel
Jacobson, modified by me

Report from PVS-Studio
parent be5f7fff
...@@ -398,9 +398,9 @@ pqDropConnection(PGconn *conn) ...@@ -398,9 +398,9 @@ pqDropConnection(PGconn *conn)
/* Drop any SSL state */ /* Drop any SSL state */
pqsecure_close(conn); pqsecure_close(conn);
/* Close the socket itself */ /* Close the socket itself */
if (conn->sock >= 0) if (conn->sock != PGINVALID_SOCKET)
closesocket(conn->sock); closesocket(conn->sock);
conn->sock = -1; conn->sock = PGINVALID_SOCKET;
/* Discard any unread/unsent data */ /* Discard any unread/unsent data */
conn->inStart = conn->inCursor = conn->inEnd = 0; conn->inStart = conn->inCursor = conn->inEnd = 0;
conn->outCount = 0; conn->outCount = 0;
...@@ -1631,24 +1631,8 @@ keep_going: /* We will come back to here until there is ...@@ -1631,24 +1631,8 @@ keep_going: /* We will come back to here until there is
addr_cur->ai_addrlen); addr_cur->ai_addrlen);
conn->raddr.salen = addr_cur->ai_addrlen; conn->raddr.salen = addr_cur->ai_addrlen;
/* Open a socket */ conn->sock = socket(addr_cur->ai_family, SOCK_STREAM, 0);
{ if (conn->sock == PGINVALID_SOCKET)
/*
* While we use 'pgsocket' as the socket type in the
* backend, we use 'int' for libpq socket values.
* This requires us to map PGINVALID_SOCKET to -1
* on Windows.
* See http://msdn.microsoft.com/en-us/library/windows/desktop/ms740516%28v=vs.85%29.aspx
*/
pgsocket sock = socket(addr_cur->ai_family, SOCK_STREAM, 0);
#ifdef WIN32
if (sock == PGINVALID_SOCKET)
conn->sock = -1;
else
#endif
conn->sock = sock;
}
if (conn->sock == -1)
{ {
/* /*
* ignore socket() failure if we have more addresses * ignore socket() failure if we have more addresses
...@@ -2717,7 +2701,7 @@ makeEmptyPGconn(void) ...@@ -2717,7 +2701,7 @@ makeEmptyPGconn(void)
conn->client_encoding = PG_SQL_ASCII; conn->client_encoding = PG_SQL_ASCII;
conn->std_strings = false; /* unless server says differently */ conn->std_strings = false; /* unless server says differently */
conn->verbosity = PQERRORS_DEFAULT; conn->verbosity = PQERRORS_DEFAULT;
conn->sock = -1; conn->sock = PGINVALID_SOCKET;
conn->auth_req_received = false; conn->auth_req_received = false;
conn->password_needed = false; conn->password_needed = false;
conn->dot_pgpass_used = false; conn->dot_pgpass_used = false;
...@@ -2882,7 +2866,7 @@ closePGconn(PGconn *conn) ...@@ -2882,7 +2866,7 @@ closePGconn(PGconn *conn)
* Note that the protocol doesn't allow us to send Terminate messages * Note that the protocol doesn't allow us to send Terminate messages
* during the startup phase. * during the startup phase.
*/ */
if (conn->sock >= 0 && conn->status == CONNECTION_OK) if (conn->sock != PGINVALID_SOCKET && conn->status == CONNECTION_OK)
{ {
/* /*
* Try to send "close connection" message to backend. Ignore any * Try to send "close connection" message to backend. Ignore any
...@@ -3103,7 +3087,7 @@ PQgetCancel(PGconn *conn) ...@@ -3103,7 +3087,7 @@ PQgetCancel(PGconn *conn)
if (!conn) if (!conn)
return NULL; return NULL;
if (conn->sock < 0) if (conn->sock == PGINVALID_SOCKET)
return NULL; return NULL;
cancel = malloc(sizeof(PGcancel)); cancel = malloc(sizeof(PGcancel));
...@@ -3284,7 +3268,7 @@ PQrequestCancel(PGconn *conn) ...@@ -3284,7 +3268,7 @@ PQrequestCancel(PGconn *conn)
if (!conn) if (!conn)
return FALSE; return FALSE;
if (conn->sock < 0) if (conn->sock == PGINVALID_SOCKET)
{ {
strlcpy(conn->errorMessage.data, strlcpy(conn->errorMessage.data,
"PQrequestCancel() -- connection is not open\n", "PQrequestCancel() -- connection is not open\n",
...@@ -5361,7 +5345,7 @@ PQsocket(const PGconn *conn) ...@@ -5361,7 +5345,7 @@ PQsocket(const PGconn *conn)
{ {
if (!conn) if (!conn)
return -1; return -1;
return conn->sock; return (conn->sock != PGINVALID_SOCKET) ? conn->sock : -1;
} }
int int
......
...@@ -2549,7 +2549,7 @@ PQfn(PGconn *conn, ...@@ -2549,7 +2549,7 @@ PQfn(PGconn *conn,
/* clear the error string */ /* clear the error string */
resetPQExpBuffer(&conn->errorMessage); resetPQExpBuffer(&conn->errorMessage);
if (conn->sock < 0 || conn->asyncStatus != PGASYNC_IDLE || if (conn->sock == PGINVALID_SOCKET || conn->asyncStatus != PGASYNC_IDLE ||
conn->result != NULL) conn->result != NULL)
{ {
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
......
...@@ -604,7 +604,7 @@ pqReadData(PGconn *conn) ...@@ -604,7 +604,7 @@ pqReadData(PGconn *conn)
int someread = 0; int someread = 0;
int nread; int nread;
if (conn->sock < 0) if (conn->sock == PGINVALID_SOCKET)
{ {
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("connection not open\n")); libpq_gettext("connection not open\n"));
...@@ -800,7 +800,7 @@ pqSendSome(PGconn *conn, int len) ...@@ -800,7 +800,7 @@ pqSendSome(PGconn *conn, int len)
int remaining = conn->outCount; int remaining = conn->outCount;
int result = 0; int result = 0;
if (conn->sock < 0) if (conn->sock == PGINVALID_SOCKET)
{ {
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("connection not open\n")); libpq_gettext("connection not open\n"));
...@@ -1011,7 +1011,7 @@ pqSocketCheck(PGconn *conn, int forRead, int forWrite, time_t end_time) ...@@ -1011,7 +1011,7 @@ pqSocketCheck(PGconn *conn, int forRead, int forWrite, time_t end_time)
if (!conn) if (!conn)
return -1; return -1;
if (conn->sock < 0) if (conn->sock == PGINVALID_SOCKET)
{ {
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("socket not open\n")); libpq_gettext("socket not open\n"));
......
...@@ -1211,7 +1211,7 @@ pqGetline2(PGconn *conn, char *s, int maxlen) ...@@ -1211,7 +1211,7 @@ pqGetline2(PGconn *conn, char *s, int maxlen)
{ {
int result = 1; /* return value if buffer overflows */ int result = 1; /* return value if buffer overflows */
if (conn->sock < 0 || if (conn->sock == PGINVALID_SOCKET ||
conn->asyncStatus != PGASYNC_COPY_OUT) conn->asyncStatus != PGASYNC_COPY_OUT)
{ {
*s = '\0'; *s = '\0';
......
...@@ -1568,7 +1568,7 @@ pqGetline3(PGconn *conn, char *s, int maxlen) ...@@ -1568,7 +1568,7 @@ pqGetline3(PGconn *conn, char *s, int maxlen)
{ {
int status; int status;
if (conn->sock < 0 || if (conn->sock == PGINVALID_SOCKET ||
(conn->asyncStatus != PGASYNC_COPY_OUT && (conn->asyncStatus != PGASYNC_COPY_OUT &&
conn->asyncStatus != PGASYNC_COPY_BOTH) || conn->asyncStatus != PGASYNC_COPY_BOTH) ||
conn->copy_is_binary) conn->copy_is_binary)
......
...@@ -365,7 +365,7 @@ struct pg_conn ...@@ -365,7 +365,7 @@ struct pg_conn
/* Connection data */ /* Connection data */
/* See PQconnectPoll() for how we use 'int' and not 'pgsocket'. */ /* See PQconnectPoll() for how we use 'int' and not 'pgsocket'. */
int sock; /* Unix FD for socket, -1 if not connected */ pgsocket sock; /* FD for socket, PGINVALID_SOCKET if unconnected */
SockAddr laddr; /* Local address */ SockAddr laddr; /* Local address */
SockAddr raddr; /* Remote address */ SockAddr raddr; /* Remote address */
ProtocolVersion pversion; /* FE/BE protocol version in use */ ProtocolVersion pversion; /* FE/BE protocol version in use */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment