@@ -461,58 +461,47 @@ is_literal_char(unsigned char c)
461
461
static PyObject *
462
462
PyCArg_repr (PyCArgObject * self )
463
463
{
464
- char buffer [256 ];
465
464
switch (self -> tag ) {
466
465
case 'b' :
467
466
case 'B' :
468
- sprintf ( buffer , "<cparam '%c' (%d)>" ,
467
+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
469
468
self -> tag , self -> value .b );
470
- break ;
471
469
case 'h' :
472
470
case 'H' :
473
- sprintf ( buffer , "<cparam '%c' (%d)>" ,
471
+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
474
472
self -> tag , self -> value .h );
475
- break ;
476
473
case 'i' :
477
474
case 'I' :
478
- sprintf ( buffer , "<cparam '%c' (%d)>" ,
475
+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
479
476
self -> tag , self -> value .i );
480
- break ;
481
477
case 'l' :
482
478
case 'L' :
483
- sprintf ( buffer , "<cparam '%c' (%ld)>" ,
479
+ return PyUnicode_FromFormat ( "<cparam '%c' (%ld)>" ,
484
480
self -> tag , self -> value .l );
485
- break ;
486
481
487
482
case 'q' :
488
483
case 'Q' :
489
- sprintf (buffer ,
490
- #ifdef MS_WIN32
491
- "<cparam '%c' (%I64d)>" ,
492
- #else
493
- "<cparam '%c' (%lld)>" ,
494
- #endif
484
+ return PyUnicode_FromFormat ("<cparam '%c' (%lld)>" ,
495
485
self -> tag , self -> value .q );
496
- break ;
497
486
case 'd' :
498
- sprintf (buffer , "<cparam '%c' (%f)>" ,
499
- self -> tag , self -> value .d );
500
- break ;
501
- case 'f' :
502
- sprintf (buffer , "<cparam '%c' (%f)>" ,
503
- self -> tag , self -> value .f );
504
- break ;
505
-
487
+ case 'f' : {
488
+ PyObject * f = PyFloat_FromDouble ((self -> tag == 'f' ) ? self -> value .f : self -> value .d );
489
+ if (f == NULL ) {
490
+ return NULL ;
491
+ }
492
+ PyObject * result = PyUnicode_FromFormat ("<cparam '%c' (%R)>" , self -> tag , f );
493
+ Py_DECREF (f );
494
+ return result ;
495
+ }
506
496
case 'c' :
507
497
if (is_literal_char ((unsigned char )self -> value .c )) {
508
- sprintf ( buffer , "<cparam '%c' ('%c')>" ,
498
+ return PyUnicode_FromFormat ( "<cparam '%c' ('%c')>" ,
509
499
self -> tag , self -> value .c );
510
500
}
511
501
else {
512
- sprintf ( buffer , "<cparam '%c' ('\\x%02x')>" ,
502
+ return PyUnicode_FromFormat ( "<cparam '%c' ('\\x%02x')>" ,
513
503
self -> tag , (unsigned char )self -> value .c );
514
504
}
515
- break ;
516
505
517
506
/* Hm, are these 'z' and 'Z' codes useful at all?
518
507
Shouldn't they be replaced by the functionality of c_string
@@ -521,22 +510,20 @@ PyCArg_repr(PyCArgObject *self)
521
510
case 'z' :
522
511
case 'Z' :
523
512
case 'P' :
524
- sprintf ( buffer , "<cparam '%c' (%p)>" ,
513
+ return PyUnicode_FromFormat ( "<cparam '%c' (%p)>" ,
525
514
self -> tag , self -> value .p );
526
515
break ;
527
516
528
517
default :
529
518
if (is_literal_char ((unsigned char )self -> tag )) {
530
- sprintf ( buffer , "<cparam '%c' at %p>" ,
531
- (unsigned char )self -> tag , self );
519
+ return PyUnicode_FromFormat ( "<cparam '%c' at %p>" ,
520
+ (unsigned char )self -> tag , ( void * ) self );
532
521
}
533
522
else {
534
- sprintf ( buffer , "<cparam 0x%02x at %p>" ,
535
- (unsigned char )self -> tag , self );
523
+ return PyUnicode_FromFormat ( "<cparam 0x%02x at %p>" ,
524
+ (unsigned char )self -> tag , ( void * ) self );
536
525
}
537
- break ;
538
526
}
539
- return PyUnicode_FromString (buffer );
540
527
}
541
528
542
529
static PyMemberDef PyCArgType_members [] = {
0 commit comments