aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2014-04-16 19:46:51 -0400
committerBruce Momjian <bruce@momjian.us>2014-04-16 19:46:51 -0400
commit5d305d86bd917723f09ab4f15c075d90586a210a (patch)
tree4a9a18e0e4c2a0df2263b68fc5e8aa5d8098dd87 /src
parentbe5f7fff470066dc3ee655b25840733eb9006426 (diff)
downloadpostgresql-5d305d86bd917723f09ab4f15c075d90586a210a.tar.gz
postgresql-5d305d86bd917723f09ab4f15c075d90586a210a.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/libpq/fe-connect.c34
-rw-r--r--src/interfaces/libpq/fe-exec.c2
-rw-r--r--src/interfaces/libpq/fe-misc.c6
-rw-r--r--src/interfaces/libpq/fe-protocol2.c2
-rw-r--r--src/interfaces/libpq/fe-protocol3.c2
-rw-r--r--src/interfaces/libpq/libpq-int.h2
6 files changed, 16 insertions, 32 deletions
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 5d1e45629ca..10cc0e69b20 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -398,9 +398,9 @@ pqDropConnection(PGconn *conn)
/* Drop any SSL state */
pqsecure_close(conn);
/* Close the socket itself */
- if (conn->sock >= 0)
+ if (conn->sock != PGINVALID_SOCKET)
closesocket(conn->sock);
- conn->sock = -1;
+ conn->sock = PGINVALID_SOCKET;
/* Discard any unread/unsent data */
conn->inStart = conn->inCursor = conn->inEnd = 0;
conn->outCount = 0;
@@ -1631,24 +1631,8 @@ keep_going: /* We will come back to here until there is
addr_cur->ai_addrlen);
conn->raddr.salen = addr_cur->ai_addrlen;
- /* Open a 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)
+ conn->sock = socket(addr_cur->ai_family, SOCK_STREAM, 0);
+ if (conn->sock == PGINVALID_SOCKET)
{
/*
* ignore socket() failure if we have more addresses
@@ -2717,7 +2701,7 @@ makeEmptyPGconn(void)
conn->client_encoding = PG_SQL_ASCII;
conn->std_strings = false; /* unless server says differently */
conn->verbosity = PQERRORS_DEFAULT;
- conn->sock = -1;
+ conn->sock = PGINVALID_SOCKET;
conn->auth_req_received = false;
conn->password_needed = 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
* 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
@@ -3103,7 +3087,7 @@ PQgetCancel(PGconn *conn)
if (!conn)
return NULL;
- if (conn->sock < 0)
+ if (conn->sock == PGINVALID_SOCKET)
return NULL;
cancel = malloc(sizeof(PGcancel));
@@ -3284,7 +3268,7 @@ PQrequestCancel(PGconn *conn)
if (!conn)
return FALSE;
- if (conn->sock < 0)
+ if (conn->sock == PGINVALID_SOCKET)
{
strlcpy(conn->errorMessage.data,
"PQrequestCancel() -- connection is not open\n",
@@ -5361,7 +5345,7 @@ PQsocket(const PGconn *conn)
{
if (!conn)
return -1;
- return conn->sock;
+ return (conn->sock != PGINVALID_SOCKET) ? conn->sock : -1;
}
int
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index 8ccf6d39ee2..50e4035781a 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -2549,7 +2549,7 @@ PQfn(PGconn *conn,
/* clear the error string */
resetPQExpBuffer(&conn->errorMessage);
- if (conn->sock < 0 || conn->asyncStatus != PGASYNC_IDLE ||
+ if (conn->sock == PGINVALID_SOCKET || conn->asyncStatus != PGASYNC_IDLE ||
conn->result != NULL)
{
printfPQExpBuffer(&conn->errorMessage,
diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c
index a7afd425562..cc487b22eec 100644
--- a/src/interfaces/libpq/fe-misc.c
+++ b/src/interfaces/libpq/fe-misc.c
@@ -604,7 +604,7 @@ pqReadData(PGconn *conn)
int someread = 0;
int nread;
- if (conn->sock < 0)
+ if (conn->sock == PGINVALID_SOCKET)
{
printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("connection not open\n"));
@@ -800,7 +800,7 @@ pqSendSome(PGconn *conn, int len)
int remaining = conn->outCount;
int result = 0;
- if (conn->sock < 0)
+ if (conn->sock == PGINVALID_SOCKET)
{
printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("connection not open\n"));
@@ -1011,7 +1011,7 @@ pqSocketCheck(PGconn *conn, int forRead, int forWrite, time_t end_time)
if (!conn)
return -1;
- if (conn->sock < 0)
+ if (conn->sock == PGINVALID_SOCKET)
{
printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("socket not open\n"));
diff --git a/src/interfaces/libpq/fe-protocol2.c b/src/interfaces/libpq/fe-protocol2.c
index f3fddaa0364..10510b5bf5a 100644
--- a/src/interfaces/libpq/fe-protocol2.c
+++ b/src/interfaces/libpq/fe-protocol2.c
@@ -1211,7 +1211,7 @@ pqGetline2(PGconn *conn, char *s, int maxlen)
{
int result = 1; /* return value if buffer overflows */
- if (conn->sock < 0 ||
+ if (conn->sock == PGINVALID_SOCKET ||
conn->asyncStatus != PGASYNC_COPY_OUT)
{
*s = '\0';
diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c
index 47cd7f487f0..d895589148c 100644
--- a/src/interfaces/libpq/fe-protocol3.c
+++ b/src/interfaces/libpq/fe-protocol3.c
@@ -1568,7 +1568,7 @@ pqGetline3(PGconn *conn, char *s, int maxlen)
{
int status;
- if (conn->sock < 0 ||
+ if (conn->sock == PGINVALID_SOCKET ||
(conn->asyncStatus != PGASYNC_COPY_OUT &&
conn->asyncStatus != PGASYNC_COPY_BOTH) ||
conn->copy_is_binary)
diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h
index ee975d41fa1..0725c17023d 100644
--- a/src/interfaces/libpq/libpq-int.h
+++ b/src/interfaces/libpq/libpq-int.h
@@ -365,7 +365,7 @@ struct pg_conn
/* Connection data */
/* 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 raddr; /* Remote address */
ProtocolVersion pversion; /* FE/BE protocol version in use */