@@ -463,58 +463,47 @@ is_literal_char(unsigned char c)
463463static PyObject *
464464PyCArg_repr (PyCArgObject * self )
465465{
466- char buffer [256 ];
467466 switch (self -> tag ) {
468467 case 'b' :
469468 case 'B' :
470- sprintf ( buffer , "<cparam '%c' (%d)>" ,
469+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
471470 self -> tag , self -> value .b );
472- break ;
473471 case 'h' :
474472 case 'H' :
475- sprintf ( buffer , "<cparam '%c' (%d)>" ,
473+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
476474 self -> tag , self -> value .h );
477- break ;
478475 case 'i' :
479476 case 'I' :
480- sprintf ( buffer , "<cparam '%c' (%d)>" ,
477+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
481478 self -> tag , self -> value .i );
482- break ;
483479 case 'l' :
484480 case 'L' :
485- sprintf ( buffer , "<cparam '%c' (%ld)>" ,
481+ return PyUnicode_FromFormat ( "<cparam '%c' (%ld)>" ,
486482 self -> tag , self -> value .l );
487- break ;
488483
489484 case 'q' :
490485 case 'Q' :
491- sprintf (buffer ,
492- #ifdef MS_WIN32
493- "<cparam '%c' (%I64d)>" ,
494- #else
495- "<cparam '%c' (%lld)>" ,
496- #endif
486+ return PyUnicode_FromFormat ("<cparam '%c' (%lld)>" ,
497487 self -> tag , self -> value .q );
498- break ;
499488 case 'd' :
500- sprintf (buffer , "<cparam '%c' (%f)>" ,
501- self -> tag , self -> value .d );
502- break ;
503- case 'f' :
504- sprintf (buffer , "<cparam '%c' (%f)>" ,
505- self -> tag , self -> value .f );
506- break ;
507-
489+ case 'f' : {
490+ PyObject * f = PyFloat_FromDouble ((self -> tag == 'f' ) ? self -> value .f : self -> value .d );
491+ if (f == NULL ) {
492+ return NULL ;
493+ }
494+ PyObject * result = PyUnicode_FromFormat ("<cparam '%c' (%R)>" , self -> tag , f );
495+ Py_DECREF (f );
496+ return result ;
497+ }
508498 case 'c' :
509499 if (is_literal_char ((unsigned char )self -> value .c )) {
510- sprintf ( buffer , "<cparam '%c' ('%c')>" ,
500+ return PyUnicode_FromFormat ( "<cparam '%c' ('%c')>" ,
511501 self -> tag , self -> value .c );
512502 }
513503 else {
514- sprintf ( buffer , "<cparam '%c' ('\\x%02x')>" ,
504+ return PyUnicode_FromFormat ( "<cparam '%c' ('\\x%02x')>" ,
515505 self -> tag , (unsigned char )self -> value .c );
516506 }
517- break ;
518507
519508/* Hm, are these 'z' and 'Z' codes useful at all?
520509 Shouldn't they be replaced by the functionality of c_string
@@ -523,22 +512,20 @@ PyCArg_repr(PyCArgObject *self)
523512 case 'z' :
524513 case 'Z' :
525514 case 'P' :
526- sprintf ( buffer , "<cparam '%c' (%p)>" ,
515+ return PyUnicode_FromFormat ( "<cparam '%c' (%p)>" ,
527516 self -> tag , self -> value .p );
528517 break ;
529518
530519 default :
531520 if (is_literal_char ((unsigned char )self -> tag )) {
532- sprintf ( buffer , "<cparam '%c' at %p>" ,
533- (unsigned char )self -> tag , self );
521+ return PyUnicode_FromFormat ( "<cparam '%c' at %p>" ,
522+ (unsigned char )self -> tag , ( void * ) self );
534523 }
535524 else {
536- sprintf ( buffer , "<cparam 0x%02x at %p>" ,
537- (unsigned char )self -> tag , self );
525+ return PyUnicode_FromFormat ( "<cparam 0x%02x at %p>" ,
526+ (unsigned char )self -> tag , ( void * ) self );
538527 }
539- break ;
540528 }
541- return PyUnicode_FromString (buffer );
542529}
543530
544531static PyMemberDef PyCArgType_members [] = {
0 commit comments