static void
_csv_free(void *module)
{
- _csv_clear((PyObject *)module);
+ (void)_csv_clear((PyObject *)module);
}
typedef enum {
PyObject *error_obj; /* cached error object */
} WriterObj;
+#define _DialectObj_CAST(op) ((DialectObj *)(op))
+#define _ReaderObj_CAST(op) ((ReaderObj *)(op))
+#define _WriterObj_CAST(op) ((WriterObj *)(op))
+
/*
* DIALECT class
*/
}
static PyObject *
-Dialect_get_lineterminator(DialectObj *self, void *Py_UNUSED(ignored))
+Dialect_get_lineterminator(PyObject *op, void *Py_UNUSED(ignored))
{
+ DialectObj *self = _DialectObj_CAST(op);
return Py_XNewRef(self->lineterminator);
}
static PyObject *
-Dialect_get_delimiter(DialectObj *self, void *Py_UNUSED(ignored))
+Dialect_get_delimiter(PyObject *op, void *Py_UNUSED(ignored))
{
+ DialectObj *self = _DialectObj_CAST(op);
return get_char_or_None(self->delimiter);
}
static PyObject *
-Dialect_get_escapechar(DialectObj *self, void *Py_UNUSED(ignored))
+Dialect_get_escapechar(PyObject *op, void *Py_UNUSED(ignored))
{
+ DialectObj *self = _DialectObj_CAST(op);
return get_char_or_None(self->escapechar);
}
static PyObject *
-Dialect_get_quotechar(DialectObj *self, void *Py_UNUSED(ignored))
+Dialect_get_quotechar(PyObject *op, void *Py_UNUSED(ignored))
{
+ DialectObj *self = _DialectObj_CAST(op);
return get_char_or_None(self->quotechar);
}
static PyObject *
-Dialect_get_quoting(DialectObj *self, void *Py_UNUSED(ignored))
+Dialect_get_quoting(PyObject *op, void *Py_UNUSED(ignored))
{
+ DialectObj *self = _DialectObj_CAST(op);
return PyLong_FromLong(self->quoting);
}
#undef D_OFF
static PyGetSetDef Dialect_getsetlist[] = {
- { "delimiter", (getter)Dialect_get_delimiter},
- { "escapechar", (getter)Dialect_get_escapechar},
- { "lineterminator", (getter)Dialect_get_lineterminator},
- { "quotechar", (getter)Dialect_get_quotechar},
- { "quoting", (getter)Dialect_get_quoting},
+ {"delimiter", Dialect_get_delimiter},
+ {"escapechar", Dialect_get_escapechar},
+ {"lineterminator", Dialect_get_lineterminator},
+ {"quotechar", Dialect_get_quotechar},
+ {"quoting", Dialect_get_quoting},
{NULL},
};
static void
-Dialect_dealloc(DialectObj *self)
+Dialect_dealloc(PyObject *self)
{
PyTypeObject *tp = Py_TYPE(self);
PyObject_GC_UnTrack(self);
"The Dialect type records CSV parsing and generation options.\n");
static int
-Dialect_clear(DialectObj *self)
+Dialect_clear(PyObject *op)
{
+ DialectObj *self = _DialectObj_CAST(op);
Py_CLEAR(self->lineterminator);
return 0;
}
static int
-Dialect_traverse(DialectObj *self, visitproc visit, void *arg)
+Dialect_traverse(PyObject *op, visitproc visit, void *arg)
{
+ DialectObj *self = _DialectObj_CAST(op);
Py_VISIT(self->lineterminator);
Py_VISIT(Py_TYPE(self));
return 0;
}
static PyObject *
-Reader_iternext(ReaderObj *self)
+Reader_iternext(PyObject *op)
{
+ ReaderObj *self = _ReaderObj_CAST(op);
+
PyObject *fields = NULL;
Py_UCS4 c;
Py_ssize_t pos, linelen;
}
static void
-Reader_dealloc(ReaderObj *self)
+Reader_dealloc(PyObject *op)
{
+ ReaderObj *self = _ReaderObj_CAST(op);
PyTypeObject *tp = Py_TYPE(self);
PyObject_GC_UnTrack(self);
- tp->tp_clear((PyObject *)self);
+ (void)tp->tp_clear(op);
if (self->field != NULL) {
PyMem_Free(self->field);
self->field = NULL;
}
static int
-Reader_traverse(ReaderObj *self, visitproc visit, void *arg)
+Reader_traverse(PyObject *op, visitproc visit, void *arg)
{
+ ReaderObj *self = _ReaderObj_CAST(op);
Py_VISIT(self->dialect);
Py_VISIT(self->input_iter);
Py_VISIT(self->fields);
}
static int
-Reader_clear(ReaderObj *self)
+Reader_clear(PyObject *op)
{
+ ReaderObj *self = _ReaderObj_CAST(op);
Py_CLEAR(self->dialect);
Py_CLEAR(self->input_iter);
Py_CLEAR(self->fields);
"elements will be converted to string.");
static PyObject *
-csv_writerow(WriterObj *self, PyObject *seq)
+csv_writerow(PyObject *op, PyObject *seq)
{
+ WriterObj *self = _WriterObj_CAST(op);
DialectObj *dialect = self->dialect;
PyObject *iter, *field, *line, *result;
bool null_field = false;
"elements will be converted to string.");
static PyObject *
-csv_writerows(WriterObj *self, PyObject *seqseq)
+csv_writerows(PyObject *self, PyObject *seqseq)
{
PyObject *row_iter, *row_obj, *result;
}
static struct PyMethodDef Writer_methods[] = {
- { "writerow", (PyCFunction)csv_writerow, METH_O, csv_writerow_doc},
- { "writerows", (PyCFunction)csv_writerows, METH_O, csv_writerows_doc},
- { NULL, NULL }
+ {"writerow", csv_writerow, METH_O, csv_writerow_doc},
+ {"writerows", csv_writerows, METH_O, csv_writerows_doc},
+ {NULL, NULL, 0, NULL} /* sentinel */
};
#define W_OFF(x) offsetof(WriterObj, x)
#undef W_OFF
static int
-Writer_traverse(WriterObj *self, visitproc visit, void *arg)
+Writer_traverse(PyObject *op, visitproc visit, void *arg)
{
+ WriterObj *self = _WriterObj_CAST(op);
Py_VISIT(self->dialect);
Py_VISIT(self->write);
Py_VISIT(self->error_obj);
}
static int
-Writer_clear(WriterObj *self)
+Writer_clear(PyObject *op)
{
+ WriterObj *self = _WriterObj_CAST(op);
Py_CLEAR(self->dialect);
Py_CLEAR(self->write);
Py_CLEAR(self->error_obj);
}
static void
-Writer_dealloc(WriterObj *self)
+Writer_dealloc(PyObject *op)
{
+ WriterObj *self = _WriterObj_CAST(op);
PyTypeObject *tp = Py_TYPE(self);
PyObject_GC_UnTrack(self);
- tp->tp_clear((PyObject *)self);
+ tp->tp_clear(op);
if (self->rec != NULL) {
PyMem_Free(self->rec);
}