static PyObject * psyco_lobj_read(lobjectObject *self, PyObject *args) { PyObject *res; int where, end, size = -1; char *buffer; if (!PyArg_ParseTuple(args, "|i", &size)) return NULL; EXC_IF_LOBJ_CLOSED(self); EXC_IF_LOBJ_LEVEL0(self); EXC_IF_LOBJ_UNMARKED(self); if (size < 0) { if ((where = lobject_tell(self)) < 0) return NULL; if ((end = lobject_seek(self, 0, SEEK_END)) < 0) return NULL; if (lobject_seek(self, where, SEEK_SET) < 0) return NULL; size = end - where; } if ((buffer = PyMem_Malloc(size)) == NULL) { PyErr_NoMemory(); return NULL; } if ((size = lobject_read(self, buffer, size)) < 0) { PyMem_Free(buffer); return NULL; } res = PyString_FromStringAndSize(buffer, size); PyMem_Free(buffer); return res; }
static PyObject * psyco_lobj_read(lobjectObject *self, PyObject *args) { PyObject *res; int where, end; Py_ssize_t size = -1; char *buffer; if (!PyArg_ParseTuple(args, "|" CONV_CODE_PY_SSIZE_T, &size)) return NULL; EXC_IF_LOBJ_CLOSED(self); EXC_IF_LOBJ_LEVEL0(self); EXC_IF_LOBJ_UNMARKED(self); if (size < 0) { if ((where = lobject_tell(self)) < 0) return NULL; if ((end = lobject_seek(self, 0, SEEK_END)) < 0) return NULL; if (lobject_seek(self, where, SEEK_SET) < 0) return NULL; size = end - where; } if ((buffer = PyMem_Malloc(size)) == NULL) { PyErr_NoMemory(); return NULL; } if ((size = lobject_read(self, buffer, size)) < 0) { PyMem_Free(buffer); return NULL; } if (self->mode & LOBJECT_BINARY) { res = Bytes_FromStringAndSize(buffer, size); } else { res = PyUnicode_Decode(buffer, size, self->conn->codec, NULL); } PyMem_Free(buffer); return res; }
static PyObject * psyco_lobj_seek(lobjectObject *self, PyObject *args) { int offset, whence=0; int pos=0; if (!PyArg_ParseTuple(args, "i|i", &offset, &whence)) return NULL; EXC_IF_LOBJ_CLOSED(self); EXC_IF_LOBJ_LEVEL0(self); EXC_IF_LOBJ_UNMARKED(self); if ((pos = lobject_seek(self, offset, whence)) < 0) return NULL; return PyInt_FromLong((long)pos); }
static PyObject * psyco_lobj_seek(lobjectObject *self, PyObject *args) { long offset, pos=0; int whence=0; if (!PyArg_ParseTuple(args, "l|i", &offset, &whence)) return NULL; EXC_IF_LOBJ_CLOSED(self); EXC_IF_LOBJ_LEVEL0(self); EXC_IF_LOBJ_UNMARKED(self); #ifdef HAVE_LO64 if ((offset < INT_MIN || offset > INT_MAX) && self->conn->server_version < 90300) { PyErr_Format(NotSupportedError, "offset out of range (%ld): server version %d " "does not support the lobject 64 API", offset, self->conn->server_version); return NULL; } #else if (offset < INT_MIN || offset > INT_MAX) { PyErr_Format(InterfaceError, "offset out of range (%ld): this psycopg version was not built " "with lobject 64 API support", offset); return NULL; } #endif if ((pos = lobject_seek(self, offset, whence)) < 0) return NULL; return PyLong_FromLong(pos); }