@@ -460,50 +460,53 @@ PyCArg_dealloc(PyCArgObject *self)
460460static PyObject *
461461PyCArg_repr (PyCArgObject * self )
462462{
463- char buffer [256 ];
464463 switch (self -> tag ) {
465464 case 'b' :
466465 case 'B' :
467- sprintf ( buffer , "<cparam '%c' (%d)>" ,
466+ return PyString_FromFormat ( "<cparam '%c' (%d)>" ,
468467 self -> tag , self -> value .b );
469- break ;
470468 case 'h' :
471469 case 'H' :
472- sprintf ( buffer , "<cparam '%c' (%d)>" ,
470+ return PyString_FromFormat ( "<cparam '%c' (%d)>" ,
473471 self -> tag , self -> value .h );
474- break ;
475472 case 'i' :
476473 case 'I' :
477- sprintf ( buffer , "<cparam '%c' (%d)>" ,
474+ return PyString_FromFormat ( "<cparam '%c' (%d)>" ,
478475 self -> tag , self -> value .i );
479- break ;
480476 case 'l' :
481477 case 'L' :
482- sprintf ( buffer , "<cparam '%c' (%ld)>" ,
478+ return PyString_FromFormat ( "<cparam '%c' (%ld)>" ,
483479 self -> tag , self -> value .l );
484- break ;
485480
486481#ifdef HAVE_LONG_LONG
487482 case 'q' :
488483 case 'Q' :
489- sprintf (buffer ,
490- "<cparam '%c' (%" PY_FORMAT_LONG_LONG "d)>" ,
484+ return PyString_FromFormat ("<cparam '%c' (%" PY_FORMAT_LONG_LONG "d)>" ,
491485 self -> tag , self -> value .q );
492- break ;
493486#endif
494487 case 'd' :
495- sprintf (buffer , "<cparam '%c' (%f)>" ,
496- self -> tag , self -> value .d );
497- break ;
498- case 'f' :
499- sprintf (buffer , "<cparam '%c' (%f)>" ,
500- self -> tag , self -> value .f );
501- break ;
488+ case 'f' : {
489+ PyObject * f = PyFloat_FromDouble ((self -> tag == 'f' ) ? self -> value .f : self -> value .d );
490+ if (f == NULL ) {
491+ return NULL ;
492+ }
493+ PyObject * r = PyObject_Repr (f );
494+ Py_DECREF (f );
495+ if (r == NULL ) {
496+ return NULL ;
497+ }
498+ char * value = PyString_AsString (r );
499+ Py_DECREF (r );
500+ if (value == NULL ) {
501+ return NULL ;
502+ }
503+ return PyString_FromFormat ("<cparam '%c' (%s)>" ,
504+ self -> tag , value );
505+ }
502506
503507 case 'c' :
504- sprintf ( buffer , "<cparam '%c' (%c)>" ,
508+ return PyString_FromFormat ( "<cparam '%c' (%c)>" ,
505509 self -> tag , self -> value .c );
506- break ;
507510
508511/* Hm, are these 'z' and 'Z' codes useful at all?
509512 Shouldn't they be replaced by the functionality of c_string
@@ -512,16 +515,13 @@ PyCArg_repr(PyCArgObject *self)
512515 case 'z' :
513516 case 'Z' :
514517 case 'P' :
515- sprintf ( buffer , "<cparam '%c' (%p)>" ,
518+ return PyString_FromFormat ( "<cparam '%c' (%p)>" ,
516519 self -> tag , self -> value .p );
517- break ;
518520
519521 default :
520- sprintf ( buffer , "<cparam '%c' at %p>" ,
522+ return PyString_FromFormat ( "<cparam '%c' at %p>" ,
521523 self -> tag , self );
522- break ;
523524 }
524- return PyString_FromString (buffer );
525525}
526526
527527static PyMemberDef PyCArgType_members [] = {
0 commit comments