summaryrefslogtreecommitdiff
path: root/psycopg/lobject_type.c
diff options
context:
space:
mode:
authorJason Erickson <jerickso@stickpeople.com>2015-06-08 11:37:23 -0600
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2016-03-10 12:02:00 +0000
commit2cdc8d61a2da9f02c5b61daca6c83b61aca386f3 (patch)
treee7a191772dec629baf64c7a02a694b579c0479cf /psycopg/lobject_type.c
parentab5d8f419069bec1c35329fd67b9fe76fbbce4c8 (diff)
downloadpsycopg2-2cdc8d61a2da9f02c5b61daca6c83b61aca386f3.tar.gz
Fix Windows 64bit lobject support for very (>2GB) large objects
The type 'long' with Windows Visual C is 32bits in size for both 32bit and 64bit platforms. Changed type of variables that could be > 2GB from long to Py_ssize_t.
Diffstat (limited to 'psycopg/lobject_type.c')
-rw-r--r--psycopg/lobject_type.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/psycopg/lobject_type.c b/psycopg/lobject_type.c
index a43325d..634e76c 100644
--- a/psycopg/lobject_type.c
+++ b/psycopg/lobject_type.c
@@ -105,7 +105,7 @@ psyco_lobj_write(lobjectObject *self, PyObject *args)
goto exit;
}
- rv = PyInt_FromLong((long)res);
+ rv = PyInt_FromSsize_t((Py_ssize_t)res);
exit:
Py_XDECREF(data);
@@ -121,7 +121,7 @@ static PyObject *
psyco_lobj_read(lobjectObject *self, PyObject *args)
{
PyObject *res;
- long where, end;
+ Py_ssize_t where, end;
Py_ssize_t size = -1;
char *buffer;
@@ -165,10 +165,10 @@ psyco_lobj_read(lobjectObject *self, PyObject *args)
static PyObject *
psyco_lobj_seek(lobjectObject *self, PyObject *args)
{
- long offset, pos=0;
+ Py_ssize_t offset, pos=0;
int whence=0;
- if (!PyArg_ParseTuple(args, "l|i", &offset, &whence))
+ if (!PyArg_ParseTuple(args, "n|i", &offset, &whence))
return NULL;
EXC_IF_LOBJ_CLOSED(self);
@@ -197,7 +197,7 @@ psyco_lobj_seek(lobjectObject *self, PyObject *args)
if ((pos = lobject_seek(self, offset, whence)) < 0)
return NULL;
- return PyLong_FromLong(pos);
+ return PyLong_FromSsize_t(pos);
}
/* tell method - tell current position in the lobject */
@@ -208,7 +208,7 @@ psyco_lobj_seek(lobjectObject *self, PyObject *args)
static PyObject *
psyco_lobj_tell(lobjectObject *self, PyObject *args)
{
- long pos;
+ Py_ssize_t pos;
EXC_IF_LOBJ_CLOSED(self);
EXC_IF_LOBJ_LEVEL0(self);
@@ -217,7 +217,7 @@ psyco_lobj_tell(lobjectObject *self, PyObject *args)
if ((pos = lobject_tell(self)) < 0)
return NULL;
- return PyLong_FromLong(pos);
+ return PyLong_FromSsize_t(pos);
}
/* unlink method - unlink (destroy) the lobject */
@@ -274,10 +274,12 @@ psyco_lobj_get_closed(lobjectObject *self, void *closure)
static PyObject *
psyco_lobj_truncate(lobjectObject *self, PyObject *args)
{
- long len = 0;
+ Py_ssize_t len = 0;
- if (!PyArg_ParseTuple(args, "|l", &len))
+ Dprintf("psyco_lobj_truncate: Enter lobject object at %p", self);
+ if (!PyArg_ParseTuple(args, "|n", &len))
return NULL;
+ Dprintf("psyco_lobj_truncate: Parsed Successfully");
EXC_IF_LOBJ_CLOSED(self);
EXC_IF_LOBJ_LEVEL0(self);