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
This commit is contained in:
parent
be5f7fff47
commit
5d305d86bd
@ -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
|
|||||||
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)
|
|||||||
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)
|
|||||||
* 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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,
|
|||||||
/* 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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
|
|||||||
|
|
||||||
/* 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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user