@@ -77,7 +77,7 @@ _csv_traverse(PyObject *module, visitproc visit, void *arg)
77
77
static void
78
78
_csv_free (void * module )
79
79
{
80
- _csv_clear ((PyObject * )module );
80
+ ( void ) _csv_clear ((PyObject * )module );
81
81
}
82
82
83
83
typedef enum {
@@ -151,6 +151,10 @@ typedef struct {
151
151
PyObject * error_obj ; /* cached error object */
152
152
} WriterObj ;
153
153
154
+ #define _DialectObj_CAST (op ) ((DialectObj *)(op))
155
+ #define _ReaderObj_CAST (op ) ((ReaderObj *)(op))
156
+ #define _WriterObj_CAST (op ) ((WriterObj *)(op))
157
+
154
158
/*
155
159
* DIALECT class
156
160
*/
@@ -176,32 +180,37 @@ get_char_or_None(Py_UCS4 c)
176
180
}
177
181
178
182
static PyObject *
179
- Dialect_get_lineterminator (DialectObj * self , void * Py_UNUSED (ignored ))
183
+ Dialect_get_lineterminator (PyObject * op , void * Py_UNUSED (ignored ))
180
184
{
185
+ DialectObj * self = _DialectObj_CAST (op );
181
186
return Py_XNewRef (self -> lineterminator );
182
187
}
183
188
184
189
static PyObject *
185
- Dialect_get_delimiter (DialectObj * self , void * Py_UNUSED (ignored ))
190
+ Dialect_get_delimiter (PyObject * op , void * Py_UNUSED (ignored ))
186
191
{
192
+ DialectObj * self = _DialectObj_CAST (op );
187
193
return get_char_or_None (self -> delimiter );
188
194
}
189
195
190
196
static PyObject *
191
- Dialect_get_escapechar (DialectObj * self , void * Py_UNUSED (ignored ))
197
+ Dialect_get_escapechar (PyObject * op , void * Py_UNUSED (ignored ))
192
198
{
199
+ DialectObj * self = _DialectObj_CAST (op );
193
200
return get_char_or_None (self -> escapechar );
194
201
}
195
202
196
203
static PyObject *
197
- Dialect_get_quotechar (DialectObj * self , void * Py_UNUSED (ignored ))
204
+ Dialect_get_quotechar (PyObject * op , void * Py_UNUSED (ignored ))
198
205
{
206
+ DialectObj * self = _DialectObj_CAST (op );
199
207
return get_char_or_None (self -> quotechar );
200
208
}
201
209
202
210
static PyObject *
203
- Dialect_get_quoting (DialectObj * self , void * Py_UNUSED (ignored ))
211
+ Dialect_get_quoting (PyObject * op , void * Py_UNUSED (ignored ))
204
212
{
213
+ DialectObj * self = _DialectObj_CAST (op );
205
214
return PyLong_FromLong (self -> quoting );
206
215
}
207
216
@@ -371,16 +380,16 @@ static struct PyMemberDef Dialect_memberlist[] = {
371
380
#undef D_OFF
372
381
373
382
static PyGetSetDef Dialect_getsetlist [] = {
374
- { "delimiter" , ( getter ) Dialect_get_delimiter },
375
- { "escapechar" , ( getter ) Dialect_get_escapechar },
376
- { "lineterminator" , ( getter ) Dialect_get_lineterminator },
377
- { "quotechar" , ( getter ) Dialect_get_quotechar },
378
- { "quoting" , ( getter ) Dialect_get_quoting },
383
+ {"delimiter" , Dialect_get_delimiter },
384
+ {"escapechar" , Dialect_get_escapechar },
385
+ {"lineterminator" , Dialect_get_lineterminator },
386
+ {"quotechar" , Dialect_get_quotechar },
387
+ {"quoting" , Dialect_get_quoting },
379
388
{NULL },
380
389
};
381
390
382
391
static void
383
- Dialect_dealloc (DialectObj * self )
392
+ Dialect_dealloc (PyObject * self )
384
393
{
385
394
PyTypeObject * tp = Py_TYPE (self );
386
395
PyObject_GC_UnTrack (self );
@@ -594,15 +603,17 @@ PyDoc_STRVAR(Dialect_Type_doc,
594
603
"The Dialect type records CSV parsing and generation options.\n" );
595
604
596
605
static int
597
- Dialect_clear (DialectObj * self )
606
+ Dialect_clear (PyObject * op )
598
607
{
608
+ DialectObj * self = _DialectObj_CAST (op );
599
609
Py_CLEAR (self -> lineterminator );
600
610
return 0 ;
601
611
}
602
612
603
613
static int
604
- Dialect_traverse (DialectObj * self , visitproc visit , void * arg )
614
+ Dialect_traverse (PyObject * op , visitproc visit , void * arg )
605
615
{
616
+ DialectObj * self = _DialectObj_CAST (op );
606
617
Py_VISIT (self -> lineterminator );
607
618
Py_VISIT (Py_TYPE (self ));
608
619
return 0 ;
@@ -916,8 +927,10 @@ parse_reset(ReaderObj *self)
916
927
}
917
928
918
929
static PyObject *
919
- Reader_iternext (ReaderObj * self )
930
+ Reader_iternext (PyObject * op )
920
931
{
932
+ ReaderObj * self = _ReaderObj_CAST (op );
933
+
921
934
PyObject * fields = NULL ;
922
935
Py_UCS4 c ;
923
936
Py_ssize_t pos , linelen ;
@@ -982,11 +995,12 @@ Reader_iternext(ReaderObj *self)
982
995
}
983
996
984
997
static void
985
- Reader_dealloc (ReaderObj * self )
998
+ Reader_dealloc (PyObject * op )
986
999
{
1000
+ ReaderObj * self = _ReaderObj_CAST (op );
987
1001
PyTypeObject * tp = Py_TYPE (self );
988
1002
PyObject_GC_UnTrack (self );
989
- tp -> tp_clear (( PyObject * ) self );
1003
+ ( void ) tp -> tp_clear (op );
990
1004
if (self -> field != NULL ) {
991
1005
PyMem_Free (self -> field );
992
1006
self -> field = NULL ;
@@ -996,8 +1010,9 @@ Reader_dealloc(ReaderObj *self)
996
1010
}
997
1011
998
1012
static int
999
- Reader_traverse (ReaderObj * self , visitproc visit , void * arg )
1013
+ Reader_traverse (PyObject * op , visitproc visit , void * arg )
1000
1014
{
1015
+ ReaderObj * self = _ReaderObj_CAST (op );
1001
1016
Py_VISIT (self -> dialect );
1002
1017
Py_VISIT (self -> input_iter );
1003
1018
Py_VISIT (self -> fields );
@@ -1006,8 +1021,9 @@ Reader_traverse(ReaderObj *self, visitproc visit, void *arg)
1006
1021
}
1007
1022
1008
1023
static int
1009
- Reader_clear (ReaderObj * self )
1024
+ Reader_clear (PyObject * op )
1010
1025
{
1026
+ ReaderObj * self = _ReaderObj_CAST (op );
1011
1027
Py_CLEAR (self -> dialect );
1012
1028
Py_CLEAR (self -> input_iter );
1013
1029
Py_CLEAR (self -> fields );
@@ -1303,8 +1319,9 @@ PyDoc_STRVAR(csv_writerow_doc,
1303
1319
"elements will be converted to string." );
1304
1320
1305
1321
static PyObject *
1306
- csv_writerow (WriterObj * self , PyObject * seq )
1322
+ csv_writerow (PyObject * op , PyObject * seq )
1307
1323
{
1324
+ WriterObj * self = _WriterObj_CAST (op );
1308
1325
DialectObj * dialect = self -> dialect ;
1309
1326
PyObject * iter , * field , * line , * result ;
1310
1327
bool null_field = false;
@@ -1412,7 +1429,7 @@ PyDoc_STRVAR(csv_writerows_doc,
1412
1429
"elements will be converted to string." );
1413
1430
1414
1431
static PyObject *
1415
- csv_writerows (WriterObj * self , PyObject * seqseq )
1432
+ csv_writerows (PyObject * self , PyObject * seqseq )
1416
1433
{
1417
1434
PyObject * row_iter , * row_obj , * result ;
1418
1435
@@ -1437,9 +1454,9 @@ csv_writerows(WriterObj *self, PyObject *seqseq)
1437
1454
}
1438
1455
1439
1456
static struct PyMethodDef Writer_methods [] = {
1440
- { "writerow" , ( PyCFunction ) csv_writerow , METH_O , csv_writerow_doc },
1441
- { "writerows" , ( PyCFunction ) csv_writerows , METH_O , csv_writerows_doc },
1442
- { NULL , NULL }
1457
+ {"writerow" , csv_writerow , METH_O , csv_writerow_doc },
1458
+ {"writerows" , csv_writerows , METH_O , csv_writerows_doc },
1459
+ {NULL , NULL , 0 , NULL } /* sentinel */
1443
1460
};
1444
1461
1445
1462
#define W_OFF (x ) offsetof(WriterObj, x)
@@ -1452,8 +1469,9 @@ static struct PyMemberDef Writer_memberlist[] = {
1452
1469
#undef W_OFF
1453
1470
1454
1471
static int
1455
- Writer_traverse (WriterObj * self , visitproc visit , void * arg )
1472
+ Writer_traverse (PyObject * op , visitproc visit , void * arg )
1456
1473
{
1474
+ WriterObj * self = _WriterObj_CAST (op );
1457
1475
Py_VISIT (self -> dialect );
1458
1476
Py_VISIT (self -> write );
1459
1477
Py_VISIT (self -> error_obj );
@@ -1462,20 +1480,22 @@ Writer_traverse(WriterObj *self, visitproc visit, void *arg)
1462
1480
}
1463
1481
1464
1482
static int
1465
- Writer_clear (WriterObj * self )
1483
+ Writer_clear (PyObject * op )
1466
1484
{
1485
+ WriterObj * self = _WriterObj_CAST (op );
1467
1486
Py_CLEAR (self -> dialect );
1468
1487
Py_CLEAR (self -> write );
1469
1488
Py_CLEAR (self -> error_obj );
1470
1489
return 0 ;
1471
1490
}
1472
1491
1473
1492
static void
1474
- Writer_dealloc (WriterObj * self )
1493
+ Writer_dealloc (PyObject * op )
1475
1494
{
1495
+ WriterObj * self = _WriterObj_CAST (op );
1476
1496
PyTypeObject * tp = Py_TYPE (self );
1477
1497
PyObject_GC_UnTrack (self );
1478
- tp -> tp_clear (( PyObject * ) self );
1498
+ tp -> tp_clear (op );
1479
1499
if (self -> rec != NULL ) {
1480
1500
PyMem_Free (self -> rec );
1481
1501
}
0 commit comments