summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2017-02-11 20:34:37 +0000
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2017-02-11 20:34:37 +0000
commit75747606d38495414110fcabaac1a7606b89601a (patch)
tree524aa92f35b9c5e632c2b670787efc762897105b
parentee4887b4c5b5a0afca1d85dd05a58b29c9dae224 (diff)
parent32e81a27b5a4c07a9fb935091d971eece63bbca2 (diff)
downloadpsycopg2-75747606d38495414110fcabaac1a7606b89601a.tar.gz
Merge branch 'pull-507'
-rw-r--r--psycopg/config.h11
-rw-r--r--psycopg/pqpath.c4
-rw-r--r--psycopg/win32_support.c21
-rw-r--r--psycopg/win32_support.h14
4 files changed, 41 insertions, 9 deletions
diff --git a/psycopg/config.h b/psycopg/config.h
index f8e17a9..a96864f 100644
--- a/psycopg/config.h
+++ b/psycopg/config.h
@@ -139,7 +139,18 @@ static int pthread_mutex_init(pthread_mutex_t *mutex, void* fake)
: ((_fpclass(x) == _FPCLASS_NINF) ? -1 : 0))
#endif
#define strcasecmp(x, y) lstrcmpi(x, y)
+
+typedef __int8 int8_t;
+typedef __int16 int16_t;
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int8 uint8_t;
+typedef unsigned __int16 uint16_t;
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
#endif
+
+#include "win32_support.h"
#endif
/* what's this, we have no round function either? */
diff --git a/psycopg/pqpath.c b/psycopg/pqpath.c
index a268dac..59cbb5e 100644
--- a/psycopg/pqpath.c
+++ b/psycopg/pqpath.c
@@ -482,7 +482,7 @@ pq_begin_locked(connectionObject *conn, PGresult **pgres, char **error,
PyThreadState **tstate)
{
const size_t bufsize = 256;
- char buf[bufsize];
+ char buf[256]; /* buf size must be same as bufsize */
int result;
Dprintf("pq_begin_locked: pgconn = %p, autocommit = %d, status = %d",
@@ -1786,7 +1786,7 @@ pq_copy_both(replicationCursorObject *repl, PyObject *consume, double keepalive_
CLEARPGRES(curs->pgres);
keep_intr.tv_sec = (int)keepalive_interval;
- keep_intr.tv_usec = (keepalive_interval - keep_intr.tv_sec)*1.0e6;
+ keep_intr.tv_usec = (long)((keepalive_interval - keep_intr.tv_sec)*1.0e6);
while (1) {
if (pq_read_replication_message(repl, &msg) < 0) {
diff --git a/psycopg/win32_support.c b/psycopg/win32_support.c
index d508b22..7a9c8b8 100644
--- a/psycopg/win32_support.c
+++ b/psycopg/win32_support.c
@@ -35,7 +35,7 @@
src/port/gettimeofday.c in PostgreSQL core */
/* FILETIME of Jan 1 1970 00:00:00. */
-static const unsigned __int64 epoch = 116444736000000000ULL;
+static const unsigned __int64 epoch = ((unsigned __int64) 116444736000000000ULL);
/*
* timezone information is stored outside the kernel so tzp isn't used anymore.
@@ -44,7 +44,7 @@ static const unsigned __int64 epoch = 116444736000000000ULL;
* elapsed_time().
*/
int
-gettimeofday(struct timeval * tp, struct timezone * tzp)
+gettimeofday(struct timeval * tp, void * tzp)
{
FILETIME file_time;
SYSTEMTIME system_time;
@@ -60,17 +60,30 @@ gettimeofday(struct timeval * tp, struct timezone * tzp)
return 0;
}
+
+/* timeradd missing on MS VC */
+void
+timeradd(struct timeval *a, struct timeval *b, struct timeval *c)
+{
+ c->tv_sec = a->tv_sec + b->tv_sec;
+ c->tv_usec = a->tv_usec + b->tv_usec;
+ if(c->tv_usec >= 1000000L) {
+ c->tv_usec -= 1000000L;
+ c->tv_sec += 1;
+ }
+}
#endif /* !defined(__MINGW32__) */
-/* timersub is missing on mingw */
+/* timersub is missing on mingw & MS VC */
void
timersub(struct timeval *a, struct timeval *b, struct timeval *c)
{
c->tv_sec = a->tv_sec - b->tv_sec;
c->tv_usec = a->tv_usec - b->tv_usec;
- if (tv_usec < 0) {
+ if (c->tv_usec < 0) {
c->tv_usec += 1000000;
c->tv_sec -= 1;
}
}
+
#endif /* defined(_WIN32) */
diff --git a/psycopg/win32_support.h b/psycopg/win32_support.h
index be963df..b463141 100644
--- a/psycopg/win32_support.h
+++ b/psycopg/win32_support.h
@@ -23,18 +23,26 @@
* License for more details.
*/
#ifndef PSYCOPG_WIN32_SUPPORT_H
-#define PSYCOPG_WIN32_SUPPORT_H 1
+#define PSYCOPG_WIN32_SUPPORT_H
#include "psycopg/config.h"
+#ifdef _WIN32
+#include <time.h>
+#endif
+#ifdef __MINGW32__
#include <sys/time.h>
+#endif
+
#ifdef _WIN32
#ifndef __MINGW32__
-HIDDEN int gettimeofday(struct timeval * tp, struct timezone * tzp);
+extern HIDDEN int gettimeofday(struct timeval * tp, void * tzp);
+extern HIDDEN void timeradd(struct timeval *a, struct timeval *b, struct timeval *c);
+#elif
#endif
-HIDDEN void timersub(struct timeval *a, struct timeval *b, struct timeval *c);
+extern HIDDEN void timersub(struct timeval *a, struct timeval *b, struct timeval *c);
#endif
#endif /* !defined(PSYCOPG_WIN32_SUPPORT_H) */