summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_bsddb.c14
-rw-r--r--Modules/_ctypes/_ctypes.c80
-rw-r--r--Modules/_ctypes/callbacks.c9
-rw-r--r--Modules/_ctypes/callproc.c52
-rw-r--r--Modules/_ctypes/cfield.c185
-rw-r--r--Modules/_ctypes/ctypes.h21
-rw-r--r--Modules/_ctypes/libffi/src/x86/ffi.c12
-rw-r--r--Modules/_ctypes/libffi/src/x86/ffi64.c4
-rw-r--r--Modules/_ctypes/stgdict.c18
-rw-r--r--Modules/_sqlite/cache.c1
-rw-r--r--Modules/_sqlite/module.c4
-rw-r--r--Modules/_testcapimodule.c32
-rw-r--r--Modules/cjkcodecs/multibytecodec.c6
-rw-r--r--Modules/getbuildinfo.c11
-rw-r--r--Modules/socketmodule.c7
15 files changed, 266 insertions, 190 deletions
diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c
index ef0c7f3..d569b7d 100644
--- a/Modules/_bsddb.c
+++ b/Modules/_bsddb.c
@@ -1713,6 +1713,7 @@ DB_get_both(DBObject* self, PyObject* args, PyObject* kwargs)
PyObject* dataobj;
PyObject* retval = NULL;
DBT key, data;
+ void *orig_data;
DB_TXN *txn = NULL;
static char* kwnames[] = { "key", "data", "txn", "flags", NULL };
@@ -1724,7 +1725,6 @@ DB_get_both(DBObject* self, PyObject* args, PyObject* kwargs)
CHECK_DB_NOT_CLOSED(self);
if (!make_key_dbt(self, keyobj, &key, NULL))
return NULL;
- CLEAR_DBT(data);
if ( !make_dbt(dataobj, &data) ||
!checkTxnObj(txnobj, &txn) )
{
@@ -1733,13 +1733,12 @@ DB_get_both(DBObject* self, PyObject* args, PyObject* kwargs)
}
flags |= DB_GET_BOTH;
+ orig_data = data.data;
if (CHECK_DBFLAG(self, DB_THREAD)) {
/* Tell BerkeleyDB to malloc the return value (thread safe) */
+ /* XXX(nnorwitz): At least 4.4.20 and 4.5.20 require this flag. */
data.flags = DB_DBT_MALLOC;
- /* TODO: Is this flag needed? We're passing a data object that should
- match what's in the DB, so there should be no need to malloc.
- We run the risk of freeing something twice! Check this. */
}
MYDB_BEGIN_ALLOW_THREADS;
@@ -1753,8 +1752,13 @@ DB_get_both(DBObject* self, PyObject* args, PyObject* kwargs)
retval = Py_None;
}
else if (!err) {
+ /* XXX(nnorwitz): can we do: retval = dataobj; Py_INCREF(retval); */
retval = PyString_FromStringAndSize((char*)data.data, data.size);
- FREE_DBT(data); /* Only if retrieval was successful */
+
+ /* Even though the flags require DB_DBT_MALLOC, data is not always
+ allocated. 4.4: allocated, 4.5: *not* allocated. :-( */
+ if (data.data != orig_data)
+ FREE_DBT(data);
}
FREE_DBT(key);
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 55ef0b7..ab5e895 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -789,7 +789,7 @@ static int
CharArray_set_value(CDataObject *self, PyObject *value)
{
char *ptr;
- int size;
+ Py_ssize_t size;
if (PyUnicode_Check(value)) {
value = PyUnicode_AsEncodedString(value,
@@ -844,7 +844,7 @@ WCharArray_get_value(CDataObject *self)
static int
WCharArray_set_value(CDataObject *self, PyObject *value)
{
- int result = 0;
+ Py_ssize_t result = 0;
if (PyString_Check(value)) {
value = PyUnicode_FromEncodedObject(value,
@@ -868,14 +868,12 @@ WCharArray_set_value(CDataObject *self, PyObject *value)
result = PyUnicode_AsWideChar((PyUnicodeObject *)value,
(wchar_t *)self->b_ptr,
self->b_size/sizeof(wchar_t));
- if (result >= 0 && (unsigned)result < self->b_size/sizeof(wchar_t))
+ if (result >= 0 && (size_t)result < self->b_size/sizeof(wchar_t))
((wchar_t *)self->b_ptr)[result] = (wchar_t)0;
- if (result > 0)
- result = 0;
done:
Py_DECREF(value);
- return result;
+ return result >= 0 ? 0 : -1;
}
static PyGetSetDef WCharArray_getsets[] = {
@@ -966,7 +964,7 @@ ArrayType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *typedict;
int length;
- int itemsize, itemalign;
+ Py_ssize_t itemsize, itemalign;
typedict = PyTuple_GetItem(args, 2);
if (!typedict)
@@ -1737,8 +1735,8 @@ static PyObject *
converters_from_argtypes(PyObject *ob)
{
PyObject *converters;
- int i;
- int nArgs;
+ Py_ssize_t i;
+ Py_ssize_t nArgs;
ob = PySequence_Tuple(ob); /* new reference */
if (!ob) {
@@ -1771,7 +1769,12 @@ converters_from_argtypes(PyObject *ob)
Py_XDECREF(converters);
Py_DECREF(ob);
PyErr_Format(PyExc_TypeError,
- "item %d in _argtypes_ has no from_param method", i+1);
+#if (PY_VERSION_HEX < 0x02050000)
+ "item %d in _argtypes_ has no from_param method",
+#else
+ "item %zd in _argtypes_ has no from_param method",
+#endif
+ i+1);
return NULL;
}
@@ -2591,18 +2594,18 @@ static PyGetSetDef CFuncPtr_getsets[] = {
#ifdef MS_WIN32
static PPROC FindAddress(void *handle, char *name, PyObject *type)
{
+#ifdef MS_WIN64
+ /* win64 has no stdcall calling conv, so it should
+ also not have the name mangling of it.
+ */
+ return (PPROC)GetProcAddress(handle, name);
+#else
PPROC address;
char *mangled_name;
int i;
StgDictObject *dict;
address = (PPROC)GetProcAddress(handle, name);
-#ifdef _WIN64
- /* win64 has no stdcall calling conv, so it should
- also not have the name mangling of it.
- */
- return address;
-#else
if (address)
return address;
if (((size_t)name & ~0xFFFF) == 0) {
@@ -2634,7 +2637,7 @@ static PPROC FindAddress(void *handle, char *name, PyObject *type)
/* Return 1 if usable, 0 else and exception set. */
static int
-_check_outarg_type(PyObject *arg, int index)
+_check_outarg_type(PyObject *arg, Py_ssize_t index)
{
StgDictObject *dict;
@@ -2655,7 +2658,7 @@ _check_outarg_type(PyObject *arg, int index)
PyErr_Format(PyExc_TypeError,
"'out' parameter %d must be a pointer type, not %s",
- index,
+ Py_SAFE_DOWNCAST(index, Py_ssize_t, int),
PyType_Check(arg) ?
((PyTypeObject *)arg)->tp_name :
arg->ob_type->tp_name);
@@ -2666,7 +2669,7 @@ _check_outarg_type(PyObject *arg, int index)
static int
_validate_paramflags(PyTypeObject *type, PyObject *paramflags)
{
- int i, len;
+ Py_ssize_t i, len;
StgDictObject *dict;
PyObject *argtypes;
@@ -3051,12 +3054,12 @@ _build_callargs(CFuncPtrObject *self, PyObject *argtypes,
PyObject *paramflags = self->paramflags;
PyObject *callargs;
StgDictObject *dict;
- int i, len;
+ Py_ssize_t i, len;
int inargs_index = 0;
/* It's a little bit difficult to determine how many arguments the
function call requires/accepts. For simplicity, we count the consumed
args and compare this to the number of supplied args. */
- int actual_args;
+ Py_ssize_t actual_args;
*poutmask = 0;
*pinoutmask = 0;
@@ -3093,7 +3096,7 @@ _build_callargs(CFuncPtrObject *self, PyObject *argtypes,
/* This way seems to be ~2 us faster than the PyArg_ParseTuple
calls below. */
/* We HAVE already checked that the tuple can be parsed with "i|zO", so... */
- int tsize = PyTuple_GET_SIZE(item);
+ Py_ssize_t tsize = PyTuple_GET_SIZE(item);
flag = PyInt_AS_LONG(PyTuple_GET_ITEM(item, 0));
name = tsize > 1 ? PyString_AS_STRING(PyTuple_GET_ITEM(item, 1)) : NULL;
defval = tsize > 2 ? PyTuple_GET_ITEM(item, 2) : NULL;
@@ -3193,7 +3196,11 @@ _build_callargs(CFuncPtrObject *self, PyObject *argtypes,
message is misleading. See unittests/test_paramflags.py
*/
PyErr_Format(PyExc_TypeError,
+#if (PY_VERSION_HEX < 0x02050000)
"call takes exactly %d arguments (%d given)",
+#else
+ "call takes exactly %d arguments (%zd given)",
+#endif
inargs_index, actual_args);
goto error;
}
@@ -3339,8 +3346,10 @@ CFuncPtr_call(CFuncPtrObject *self, PyObject *inargs, PyObject *kwds)
return NULL;
if (converters) {
- int required = PyTuple_GET_SIZE(converters);
- int actual = PyTuple_GET_SIZE(callargs);
+ int required = Py_SAFE_DOWNCAST(PyTuple_GET_SIZE(converters),
+ Py_ssize_t, int);
+ int actual = Py_SAFE_DOWNCAST(PyTuple_GET_SIZE(callargs),
+ Py_ssize_t, int);
if ((dict->flags & FUNCFLAG_CDECL) == FUNCFLAG_CDECL) {
/* For cdecl functions, we allow more actual arguments
@@ -3679,8 +3688,8 @@ static PyTypeObject Union_Type = {
static int
Array_init(CDataObject *self, PyObject *args, PyObject *kw)
{
- int i;
- int n;
+ Py_ssize_t i;
+ Py_ssize_t n;
if (!PyTuple_Check(args)) {
PyErr_SetString(PyExc_TypeError,
@@ -3701,7 +3710,7 @@ static PyObject *
Array_item(PyObject *_self, Py_ssize_t index)
{
CDataObject *self = (CDataObject *)_self;
- int offset, size;
+ Py_ssize_t offset, size;
StgDictObject *stgdict;
@@ -3773,7 +3782,7 @@ static int
Array_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
{
CDataObject *self = (CDataObject *)_self;
- int size, offset;
+ Py_ssize_t size, offset;
StgDictObject *stgdict;
char *ptr;
@@ -3802,7 +3811,7 @@ static int
Array_ass_slice(PyObject *_self, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *value)
{
CDataObject *self = (CDataObject *)_self;
- int i, len;
+ Py_ssize_t i, len;
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
@@ -4163,7 +4172,7 @@ static PyObject *
Pointer_item(PyObject *_self, Py_ssize_t index)
{
CDataObject *self = (CDataObject *)_self;
- int size;
+ Py_ssize_t size;
Py_ssize_t offset;
StgDictObject *stgdict, *itemdict;
PyObject *proto;
@@ -4194,7 +4203,7 @@ static int
Pointer_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
{
CDataObject *self = (CDataObject *)_self;
- int size;
+ Py_ssize_t size;
Py_ssize_t offset;
StgDictObject *stgdict, *itemdict;
PyObject *proto;
@@ -4627,9 +4636,10 @@ cast(void *ptr, PyObject *src, PyObject *ctype)
static PyObject *
wstring_at(const wchar_t *ptr, int size)
{
- if (size == -1)
- size = wcslen(ptr);
- return PyUnicode_FromWideChar(ptr, size);
+ Py_ssize_t ssize = size;
+ if (ssize == -1)
+ ssize = wcslen(ptr);
+ return PyUnicode_FromWideChar(ptr, ssize);
}
#endif
@@ -4829,7 +4839,7 @@ PyObject *My_PyUnicode_FromWideChar(register const wchar_t *w,
return (PyObject *)unicode;
}
-int My_PyUnicode_AsWideChar(PyUnicodeObject *unicode,
+Py_ssize_t My_PyUnicode_AsWideChar(PyUnicodeObject *unicode,
register wchar_t *w,
Py_ssize_t size)
{
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index 2ead927..497599b 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -124,10 +124,10 @@ static void _CallPythonObject(void *mem,
PyObject *converters,
void **pArgs)
{
- int i;
+ Py_ssize_t i;
PyObject *result;
PyObject *arglist = NULL;
- int nArgs;
+ Py_ssize_t nArgs;
#ifdef WITH_THREAD
PyGILState_STATE state = PyGILState_Ensure();
#endif
@@ -265,7 +265,7 @@ ffi_info *AllocFunctionCallback(PyObject *callable,
{
int result;
ffi_info *p;
- int nArgs, i;
+ Py_ssize_t nArgs, i;
ffi_abi cc;
nArgs = PySequence_Size(converters);
@@ -308,7 +308,8 @@ ffi_info *AllocFunctionCallback(PyObject *callable,
if (is_cdecl == 0)
cc = FFI_STDCALL;
#endif
- result = ffi_prep_cif(&p->cif, cc, nArgs,
+ result = ffi_prep_cif(&p->cif, cc,
+ Py_SAFE_DOWNCAST(nArgs, Py_ssize_t, int),
GetType(restype),
&p->atypes[0]);
if (result != FFI_OK) {
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index ba1629d..23150b3 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -361,13 +361,13 @@ PyCArg_repr(PyCArgObject *self)
case 'z':
case 'Z':
case 'P':
- sprintf(buffer, "<cparam '%c' (%08lx)>",
- self->tag, (long)self->value.p);
+ sprintf(buffer, "<cparam '%c' (%p)>",
+ self->tag, self->value.p);
break;
default:
- sprintf(buffer, "<cparam '%c' at %08lx>",
- self->tag, (long)self);
+ sprintf(buffer, "<cparam '%c' at %p>",
+ self->tag, self);
break;
}
return PyUnicode_FromString(buffer);
@@ -464,7 +464,7 @@ struct argument {
/*
* Convert a single Python object into a PyCArgObject and return it.
*/
-static int ConvParam(PyObject *obj, int index, struct argument *pa)
+static int ConvParam(PyObject *obj, Py_ssize_t index, struct argument *pa)
{
StgDictObject *dict;
pa->keep = NULL; /* so we cannot forget it later */
@@ -566,7 +566,8 @@ static int ConvParam(PyObject *obj, int index, struct argument *pa)
return result;
}
PyErr_Format(PyExc_TypeError,
- "Don't know how to convert parameter %d", index);
+ "Don't know how to convert parameter %d",
+ Py_SAFE_DOWNCAST(index, Py_ssize_t, int));
return -1;
}
}
@@ -906,7 +907,7 @@ PyObject *_CallProc(PPROC pProc,
PyObject *restype,
PyObject *checker)
{
- int i, n, argcount, argtype_count;
+ Py_ssize_t i, n, argcount, argtype_count;
void *resbuf;
struct argument *args, *pa;
ffi_type **atypes;
@@ -996,7 +997,10 @@ PyObject *_CallProc(PPROC pProc,
}
if (-1 == _call_function_pointer(flags, pProc, avalues, atypes,
- rtype, resbuf, argcount))
+ rtype, resbuf,
+ Py_SAFE_DOWNCAST(argcount,
+ Py_ssize_t,
+ int)))
goto cleanup;
#ifdef WORDS_BIGENDIAN
@@ -1036,6 +1040,15 @@ PyObject *_CallProc(PPROC pProc,
return retval;
}
+static int
+_parse_voidp(PyObject *obj, void **address)
+{
+ *address = PyLong_AsVoidPtr(obj);
+ if (*address == NULL)
+ return 0;
+ return 1;
+}
+
#ifdef MS_WIN32
#ifdef _UNICODE
@@ -1123,7 +1136,7 @@ Free the handle of an executable previously loaded by LoadLibrary.\n";
static PyObject *free_library(PyObject *self, PyObject *args)
{
void *hMod;
- if (!PyArg_ParseTuple(args, PY_VOID_P_CODE ":FreeLibrary", &hMod))
+ if (!PyArg_ParseTuple(args, "O&:FreeLibrary", &_parse_voidp, &hMod))
return NULL;
if (!FreeLibrary((HMODULE)hMod))
return PyErr_SetFromWindowsErr(GetLastError());
@@ -1246,7 +1259,7 @@ static PyObject *py_dl_close(PyObject *self, PyObject *args)
{
void *handle;
- if (!PyArg_ParseTuple(args, PY_VOID_P_CODE ":dlclose", &handle))
+ if (!PyArg_ParseTuple(args, "O&:dlclose", &_parse_voidp, &handle))
return NULL;
if (dlclose(handle)) {
PyErr_SetString(PyExc_OSError,
@@ -1263,7 +1276,8 @@ static PyObject *py_dl_sym(PyObject *self, PyObject *args)
void *handle;
void *ptr;
- if (!PyArg_ParseTuple(args, PY_VOID_P_CODE "s:dlsym", &handle, &name))
+ if (!PyArg_ParseTuple(args, "O&s:dlsym",
+ &_parse_voidp, &handle, &name))
return NULL;
ptr = ctypes_dlsym((void*)handle, name);
if (!ptr) {
@@ -1288,8 +1302,8 @@ call_function(PyObject *self, PyObject *args)
PyObject *result;
if (!PyArg_ParseTuple(args,
- PY_VOID_P_CODE "O!",
- &func,
+ "O&O!",
+ &_parse_voidp, &func,
&PyTuple_Type, &arguments))
return NULL;
@@ -1319,8 +1333,8 @@ call_cdeclfunction(PyObject *self, PyObject *args)
PyObject *result;
if (!PyArg_ParseTuple(args,
- PY_VOID_P_CODE "O!",
- &func,
+ "O&O!",
+ &_parse_voidp, &func,
&PyTuple_Type, &arguments))
return NULL;
@@ -1352,10 +1366,10 @@ sizeof_func(PyObject *self, PyObject *obj)
dict = PyType_stgdict(obj);
if (dict)
- return PyInt_FromLong(dict->size);
+ return PyInt_FromSsize_t(dict->size);
if (CDataObject_Check(obj))
- return PyInt_FromLong(((CDataObject *)obj)->b_size);
+ return PyInt_FromSsize_t(((CDataObject *)obj)->b_size);
PyErr_SetString(PyExc_TypeError,
"this type has no size");
return NULL;
@@ -1373,11 +1387,11 @@ align_func(PyObject *self, PyObject *obj)
dict = PyType_stgdict(obj);
if (dict)
- return PyInt_FromLong(dict->align);
+ return PyInt_FromSsize_t(dict->align);
dict = PyObject_stgdict(obj);
if (dict)
- return PyInt_FromLong(dict->align);
+ return PyInt_FromSsize_t(dict->align);
PyErr_SetString(PyExc_TypeError,
"no alignment info");
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index 5874f52..1d91edf 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -35,14 +35,14 @@ CField_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
* prev_desc points to the type of the previous bitfield, if any.
*/
PyObject *
-CField_FromDesc(PyObject *desc, int index,
- int *pfield_size, int bitsize, int *pbitofs,
- int *psize, int *poffset, int *palign,
+CField_FromDesc(PyObject *desc, Py_ssize_t index,
+ Py_ssize_t *pfield_size, int bitsize, int *pbitofs,
+ Py_ssize_t *psize, Py_ssize_t *poffset, Py_ssize_t *palign,
int pack, int big_endian)
{
CFieldObject *self;
PyObject *proto;
- int size, align, length;
+ Py_ssize_t size, align, length;
SETFUNC setfunc = NULL;
GETFUNC getfunc = NULL;
StgDictObject *dict;
@@ -147,7 +147,7 @@ CField_FromDesc(PyObject *desc, int index,
else
align = dict->align;
if (align && *poffset % align) {
- int delta = align - (*poffset % align);
+ Py_ssize_t delta = align - (*poffset % align);
*psize += delta;
*poffset += delta;
}
@@ -220,21 +220,13 @@ CField_get(CFieldObject *self, PyObject *inst, PyTypeObject *type)
static PyObject *
CField_get_offset(PyObject *self, void *data)
{
-#if (PY_VERSION_HEX < 0x02050000)
- return PyInt_FromLong(((CFieldObject *)self)->offset);
-#else
return PyInt_FromSsize_t(((CFieldObject *)self)->offset);
-#endif
}
static PyObject *
CField_get_size(PyObject *self, void *data)
{
-#if (PY_VERSION_HEX < 0x02050000)
- return PyInt_FromLong(((CFieldObject *)self)->size);
-#else
return PyInt_FromSsize_t(((CFieldObject *)self)->size);
-#endif
}
static PyGetSetDef CField_getset[] = {
@@ -268,8 +260,8 @@ static PyObject *
CField_repr(CFieldObject *self)
{
PyObject *result;
- int bits = self->size >> 16;
- int size = self->size & 0xFFFF;
+ Py_ssize_t bits = self->size >> 16;
+ Py_ssize_t size = self->size & 0xFFFF;
const char *name;
name = ((PyTypeObject *)self->proto)->tp_name;
@@ -279,7 +271,7 @@ CField_repr(CFieldObject *self)
#if (PY_VERSION_HEX < 0x02050000)
"<Field type=%s, ofs=%d:%d, bits=%d>",
#else
- "<Field type=%s, ofs=%zd:%d, bits=%d>",
+ "<Field type=%s, ofs=%zd:%zd, bits=%zd>",
#endif
name, self->offset, size, bits);
else
@@ -287,7 +279,7 @@ CField_repr(CFieldObject *self)
#if (PY_VERSION_HEX < 0x02050000)
"<Field type=%s, ofs=%d, size=%d>",
#else
- "<Field type=%s, ofs=%zd, size=%d>",
+ "<Field type=%s, ofs=%zd, size=%zd>",
#endif
name, self->offset, size);
return result;
@@ -519,7 +511,7 @@ get_ulonglong(PyObject *v, unsigned PY_LONG_LONG *p)
*/
static PyObject *
-b_set(void *ptr, PyObject *value, unsigned size)
+b_set(void *ptr, PyObject *value, Py_ssize_t size)
{
long val;
if (get_long(value, &val) < 0)
@@ -530,7 +522,7 @@ b_set(void *ptr, PyObject *value, unsigned size)
static PyObject *
-b_get(void *ptr, unsigned size)
+b_get(void *ptr, Py_ssize_t size)
{
signed char val = *(signed char *)ptr;
GET_BITFIELD(val, size);
@@ -538,7 +530,7 @@ b_get(void *ptr, unsigned size)
}
static PyObject *
-B_set(void *ptr, PyObject *value, unsigned size)
+B_set(void *ptr, PyObject *value, Py_ssize_t size)
{
unsigned long val;
if (get_ulong(value, &val) < 0)
@@ -550,7 +542,7 @@ B_set(void *ptr, PyObject *value, unsigned size)
static PyObject *
-B_get(void *ptr, unsigned size)
+B_get(void *ptr, Py_ssize_t size)
{
unsigned char val = *(unsigned char *)ptr;
GET_BITFIELD(val, size);
@@ -558,7 +550,7 @@ B_get(void *ptr, unsigned size)
}
static PyObject *
-h_set(void *ptr, PyObject *value, unsigned size)
+h_set(void *ptr, PyObject *value, Py_ssize_t size)
{
long val;
short x;
@@ -572,7 +564,7 @@ h_set(void *ptr, PyObject *value, unsigned size)
static PyObject *
-h_set_sw(void *ptr, PyObject *value, unsigned size)
+h_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
long val;
short field;
@@ -587,7 +579,7 @@ h_set_sw(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-h_get(void *ptr, unsigned size)
+h_get(void *ptr, Py_ssize_t size)
{
short val;
memcpy(&val, ptr, sizeof(val));
@@ -596,7 +588,7 @@ h_get(void *ptr, unsigned size)
}
static PyObject *
-h_get_sw(void *ptr, unsigned size)
+h_get_sw(void *ptr, Py_ssize_t size)
{
short val;
memcpy(&val, ptr, sizeof(val));
@@ -606,7 +598,7 @@ h_get_sw(void *ptr, unsigned size)
}
static PyObject *
-H_set(void *ptr, PyObject *value, unsigned size)
+H_set(void *ptr, PyObject *value, Py_ssize_t size)
{
unsigned long val;
unsigned short x;
@@ -619,7 +611,7 @@ H_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-H_set_sw(void *ptr, PyObject *value, unsigned size)
+H_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
unsigned long val;
unsigned short field;
@@ -635,7 +627,7 @@ H_set_sw(void *ptr, PyObject *value, unsigned size)
static PyObject *
-H_get(void *ptr, unsigned size)
+H_get(void *ptr, Py_ssize_t size)
{
unsigned short val;
memcpy(&val, ptr, sizeof(val));
@@ -644,7 +636,7 @@ H_get(void *ptr, unsigned size)
}
static PyObject *
-H_get_sw(void *ptr, unsigned size)
+H_get_sw(void *ptr, Py_ssize_t size)
{
unsigned short val;
memcpy(&val, ptr, sizeof(val));
@@ -654,7 +646,7 @@ H_get_sw(void *ptr, unsigned size)
}
static PyObject *
-i_set(void *ptr, PyObject *value, unsigned size)
+i_set(void *ptr, PyObject *value, Py_ssize_t size)
{
long val;
int x;
@@ -667,7 +659,7 @@ i_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-i_set_sw(void *ptr, PyObject *value, unsigned size)
+i_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
long val;
int field;
@@ -683,7 +675,7 @@ i_set_sw(void *ptr, PyObject *value, unsigned size)
static PyObject *
-i_get(void *ptr, unsigned size)
+i_get(void *ptr, Py_ssize_t size)
{
int val;
memcpy(&val, ptr, sizeof(val));
@@ -692,7 +684,7 @@ i_get(void *ptr, unsigned size)
}
static PyObject *
-i_get_sw(void *ptr, unsigned size)
+i_get_sw(void *ptr, Py_ssize_t size)
{
int val;
memcpy(&val, ptr, sizeof(val));
@@ -704,7 +696,7 @@ i_get_sw(void *ptr, unsigned size)
#ifdef MS_WIN32
/* short BOOL - VARIANT_BOOL */
static PyObject *
-vBOOL_set(void *ptr, PyObject *value, unsigned size)
+vBOOL_set(void *ptr, PyObject *value, Py_ssize_t size)
{
switch (PyObject_IsTrue(value)) {
case -1:
@@ -719,7 +711,7 @@ vBOOL_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-vBOOL_get(void *ptr, unsigned size)
+vBOOL_get(void *ptr, Py_ssize_t size)
{
return PyBool_FromLong((long)*(short int *)ptr);
}
@@ -734,7 +726,7 @@ vBOOL_get(void *ptr, unsigned size)
#endif
static PyObject *
-t_set(void *ptr, PyObject *value, unsigned size)
+t_set(void *ptr, PyObject *value, Py_ssize_t size)
{
switch (PyObject_IsTrue(value)) {
case -1:
@@ -749,13 +741,13 @@ t_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-t_get(void *ptr, unsigned size)
+t_get(void *ptr, Py_ssize_t size)
{
return PyBool_FromLong((long)*(BOOL_TYPE *)ptr);
}
static PyObject *
-I_set(void *ptr, PyObject *value, unsigned size)
+I_set(void *ptr, PyObject *value, Py_ssize_t size)
{
unsigned long val;
unsigned int x;
@@ -768,7 +760,7 @@ I_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-I_set_sw(void *ptr, PyObject *value, unsigned size)
+I_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
unsigned long val;
unsigned int field;
@@ -783,7 +775,7 @@ I_set_sw(void *ptr, PyObject *value, unsigned size)
static PyObject *
-I_get(void *ptr, unsigned size)
+I_get(void *ptr, Py_ssize_t size)
{
unsigned int val;
memcpy(&val, ptr, sizeof(val));
@@ -792,7 +784,7 @@ I_get(void *ptr, unsigned size)
}
static PyObject *
-I_get_sw(void *ptr, unsigned size)
+I_get_sw(void *ptr, Py_ssize_t size)
{
unsigned int val;
memcpy(&val, ptr, sizeof(val));
@@ -802,7 +794,7 @@ I_get_sw(void *ptr, unsigned size)
}
static PyObject *
-l_set(void *ptr, PyObject *value, unsigned size)
+l_set(void *ptr, PyObject *value, Py_ssize_t size)
{
long val;
long x;
@@ -815,7 +807,7 @@ l_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-l_set_sw(void *ptr, PyObject *value, unsigned size)
+l_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
long val;
long field;
@@ -831,7 +823,7 @@ l_set_sw(void *ptr, PyObject *value, unsigned size)
static PyObject *
-l_get(void *ptr, unsigned size)
+l_get(void *ptr, Py_ssize_t size)
{
long val;
memcpy(&val, ptr, sizeof(val));
@@ -840,7 +832,7 @@ l_get(void *ptr, unsigned size)
}
static PyObject *
-l_get_sw(void *ptr, unsigned size)
+l_get_sw(void *ptr, Py_ssize_t size)
{
long val;
memcpy(&val, ptr, sizeof(val));
@@ -850,7 +842,7 @@ l_get_sw(void *ptr, unsigned size)
}
static PyObject *
-L_set(void *ptr, PyObject *value, unsigned size)
+L_set(void *ptr, PyObject *value, Py_ssize_t size)
{
unsigned long val;
unsigned long x;
@@ -863,7 +855,7 @@ L_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-L_set_sw(void *ptr, PyObject *value, unsigned size)
+L_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
unsigned long val;
unsigned long field;
@@ -879,7 +871,7 @@ L_set_sw(void *ptr, PyObject *value, unsigned size)
static PyObject *
-L_get(void *ptr, unsigned size)
+L_get(void *ptr, Py_ssize_t size)
{
unsigned long val;
memcpy(&val, ptr, sizeof(val));
@@ -888,7 +880,7 @@ L_get(void *ptr, unsigned size)
}
static PyObject *
-L_get_sw(void *ptr, unsigned size)
+L_get_sw(void *ptr, Py_ssize_t size)
{
unsigned long val;
memcpy(&val, ptr, sizeof(val));
@@ -899,7 +891,7 @@ L_get_sw(void *ptr, unsigned size)
#ifdef HAVE_LONG_LONG
static PyObject *
-q_set(void *ptr, PyObject *value, unsigned size)
+q_set(void *ptr, PyObject *value, Py_ssize_t size)
{
PY_LONG_LONG val;
PY_LONG_LONG x;
@@ -912,7 +904,7 @@ q_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-q_set_sw(void *ptr, PyObject *value, unsigned size)
+q_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
PY_LONG_LONG val;
PY_LONG_LONG field;
@@ -927,7 +919,7 @@ q_set_sw(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-q_get(void *ptr, unsigned size)
+q_get(void *ptr, Py_ssize_t size)
{
PY_LONG_LONG val;
memcpy(&val, ptr, sizeof(val));
@@ -936,7 +928,7 @@ q_get(void *ptr, unsigned size)
}
static PyObject *
-q_get_sw(void *ptr, unsigned size)
+q_get_sw(void *ptr, Py_ssize_t size)
{
PY_LONG_LONG val;
memcpy(&val, ptr, sizeof(val));
@@ -946,7 +938,7 @@ q_get_sw(void *ptr, unsigned size)
}
static PyObject *
-Q_set(void *ptr, PyObject *value, unsigned size)
+Q_set(void *ptr, PyObject *value, Py_ssize_t size)
{
unsigned PY_LONG_LONG val;
unsigned PY_LONG_LONG x;
@@ -959,7 +951,7 @@ Q_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-Q_set_sw(void *ptr, PyObject *value, unsigned size)
+Q_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
unsigned PY_LONG_LONG val;
unsigned PY_LONG_LONG field;
@@ -974,7 +966,7 @@ Q_set_sw(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-Q_get(void *ptr, unsigned size)
+Q_get(void *ptr, Py_ssize_t size)
{
unsigned PY_LONG_LONG val;
memcpy(&val, ptr, sizeof(val));
@@ -983,7 +975,7 @@ Q_get(void *ptr, unsigned size)
}
static PyObject *
-Q_get_sw(void *ptr, unsigned size)
+Q_get_sw(void *ptr, Py_ssize_t size)
{
unsigned PY_LONG_LONG val;
memcpy(&val, ptr, sizeof(val));
@@ -1000,7 +992,7 @@ Q_get_sw(void *ptr, unsigned size)
static PyObject *
-d_set(void *ptr, PyObject *value, unsigned size)
+d_set(void *ptr, PyObject *value, Py_ssize_t size)
{
double x;
@@ -1016,7 +1008,7 @@ d_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-d_get(void *ptr, unsigned size)
+d_get(void *ptr, Py_ssize_t size)
{
double val;
memcpy(&val, ptr, sizeof(val));
@@ -1024,7 +1016,7 @@ d_get(void *ptr, unsigned size)
}
static PyObject *
-d_set_sw(void *ptr, PyObject *value, unsigned size)
+d_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
double x;
@@ -1046,7 +1038,7 @@ d_set_sw(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-d_get_sw(void *ptr, unsigned size)
+d_get_sw(void *ptr, Py_ssize_t size)
{
#ifdef WORDS_BIGENDIAN
return PyFloat_FromDouble(_PyFloat_Unpack8(ptr, 1));
@@ -1056,7 +1048,7 @@ d_get_sw(void *ptr, unsigned size)
}
static PyObject *
-f_set(void *ptr, PyObject *value, unsigned size)
+f_set(void *ptr, PyObject *value, Py_ssize_t size)
{
float x;
@@ -1072,7 +1064,7 @@ f_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-f_get(void *ptr, unsigned size)
+f_get(void *ptr, Py_ssize_t size)
{
float val;
memcpy(&val, ptr, sizeof(val));
@@ -1080,7 +1072,7 @@ f_get(void *ptr, unsigned size)
}
static PyObject *
-f_set_sw(void *ptr, PyObject *value, unsigned size)
+f_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
float x;
@@ -1102,7 +1094,7 @@ f_set_sw(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-f_get_sw(void *ptr, unsigned size)
+f_get_sw(void *ptr, Py_ssize_t size)
{
#ifdef WORDS_BIGENDIAN
return PyFloat_FromDouble(_PyFloat_Unpack4(ptr, 1));
@@ -1122,7 +1114,7 @@ f_get_sw(void *ptr, unsigned size)
Py_DECREF on destruction. Maybe only when b_needsfree is non-zero.
*/
static PyObject *
-O_get(void *ptr, unsigned size)
+O_get(void *ptr, Py_ssize_t size)
{
PyObject *ob = *(PyObject **)ptr;
if (ob == NULL) {
@@ -1137,7 +1129,7 @@ O_get(void *ptr, unsigned size)
}
static PyObject *
-O_set(void *ptr, PyObject *value, unsigned size)
+O_set(void *ptr, PyObject *value, Py_ssize_t size)
{
/* Hm, does the memory block need it's own refcount or not? */
*(PyObject **)ptr = value;
@@ -1147,7 +1139,7 @@ O_set(void *ptr, PyObject *value, unsigned size)
static PyObject *
-c_set(void *ptr, PyObject *value, unsigned size)
+c_set(void *ptr, PyObject *value, Py_ssize_t size)
{
if (!PyString_Check(value) || (1 != PyString_Size(value))) {
PyErr_Format(PyExc_TypeError,
@@ -1160,7 +1152,7 @@ c_set(void *ptr, PyObject *value, unsigned size)
static PyObject *
-c_get(void *ptr, unsigned size)
+c_get(void *ptr, Py_ssize_t size)
{
return PyString_FromStringAndSize((char *)ptr, 1);
}
@@ -1168,9 +1160,9 @@ c_get(void *ptr, unsigned size)
#ifdef CTYPES_UNICODE
/* u - a single wchar_t character */
static PyObject *
-u_set(void *ptr, PyObject *value, unsigned size)
+u_set(void *ptr, PyObject *value, Py_ssize_t size)
{
- int len;
+ Py_ssize_t len;
if (PyString_Check(value)) {
value = PyUnicode_FromEncodedObject(value,
@@ -1202,17 +1194,17 @@ u_set(void *ptr, PyObject *value, unsigned size)
static PyObject *
-u_get(void *ptr, unsigned size)
+u_get(void *ptr, Py_ssize_t size)
{
return PyUnicode_FromWideChar((wchar_t *)ptr, 1);
}
/* U - a unicode string */
static PyObject *
-U_get(void *ptr, unsigned size)
+U_get(void *ptr, Py_ssize_t size)
{
PyObject *result;
- unsigned int len;
+ Py_ssize_t len;
Py_UNICODE *p;
size /= sizeof(wchar_t); /* we count character units here, not bytes */
@@ -1240,9 +1232,9 @@ U_get(void *ptr, unsigned size)
}
static PyObject *
-U_set(void *ptr, PyObject *value, unsigned length)
+U_set(void *ptr, PyObject *value, Py_ssize_t length)
{
- unsigned int size;
+ Py_ssize_t size;
/* It's easier to calculate in characters than in bytes */
length /= sizeof(wchar_t);
@@ -1263,7 +1255,11 @@ U_set(void *ptr, PyObject *value, unsigned length)
size = PyUnicode_GET_SIZE(value);
if (size > length) {
PyErr_Format(PyExc_ValueError,
+#if (PY_VERSION_HEX < 0x02050000)
"string too long (%d, maximum length %d)",
+#else
+ "string too long (%zd, maximum length %zd)",
+#endif
size, length);
Py_DECREF(value);
return NULL;
@@ -1277,9 +1273,10 @@ U_set(void *ptr, PyObject *value, unsigned length)
#endif
static PyObject *
-s_get(void *ptr, unsigned size)
+s_get(void *ptr, Py_ssize_t size)
{
PyObject *result;
+ size_t slen;
result = PyString_FromString((char *)ptr);
if (!result)
@@ -1287,7 +1284,8 @@ s_get(void *ptr, unsigned size)
/* chop off at the first NUL character, if any.
* On error, result will be deallocated and set to NULL.
*/
- size = min(size, strlen(PyString_AS_STRING(result)));
+ slen = strlen(PyString_AS_STRING(result));
+ size = min(size, (Py_ssize_t)slen);
if (result->ob_refcnt == 1) {
/* shorten the result */
_PyString_Resize(&result, size);
@@ -1298,10 +1296,10 @@ s_get(void *ptr, unsigned size)
}
static PyObject *
-s_set(void *ptr, PyObject *value, unsigned length)
+s_set(void *ptr, PyObject *value, Py_ssize_t length)
{
char *data;
- unsigned size;
+ Py_ssize_t size;
data = PyString_AsString(value);
if (!data)
@@ -1314,7 +1312,11 @@ s_set(void *ptr, PyObject *value, unsigned length)
++size;
} else if (size > length) {
PyErr_Format(PyExc_ValueError,
+#if (PY_VERSION_HEX < 0x02050000)
"string too long (%d, maximum length %d)",
+#else
+ "string too long (%zd, maximum length %zd)",
+#endif
size, length);
return NULL;
}
@@ -1324,7 +1326,7 @@ s_set(void *ptr, PyObject *value, unsigned length)
}
static PyObject *
-z_set(void *ptr, PyObject *value, unsigned size)
+z_set(void *ptr, PyObject *value, Py_ssize_t size)
{
if (value == Py_None) {
*(char **)ptr = NULL;
@@ -1358,7 +1360,7 @@ z_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-z_get(void *ptr, unsigned size)
+z_get(void *ptr, Py_ssize_t size)
{
/* XXX What about invalid pointers ??? */
if (*(void **)ptr) {
@@ -1379,7 +1381,7 @@ z_get(void *ptr, unsigned size)
#ifdef CTYPES_UNICODE
static PyObject *
-Z_set(void *ptr, PyObject *value, unsigned size)
+Z_set(void *ptr, PyObject *value, Py_ssize_t size)
{
if (value == Py_None) {
*(wchar_t **)ptr = NULL;
@@ -1447,7 +1449,7 @@ Z_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-Z_get(void *ptr, unsigned size)
+Z_get(void *ptr, Py_ssize_t size)
{
wchar_t *p;
p = *(wchar_t **)ptr;
@@ -1470,7 +1472,7 @@ Z_get(void *ptr, unsigned size)
#ifdef MS_WIN32
static PyObject *
-BSTR_set(void *ptr, PyObject *value, unsigned size)
+BSTR_set(void *ptr, PyObject *value, Py_ssize_t size)
{
BSTR bstr;
@@ -1494,8 +1496,13 @@ BSTR_set(void *ptr, PyObject *value, unsigned size)
/* create a BSTR from value */
if (value) {
+ Py_ssize_t size = PyUnicode_GET_SIZE(value);
+ if ((unsigned) size != size) {
+ PyErr_SetString(PyExc_ValueError, "String too long for BSTR");
+ return NULL;
+ }
bstr = SysAllocStringLen(PyUnicode_AS_UNICODE(value),
- PyUnicode_GET_SIZE(value));
+ (unsigned)size);
Py_DECREF(value);
} else
bstr = NULL;
@@ -1513,7 +1520,7 @@ BSTR_set(void *ptr, PyObject *value, unsigned size)
static PyObject *
-BSTR_get(void *ptr, unsigned size)
+BSTR_get(void *ptr, Py_ssize_t size)
{
BSTR p;
p = *(BSTR *)ptr;
@@ -1530,7 +1537,7 @@ BSTR_get(void *ptr, unsigned size)
#endif
static PyObject *
-P_set(void *ptr, PyObject *value, unsigned size)
+P_set(void *ptr, PyObject *value, Py_ssize_t size)
{
void *v;
if (value == Py_None) {
@@ -1563,7 +1570,7 @@ P_set(void *ptr, PyObject *value, unsigned size)
}
static PyObject *
-P_get(void *ptr, unsigned size)
+P_get(void *ptr, Py_ssize_t size)
{
if (*(void **)ptr == NULL) {
Py_INCREF(Py_None);
diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h
index 5fb6030..5846e3f 100644
--- a/Modules/_ctypes/ctypes.h
+++ b/Modules/_ctypes/ctypes.h
@@ -4,6 +4,7 @@
#if (PY_VERSION_HEX < 0x02050000)
typedef int Py_ssize_t;
+#define PyInt_FromSsize_t PyInt_FromLong
#endif
#ifndef MS_WIN32
@@ -23,16 +24,10 @@ typedef int Py_ssize_t;
#define PY_LONG_LONG LONG_LONG
#endif
-#if SIZEOF_VOID_P == SIZEOF_LONG
-#define PY_VOID_P_CODE "k"
-#elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P == SIZEOF_LONG_LONG)
-#define PY_VOID_P_CODE "K"
-#endif
-
typedef struct tagPyCArgObject PyCArgObject;
typedef struct tagCDataObject CDataObject;
-typedef PyObject *(* GETFUNC)(void *, unsigned size);
-typedef PyObject *(* SETFUNC)(void *, PyObject *value, unsigned size);
+typedef PyObject *(* GETFUNC)(void *, Py_ssize_t size);
+typedef PyObject *(* SETFUNC)(void *, PyObject *value, Py_ssize_t size);
typedef PyCArgObject *(* PARAMFUNC)(CDataObject *obj);
/* A default buffer in CDataObject, which can be used for small C types. If
@@ -137,9 +132,9 @@ extern struct fielddesc *getentry(char *fmt);
extern PyObject *
-CField_FromDesc(PyObject *desc, int index,
- int *pfield_size, int bitsize, int *pbitofs,
- int *psize, int *poffset, int *palign,
+CField_FromDesc(PyObject *desc, Py_ssize_t index,
+ Py_ssize_t *pfield_size, int bitsize, int *pbitofs,
+ Py_ssize_t *psize, Py_ssize_t *poffset, Py_ssize_t *palign,
int pack, int is_big_endian);
extern PyObject *CData_AtAddress(PyObject *type, void *buf);
@@ -310,7 +305,7 @@ struct tagPyCArgObject {
void *p;
} value;
PyObject *obj;
- int size; /* for the 'V' tag */
+ Py_ssize_t size; /* for the 'V' tag */
};
extern PyTypeObject PyCArg_Type;
@@ -387,7 +382,7 @@ extern char *conversion_mode_errors;
# define PyUnicode_AsWideChar My_PyUnicode_AsWideChar
extern PyObject *My_PyUnicode_FromWideChar(const wchar_t *, Py_ssize_t);
-extern int My_PyUnicode_AsWideChar(PyUnicodeObject *, wchar_t *, Py_ssize_t);
+extern Py_ssize_t My_PyUnicode_AsWideChar(PyUnicodeObject *, wchar_t *, Py_ssize_t);
#endif
diff --git a/Modules/_ctypes/libffi/src/x86/ffi.c b/Modules/_ctypes/libffi/src/x86/ffi.c
index 7f792b7..cc63b6b 100644
--- a/Modules/_ctypes/libffi/src/x86/ffi.c
+++ b/Modules/_ctypes/libffi/src/x86/ffi.c
@@ -174,7 +174,7 @@ extern void ffi_call_SYSV(void (*)(char *, extended_cif *),
/*@out@*/ extended_cif *,
unsigned, unsigned,
/*@out@*/ unsigned *,
- void (*fn)());
+ void (*fn)(void));
/*@=declundef@*/
/*@=exportheader@*/
@@ -185,13 +185,13 @@ extern void ffi_call_STDCALL(void (*)(char *, extended_cif *),
/*@out@*/ extended_cif *,
unsigned, unsigned,
/*@out@*/ unsigned *,
- void (*fn)());
+ void (*fn)(void));
/*@=declundef@*/
/*@=exportheader@*/
#endif /* X86_WIN32 */
void ffi_call(/*@dependent@*/ ffi_cif *cif,
- void (*fn)(),
+ void (*fn)(void),
/*@out@*/ void *rvalue,
/*@dependent@*/ void **avalue)
{
@@ -405,7 +405,7 @@ ffi_call_SYSV(void (*)(char *, extended_cif *),
/*@out@*/ extended_cif *,
unsigned, unsigned,
/*@out@*/ unsigned *,
- void (*fn)());
+ void (*fn)(void));
#ifdef X86_WIN32
extern void
@@ -413,12 +413,12 @@ ffi_call_STDCALL(void (*)(char *, extended_cif *),
/*@out@*/ extended_cif *,
unsigned, unsigned,
/*@out@*/ unsigned *,
- void (*fn)());
+ void (*fn)(void));
#endif /* X86_WIN32 */
void
ffi_raw_call(/*@dependent@*/ ffi_cif *cif,
- void (*fn)(),
+ void (*fn)(void),
/*@out@*/ void *rvalue,
/*@dependent@*/ ffi_raw *fake_avalue)
{
diff --git a/Modules/_ctypes/libffi/src/x86/ffi64.c b/Modules/_ctypes/libffi/src/x86/ffi64.c
index c6cf330..fa352f7 100644
--- a/Modules/_ctypes/libffi/src/x86/ffi64.c
+++ b/Modules/_ctypes/libffi/src/x86/ffi64.c
@@ -42,7 +42,7 @@ struct register_args
};
extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
- void *raddr, void (*fnaddr)(), unsigned ssecount);
+ void *raddr, void (*fnaddr)(void), unsigned ssecount);
/* All reference to register classes here is identical to the code in
gcc/config/i386/i386.c. Do *not* change one without the other. */
@@ -339,7 +339,7 @@ ffi_prep_cif_machdep (ffi_cif *cif)
}
void
-ffi_call (ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
{
enum x86_64_reg_class classes[MAX_CLASSES];
char *stack, *argp;
diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c
index 4241d3c..07e142b 100644
--- a/Modules/_ctypes/stgdict.c
+++ b/Modules/_ctypes/stgdict.c
@@ -50,7 +50,7 @@ int
StgDict_clone(StgDictObject *dst, StgDictObject *src)
{
char *d, *s;
- int size;
+ Py_ssize_t size;
StgDict_clear(dst);
PyMem_Free(dst->ffi_type_pointer.elements);
@@ -285,13 +285,13 @@ int
StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct)
{
StgDictObject *stgdict, *basedict;
- int len, offset, size, align, i;
- int union_size, total_align;
- int field_size = 0;
+ Py_ssize_t len, offset, size, align, i;
+ Py_ssize_t union_size, total_align;
+ Py_ssize_t field_size = 0;
int bitofs;
PyObject *isPacked;
int pack = 0;
- int ffi_ofs;
+ Py_ssize_t ffi_ofs;
int big_endian;
/* HACK Alert: I cannot be bothered to fix ctypes.com, so there has to
@@ -402,7 +402,11 @@ StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct)
if (dict == NULL) {
Py_DECREF(pair);
PyErr_Format(PyExc_TypeError,
+#if (PY_VERSION_HEX < 0x02050000)
"second item in _fields_ tuple (index %d) must be a C type",
+#else
+ "second item in _fields_ tuple (index %zd) must be a C type",
+#endif
i);
return -1;
}
@@ -480,7 +484,9 @@ StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct)
/* Adjust the size according to the alignment requirements */
size = ((size + total_align - 1) / total_align) * total_align;
- stgdict->ffi_type_pointer.alignment = total_align;
+ stgdict->ffi_type_pointer.alignment = Py_SAFE_DOWNCAST(total_align,
+ Py_ssize_t,
+ unsigned short);
stgdict->ffi_type_pointer.size = size;
stgdict->size = size;
diff --git a/Modules/_sqlite/cache.c b/Modules/_sqlite/cache.c
index 18a4066..6094eb3 100644
--- a/Modules/_sqlite/cache.c
+++ b/Modules/_sqlite/cache.c
@@ -243,6 +243,7 @@ PyObject* pysqlite_cache_display(pysqlite_Cache* self, PyObject* args)
}
template = PyString_FromString("%s <- %s ->%s\n");
if (!template) {
+ Py_DECREF(fmt_args);
return NULL;
}
display_str = PyString_Format(template, fmt_args);
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index 8844d81..4525c61 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -287,12 +287,12 @@ PyMODINIT_FUNC init_sqlite3(void)
/*** Create DB-API Exception hierarchy */
- if (!(pysqlite_Error = PyErr_NewException(MODULE_NAME ".Error", PyExc_StandardError, NULL))) {
+ if (!(pysqlite_Error = PyErr_NewException(MODULE_NAME ".Error", PyExc_Exception, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "Error", pysqlite_Error);
- if (!(pysqlite_Warning = PyErr_NewException(MODULE_NAME ".Warning", PyExc_StandardError, NULL))) {
+ if (!(pysqlite_Warning = PyErr_NewException(MODULE_NAME ".Warning", PyExc_Exception, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "Warning", pysqlite_Warning);
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 71e42c1..3a72b40 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -726,7 +726,7 @@ void print_delta(int test, struct timeval *s, struct timeval *e)
e->tv_sec -=1;
e->tv_usec += 1000000;
}
- printf("Test %d: %d.%06ds\n", test, (int)e->tv_sec, e->tv_usec);
+ printf("Test %d: %d.%06ds\n", test, (int)e->tv_sec, (int)e->tv_usec);
}
static PyObject *
@@ -884,6 +884,10 @@ typedef struct {
unsigned long ulong_member;
float float_member;
double double_member;
+#ifdef HAVE_LONG_LONG
+ PY_LONG_LONG longlong_member;
+ unsigned PY_LONG_LONG ulonglong_member;
+#endif
} all_structmembers;
typedef struct {
@@ -902,23 +906,40 @@ static struct PyMemberDef test_members[] = {
{"T_ULONG", T_ULONG, offsetof(test_structmembers, structmembers.ulong_member), 0, NULL},
{"T_FLOAT", T_FLOAT, offsetof(test_structmembers, structmembers.float_member), 0, NULL},
{"T_DOUBLE", T_DOUBLE, offsetof(test_structmembers, structmembers.double_member), 0, NULL},
+#ifdef HAVE_LONG_LONG
+ {"T_LONGLONG", T_LONGLONG, offsetof(test_structmembers, structmembers.longlong_member), 0, NULL},
+ {"T_ULONGLONG", T_ULONGLONG, offsetof(test_structmembers, structmembers.ulonglong_member), 0, NULL},
+#endif
{NULL}
};
static PyObject *test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs){
static char *keywords[]={"T_BYTE", "T_UBYTE", "T_SHORT", "T_USHORT", "T_INT", "T_UINT",
- "T_LONG", "T_ULONG", "T_FLOAT", "T_DOUBLE", NULL};
+ "T_LONG", "T_ULONG", "T_FLOAT", "T_DOUBLE",
+ #ifdef HAVE_LONG_LONG
+ "T_LONGLONG", "T_ULONGLONG",
+ #endif
+ NULL};
+ static char *fmt="|bBhHiIlkfd"
+ #ifdef HAVE_LONG_LONG
+ "LK"
+ #endif
+ ;
test_structmembers *ob=PyObject_New(test_structmembers, type);
if (ob==NULL)
return NULL;
memset(&ob->structmembers, 0, sizeof(all_structmembers));
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|bBhHiIlkfd", keywords,
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, fmt, keywords,
&ob->structmembers.byte_member, &ob->structmembers.ubyte_member,
&ob->structmembers.short_member, &ob->structmembers.ushort_member,
&ob->structmembers.int_member, &ob->structmembers.uint_member,
&ob->structmembers.long_member, &ob->structmembers.ulong_member,
- &ob->structmembers.float_member, &ob->structmembers.double_member)){
+ &ob->structmembers.float_member, &ob->structmembers.double_member
+ #ifdef HAVE_LONG_LONG
+ ,&ob->structmembers.longlong_member, &ob->structmembers.ulonglong_member
+ #endif
+ )){
Py_DECREF(ob);
return NULL;
}
@@ -1001,6 +1022,9 @@ init_testcapi(void)
PyModule_AddObject(m, "FLT_MIN", PyFloat_FromDouble(FLT_MIN));
PyModule_AddObject(m, "DBL_MAX", PyFloat_FromDouble(DBL_MAX));
PyModule_AddObject(m, "DBL_MIN", PyFloat_FromDouble(DBL_MIN));
+ PyModule_AddObject(m, "LLONG_MAX", PyLong_FromLongLong(PY_LLONG_MAX));
+ PyModule_AddObject(m, "LLONG_MIN", PyLong_FromLongLong(PY_LLONG_MIN));
+ PyModule_AddObject(m, "ULLONG_MAX", PyLong_FromUnsignedLongLong(PY_ULLONG_MAX));
PyModule_AddObject(m, "PY_SSIZE_T_MAX", PyInt_FromSsize_t(PY_SSIZE_T_MAX));
PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyInt_FromSsize_t(PY_SSIZE_T_MIN));
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index dae82b7..81b3500 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -1220,6 +1220,8 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self,
cres = NULL;
for (;;) {
+ int endoffile;
+
if (sizehint < 0)
cres = PyObject_CallMethod(self->stream,
(char *)method, NULL);
@@ -1245,6 +1247,8 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self,
goto errorexit;
}
+ endoffile = (PyString_GET_SIZE(cres) == 0);
+
if (self->pendingsize > 0) {
PyObject *ctr;
char *ctrdata;
@@ -1272,7 +1276,7 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self,
(MultibyteStatefulDecoderContext *)self, &buf))
goto errorexit;
- if (rsize == 0 || sizehint < 0) { /* end of file */
+ if (endoffile || sizehint < 0) {
if (buf.inbuf < buf.inbuf_end &&
multibytecodec_decerror(self->codec, &self->state,
&buf, self->errors, MBERR_TOOFEW))
diff --git a/Modules/getbuildinfo.c b/Modules/getbuildinfo.c
index 0f71ca0..b673f3f 100644
--- a/Modules/getbuildinfo.c
+++ b/Modules/getbuildinfo.c
@@ -20,7 +20,14 @@
#endif
#endif
+/* on unix, SVNVERSION is passed on the command line.
+ * on Windows, the string is interpolated using
+ * subwcrev.exe
+ */
+#ifndef SVNVERSION
#define SVNVERSION "$WCRANGE$$WCMODS?M:$"
+#endif
+
const char *
Py_GetBuildInfo(void)
{
@@ -39,7 +46,7 @@ _Py_svnversion(void)
{
/* the following string can be modified by subwcrev.exe */
static const char svnversion[] = SVNVERSION;
- if (!strstr(svnversion, "$"))
- return svnversion; /* it was interpolated */
+ if (svnversion[0] != '$')
+ return svnversion; /* it was interpolated, or passed on command line */
return "exported";
}
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 94dddda..5243640 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -361,8 +361,11 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
#define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
#define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
#define BTPROTO_HCI BLUETOOTH_PROTO_HCI
+#define SOL_HCI SOL_HCI_RAW
+#define HCI_FILTER SO_HCI_RAW_FILTER
#define sockaddr_l2 sockaddr_l2cap
#define sockaddr_rc sockaddr_rfcomm
+#define hci_dev hci_node
#define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
#define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
#define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
@@ -4335,10 +4338,10 @@ init_socket(void)
PyModule_AddIntConstant(m, "BTPROTO_L2CAP", BTPROTO_L2CAP);
PyModule_AddIntConstant(m, "BTPROTO_HCI", BTPROTO_HCI);
PyModule_AddIntConstant(m, "SOL_HCI", SOL_HCI);
- PyModule_AddIntConstant(m, "HCI_TIME_STAMP", HCI_TIME_STAMP);
- PyModule_AddIntConstant(m, "HCI_DATA_DIR", HCI_DATA_DIR);
PyModule_AddIntConstant(m, "HCI_FILTER", HCI_FILTER);
#if !defined(__FreeBSD__)
+ PyModule_AddIntConstant(m, "HCI_TIME_STAMP", HCI_TIME_STAMP);
+ PyModule_AddIntConstant(m, "HCI_DATA_DIR", HCI_DATA_DIR);
PyModule_AddIntConstant(m, "BTPROTO_SCO", BTPROTO_SCO);
#endif
PyModule_AddIntConstant(m, "BTPROTO_RFCOMM", BTPROTO_RFCOMM);