summaryrefslogtreecommitdiff
path: root/Modules/_ctypes/_ctypes.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_ctypes/_ctypes.c')
-rw-r--r--Modules/_ctypes/_ctypes.c148
1 files changed, 65 insertions, 83 deletions
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index e4e237ea84..48351bee03 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -143,26 +143,24 @@ typedef struct {
} DictRemoverObject;
static void
-_DictRemover_dealloc(PyObject *_self)
+_DictRemover_dealloc(PyObject *myself)
{
- DictRemoverObject *self = (DictRemoverObject *)_self;
+ DictRemoverObject *self = (DictRemoverObject *)myself;
Py_XDECREF(self->key);
Py_XDECREF(self->dict);
- Py_TYPE(self)->tp_free(_self);
+ Py_TYPE(self)->tp_free(myself);
}
static PyObject *
-_DictRemover_call(PyObject *_self, PyObject *args, PyObject *kw)
+_DictRemover_call(PyObject *myself, PyObject *args, PyObject *kw)
{
- DictRemoverObject *self = (DictRemoverObject *)_self;
+ DictRemoverObject *self = (DictRemoverObject *)myself;
if (self->key && self->dict) {
if (-1 == PyDict_DelItem(self->dict, self->key))
/* XXX Error context */
PyErr_WriteUnraisable(Py_None);
- Py_DECREF(self->key);
- self->key = NULL;
- Py_DECREF(self->dict);
- self->dict = NULL;
+ Py_CLEAR(self->key);
+ Py_CLEAR(self->dict);
}
Py_INCREF(Py_None);
return Py_None;
@@ -1142,6 +1140,8 @@ static int
WCharArray_set_value(CDataObject *self, PyObject *value)
{
Py_ssize_t result = 0;
+ Py_UNICODE *wstr;
+ Py_ssize_t len;
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
@@ -1155,7 +1155,11 @@ WCharArray_set_value(CDataObject *self, PyObject *value)
return -1;
} else
Py_INCREF(value);
- if ((unsigned)PyUnicode_GET_SIZE(value) > self->b_size/sizeof(wchar_t)) {
+
+ wstr = PyUnicode_AsUnicodeAndSize(value, &len);
+ if (wstr == NULL)
+ return -1;
+ if ((unsigned)len > self->b_size/sizeof(wchar_t)) {
PyErr_SetString(PyExc_ValueError,
"string too long");
result = -1;
@@ -1843,11 +1847,9 @@ PyCSimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return NULL;
}
if (PyUnicode_Check(proto)) {
- PyObject *v = _PyUnicode_AsDefaultEncodedString(proto, NULL);
- if (!v)
+ proto_str = PyUnicode_AsUTF8AndSize(proto, &proto_len);
+ if (!proto_str)
goto error;
- proto_str = PyBytes_AS_STRING(v);
- proto_len = PyBytes_GET_SIZE(v);
} else {
PyErr_SetString(PyExc_TypeError,
"class must define a '_type_' string attribute");
@@ -2467,17 +2469,17 @@ static PyMemberDef PyCData_members[] = {
{ NULL },
};
-static int PyCData_NewGetBuffer(PyObject *_self, Py_buffer *view, int flags)
+static int PyCData_NewGetBuffer(PyObject *myself, Py_buffer *view, int flags)
{
- CDataObject *self = (CDataObject *)_self;
- StgDictObject *dict = PyObject_stgdict(_self);
+ CDataObject *self = (CDataObject *)myself;
+ StgDictObject *dict = PyObject_stgdict(myself);
Py_ssize_t i;
if (view == NULL) return 0;
view->buf = self->b_ptr;
- view->obj = _self;
- Py_INCREF(_self);
+ view->obj = myself;
+ Py_INCREF(myself);
view->len = self->b_size;
view->readonly = 0;
/* use default format character if not set */
@@ -2512,36 +2514,36 @@ PyCData_nohash(PyObject *self)
}
static PyObject *
-PyCData_reduce(PyObject *_self, PyObject *args)
+PyCData_reduce(PyObject *myself, PyObject *args)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
- if (PyObject_stgdict(_self)->flags & (TYPEFLAG_ISPOINTER|TYPEFLAG_HASPOINTER)) {
+ if (PyObject_stgdict(myself)->flags & (TYPEFLAG_ISPOINTER|TYPEFLAG_HASPOINTER)) {
PyErr_SetString(PyExc_ValueError,
"ctypes objects containing pointers cannot be pickled");
return NULL;
}
return Py_BuildValue("O(O(NN))",
_unpickle,
- Py_TYPE(_self),
- PyObject_GetAttrString(_self, "__dict__"),
+ Py_TYPE(myself),
+ PyObject_GetAttrString(myself, "__dict__"),
PyBytes_FromStringAndSize(self->b_ptr, self->b_size));
}
static PyObject *
-PyCData_setstate(PyObject *_self, PyObject *args)
+PyCData_setstate(PyObject *myself, PyObject *args)
{
void *data;
Py_ssize_t len;
int res;
PyObject *dict, *mydict;
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
if (!PyArg_ParseTuple(args, "Os#", &dict, &data, &len))
return NULL;
if (len > self->b_size)
len = self->b_size;
memmove(self->b_ptr, data, len);
- mydict = PyObject_GetAttrString(_self, "__dict__");
+ mydict = PyObject_GetAttrString(myself, "__dict__");
res = PyDict_Update(mydict, dict);
Py_DECREF(mydict);
if (res == -1)
@@ -2667,8 +2669,8 @@ PyCData_FromBaseObj(PyObject *type, PyObject *base, Py_ssize_t index, char *adr)
cmem->b_index = index;
} else { /* copy contents of adr */
if (-1 == PyCData_MallocBuffer(cmem, dict)) {
- return NULL;
Py_DECREF(cmem);
+ return NULL;
}
memcpy(cmem->b_ptr, adr, dict->size);
cmem->b_index = index;
@@ -2926,10 +2928,8 @@ static int
PyCFuncPtr_set_restype(PyCFuncPtrObject *self, PyObject *ob)
{
if (ob == NULL) {
- Py_XDECREF(self->restype);
- self->restype = NULL;
- Py_XDECREF(self->checker);
- self->checker = NULL;
+ Py_CLEAR(self->restype);
+ Py_CLEAR(self->checker);
return 0;
}
if (ob != Py_None && !PyType_stgdict(ob) && !PyCallable_Check(ob)) {
@@ -2972,10 +2972,8 @@ PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob)
PyObject *converters;
if (ob == NULL || ob == Py_None) {
- Py_XDECREF(self->converters);
- self->converters = NULL;
- Py_XDECREF(self->argtypes);
- self->argtypes = NULL;
+ Py_CLEAR(self->converters);
+ Py_CLEAR(self->argtypes);
} else {
converters = converters_from_argtypes(ob);
if (!converters)
@@ -3449,7 +3447,7 @@ _get_arg(int *pindex, PyObject *name, PyObject *defval, PyObject *inargs, PyObje
Py_INCREF(v);
return v;
}
- if (kwds && (v = PyDict_GetItem(kwds, name))) {
+ if (kwds && name && (v = PyDict_GetItem(kwds, name))) {
++*pindex;
Py_INCREF(v);
return v;
@@ -3697,8 +3695,10 @@ _build_result(PyObject *result, PyObject *callargs,
PyTuple_SET_ITEM(tup, index, v);
index++;
} else if (bit & outmask) {
+ _Py_IDENTIFIER(__ctypes_from_outparam__);
+
v = PyTuple_GET_ITEM(callargs, i);
- v = PyObject_CallMethod(v, "__ctypes_from_outparam__", NULL);
+ v = _PyObject_CallMethodId(v, &PyId___ctypes_from_outparam__, NULL);
if (v == NULL || numretvals == 1) {
Py_DECREF(callargs);
return v;
@@ -4177,9 +4177,9 @@ Array_init(CDataObject *self, PyObject *args, PyObject *kw)
}
static PyObject *
-Array_item(PyObject *_self, Py_ssize_t index)
+Array_item(PyObject *myself, Py_ssize_t index)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
Py_ssize_t offset, size;
StgDictObject *stgdict;
@@ -4203,9 +4203,9 @@ Array_item(PyObject *_self, Py_ssize_t index)
}
static PyObject *
-Array_subscript(PyObject *_self, PyObject *item)
+Array_subscript(PyObject *myself, PyObject *item)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
if (PyIndex_Check(item)) {
Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
@@ -4214,7 +4214,7 @@ Array_subscript(PyObject *_self, PyObject *item)
return NULL;
if (i < 0)
i += self->b_length;
- return Array_item(_self, i);
+ return Array_item(myself, i);
}
else if PySlice_Check(item) {
StgDictObject *stgdict, *itemdict;
@@ -4265,7 +4265,7 @@ Array_subscript(PyObject *_self, PyObject *item)
wchar_t *dest;
if (slicelen <= 0)
- return PyUnicode_FromUnicode(NULL, 0);
+ return PyUnicode_New(0, 0);
if (step == 1) {
return PyUnicode_FromWideChar(ptr + start,
slicelen);
@@ -4291,7 +4291,7 @@ Array_subscript(PyObject *_self, PyObject *item)
for (cur = start, i = 0; i < slicelen;
cur += step, i++) {
- PyObject *v = Array_item(_self, cur);
+ PyObject *v = Array_item(myself, cur);
PyList_SET_ITEM(np, i, v);
}
return np;
@@ -4305,9 +4305,9 @@ Array_subscript(PyObject *_self, PyObject *item)
}
static int
-Array_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
+Array_ass_item(PyObject *myself, Py_ssize_t index, PyObject *value)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
Py_ssize_t size, offset;
StgDictObject *stgdict;
char *ptr;
@@ -4334,9 +4334,9 @@ Array_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
}
static int
-Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
+Array_ass_subscript(PyObject *myself, PyObject *item, PyObject *value)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
@@ -4351,7 +4351,7 @@ Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
return -1;
if (i < 0)
i += self->b_length;
- return Array_ass_item(_self, i, value);
+ return Array_ass_item(myself, i, value);
}
else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step, slicelen, otherlen, i, cur;
@@ -4376,7 +4376,7 @@ Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
int result;
if (item == NULL)
return -1;
- result = Array_ass_item(_self, cur, item);
+ result = Array_ass_item(myself, cur, item);
Py_DECREF(item);
if (result == -1)
return -1;
@@ -4391,9 +4391,9 @@ Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
}
static Py_ssize_t
-Array_length(PyObject *_self)
+Array_length(PyObject *myself)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
return self->b_length;
}
@@ -4615,38 +4615,20 @@ static PyNumberMethods Simple_as_number = {
static PyObject *
Simple_repr(CDataObject *self)
{
- PyObject *val, *name, *args, *result;
- static PyObject *format;
+ PyObject *val, *result;
if (Py_TYPE(self)->tp_base != &Simple_Type) {
return PyUnicode_FromFormat("<%s object at %p>",
Py_TYPE(self)->tp_name, self);
}
- if (format == NULL) {
- format = PyUnicode_InternFromString("%s(%r)");
- if (format == NULL)
- return NULL;
- }
-
val = Simple_get_value(self);
if (val == NULL)
return NULL;
- name = PyUnicode_FromString(Py_TYPE(self)->tp_name);
- if (name == NULL) {
- Py_DECREF(val);
- return NULL;
- }
-
- args = PyTuple_Pack(2, name, val);
- Py_DECREF(name);
+ result = PyUnicode_FromFormat("%s(%R)",
+ Py_TYPE(self)->tp_name, val);
Py_DECREF(val);
- if (args == NULL)
- return NULL;
-
- result = PyUnicode_Format(format, args);
- Py_DECREF(args);
return result;
}
@@ -4697,9 +4679,9 @@ static PyTypeObject Simple_Type = {
PyCPointer_Type
*/
static PyObject *
-Pointer_item(PyObject *_self, Py_ssize_t index)
+Pointer_item(PyObject *myself, Py_ssize_t index)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
Py_ssize_t size;
Py_ssize_t offset;
StgDictObject *stgdict, *itemdict;
@@ -4728,9 +4710,9 @@ Pointer_item(PyObject *_self, Py_ssize_t index)
}
static int
-Pointer_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
+Pointer_ass_item(PyObject *myself, Py_ssize_t index, PyObject *value)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
Py_ssize_t size;
Py_ssize_t offset;
StgDictObject *stgdict, *itemdict;
@@ -4860,14 +4842,14 @@ Pointer_new(PyTypeObject *type, PyObject *args, PyObject *kw)
}
static PyObject *
-Pointer_subscript(PyObject *_self, PyObject *item)
+Pointer_subscript(PyObject *myself, PyObject *item)
{
- CDataObject *self = (CDataObject *)_self;
+ CDataObject *self = (CDataObject *)myself;
if (PyIndex_Check(item)) {
Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
if (i == -1 && PyErr_Occurred())
return NULL;
- return Pointer_item(_self, i);
+ return Pointer_item(myself, i);
}
else if (PySlice_Check(item)) {
PySliceObject *slice = (PySliceObject *)item;
@@ -4958,7 +4940,7 @@ Pointer_subscript(PyObject *_self, PyObject *item)
wchar_t *dest;
if (len <= 0)
- return PyUnicode_FromUnicode(NULL, 0);
+ return PyUnicode_New(0, 0);
if (step == 1) {
return PyUnicode_FromWideChar(ptr + start,
len);
@@ -4980,7 +4962,7 @@ Pointer_subscript(PyObject *_self, PyObject *item)
return NULL;
for (cur = start, i = 0; i < len; cur += step, i++) {
- PyObject *v = Pointer_item(_self, cur);
+ PyObject *v = Pointer_item(myself, cur);
PyList_SET_ITEM(np, i, v);
}
return np;