@@ -489,58 +489,47 @@ is_literal_char(unsigned char c)
489489static PyObject *
490490PyCArg_repr (PyCArgObject * self )
491491{
492- char buffer [256 ];
493492 switch (self -> tag ) {
494493 case 'b' :
495494 case 'B' :
496- sprintf ( buffer , "<cparam '%c' (%d)>" ,
495+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
497496 self -> tag , self -> value .b );
498- break ;
499497 case 'h' :
500498 case 'H' :
501- sprintf ( buffer , "<cparam '%c' (%d)>" ,
499+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
502500 self -> tag , self -> value .h );
503- break ;
504501 case 'i' :
505502 case 'I' :
506- sprintf ( buffer , "<cparam '%c' (%d)>" ,
503+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
507504 self -> tag , self -> value .i );
508- break ;
509505 case 'l' :
510506 case 'L' :
511- sprintf ( buffer , "<cparam '%c' (%ld)>" ,
507+ return PyUnicode_FromFormat ( "<cparam '%c' (%ld)>" ,
512508 self -> tag , self -> value .l );
513- break ;
514509
515510 case 'q' :
516511 case 'Q' :
517- sprintf (buffer ,
518- #ifdef MS_WIN32
519- "<cparam '%c' (%I64d)>" ,
520- #else
521- "<cparam '%c' (%lld)>" ,
522- #endif
512+ return PyUnicode_FromFormat ("<cparam '%c' (%lld)>" ,
523513 self -> tag , self -> value .q );
524- break ;
525514 case 'd' :
526- sprintf (buffer , "<cparam '%c' (%f)>" ,
527- self -> tag , self -> value .d );
528- break ;
529- case 'f' :
530- sprintf (buffer , "<cparam '%c' (%f)>" ,
531- self -> tag , self -> value .f );
532- break ;
533-
515+ case 'f' : {
516+ PyObject * f = PyFloat_FromDouble ((self -> tag == 'f' ) ? self -> value .f : self -> value .d );
517+ if (f == NULL ) {
518+ return NULL ;
519+ }
520+ PyObject * result = PyUnicode_FromFormat ("<cparam '%c' (%R)>" , self -> tag , f );
521+ Py_DECREF (f );
522+ return result ;
523+ }
534524 case 'c' :
535525 if (is_literal_char ((unsigned char )self -> value .c )) {
536- sprintf ( buffer , "<cparam '%c' ('%c')>" ,
526+ return PyUnicode_FromFormat ( "<cparam '%c' ('%c')>" ,
537527 self -> tag , self -> value .c );
538528 }
539529 else {
540- sprintf ( buffer , "<cparam '%c' ('\\x%02x')>" ,
530+ return PyUnicode_FromFormat ( "<cparam '%c' ('\\x%02x')>" ,
541531 self -> tag , (unsigned char )self -> value .c );
542532 }
543- break ;
544533
545534/* Hm, are these 'z' and 'Z' codes useful at all?
546535 Shouldn't they be replaced by the functionality of c_string
@@ -549,22 +538,20 @@ PyCArg_repr(PyCArgObject *self)
549538 case 'z' :
550539 case 'Z' :
551540 case 'P' :
552- sprintf ( buffer , "<cparam '%c' (%p)>" ,
541+ return PyUnicode_FromFormat ( "<cparam '%c' (%p)>" ,
553542 self -> tag , self -> value .p );
554543 break ;
555544
556545 default :
557546 if (is_literal_char ((unsigned char )self -> tag )) {
558- sprintf ( buffer , "<cparam '%c' at %p>" ,
547+ return PyUnicode_FromFormat ( "<cparam '%c' at %p>" ,
559548 (unsigned char )self -> tag , (void * )self );
560549 }
561550 else {
562- sprintf ( buffer , "<cparam 0x%02x at %p>" ,
551+ return PyUnicode_FromFormat ( "<cparam 0x%02x at %p>" ,
563552 (unsigned char )self -> tag , (void * )self );
564553 }
565- break ;
566554 }
567- return PyUnicode_FromString (buffer );
568555}
569556
570557static PyMemberDef PyCArgType_members [] = {
0 commit comments