@@ -487,58 +487,47 @@ is_literal_char(unsigned char c)
487487static PyObject *
488488PyCArg_repr (PyCArgObject * self )
489489{
490- char buffer [256 ];
491490 switch (self -> tag ) {
492491 case 'b' :
493492 case 'B' :
494- sprintf ( buffer , "<cparam '%c' (%d)>" ,
493+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
495494 self -> tag , self -> value .b );
496- break ;
497495 case 'h' :
498496 case 'H' :
499- sprintf ( buffer , "<cparam '%c' (%d)>" ,
497+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
500498 self -> tag , self -> value .h );
501- break ;
502499 case 'i' :
503500 case 'I' :
504- sprintf ( buffer , "<cparam '%c' (%d)>" ,
501+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
505502 self -> tag , self -> value .i );
506- break ;
507503 case 'l' :
508504 case 'L' :
509- sprintf ( buffer , "<cparam '%c' (%ld)>" ,
505+ return PyUnicode_FromFormat ( "<cparam '%c' (%ld)>" ,
510506 self -> tag , self -> value .l );
511- break ;
512507
513508 case 'q' :
514509 case 'Q' :
515- sprintf (buffer ,
516- #ifdef MS_WIN32
517- "<cparam '%c' (%I64d)>" ,
518- #else
519- "<cparam '%c' (%lld)>" ,
520- #endif
510+ return PyUnicode_FromFormat ("<cparam '%c' (%lld)>" ,
521511 self -> tag , self -> value .q );
522- break ;
523512 case 'd' :
524- sprintf (buffer , "<cparam '%c' (%f)>" ,
525- self -> tag , self -> value .d );
526- break ;
527- case 'f' :
528- sprintf (buffer , "<cparam '%c' (%f)>" ,
529- self -> tag , self -> value .f );
530- break ;
531-
513+ case 'f' : {
514+ PyObject * f = PyFloat_FromDouble ((self -> tag == 'f' ) ? self -> value .f : self -> value .d );
515+ if (f == NULL ) {
516+ return NULL ;
517+ }
518+ PyObject * result = PyUnicode_FromFormat ("<cparam '%c' (%R)>" , self -> tag , f );
519+ Py_DECREF (f );
520+ return result ;
521+ }
532522 case 'c' :
533523 if (is_literal_char ((unsigned char )self -> value .c )) {
534- sprintf ( buffer , "<cparam '%c' ('%c')>" ,
524+ return PyUnicode_FromFormat ( "<cparam '%c' ('%c')>" ,
535525 self -> tag , self -> value .c );
536526 }
537527 else {
538- sprintf ( buffer , "<cparam '%c' ('\\x%02x')>" ,
528+ return PyUnicode_FromFormat ( "<cparam '%c' ('\\x%02x')>" ,
539529 self -> tag , (unsigned char )self -> value .c );
540530 }
541- break ;
542531
543532/* Hm, are these 'z' and 'Z' codes useful at all?
544533 Shouldn't they be replaced by the functionality of c_string
@@ -547,22 +536,20 @@ PyCArg_repr(PyCArgObject *self)
547536 case 'z' :
548537 case 'Z' :
549538 case 'P' :
550- sprintf ( buffer , "<cparam '%c' (%p)>" ,
539+ return PyUnicode_FromFormat ( "<cparam '%c' (%p)>" ,
551540 self -> tag , self -> value .p );
552541 break ;
553542
554543 default :
555544 if (is_literal_char ((unsigned char )self -> tag )) {
556- sprintf ( buffer , "<cparam '%c' at %p>" ,
545+ return PyUnicode_FromFormat ( "<cparam '%c' at %p>" ,
557546 (unsigned char )self -> tag , (void * )self );
558547 }
559548 else {
560- sprintf ( buffer , "<cparam 0x%02x at %p>" ,
549+ return PyUnicode_FromFormat ( "<cparam 0x%02x at %p>" ,
561550 (unsigned char )self -> tag , (void * )self );
562551 }
563- break ;
564552 }
565- return PyUnicode_FromString (buffer );
566553}
567554
568555static PyMemberDef PyCArgType_members [] = {
0 commit comments