@@ -484,58 +484,47 @@ is_literal_char(unsigned char c)
484484static PyObject *
485485PyCArg_repr (PyCArgObject * self )
486486{
487- char buffer [256 ];
488487 switch (self -> tag ) {
489488 case 'b' :
490489 case 'B' :
491- sprintf ( buffer , "<cparam '%c' (%d)>" ,
490+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
492491 self -> tag , self -> value .b );
493- break ;
494492 case 'h' :
495493 case 'H' :
496- sprintf ( buffer , "<cparam '%c' (%d)>" ,
494+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
497495 self -> tag , self -> value .h );
498- break ;
499496 case 'i' :
500497 case 'I' :
501- sprintf ( buffer , "<cparam '%c' (%d)>" ,
498+ return PyUnicode_FromFormat ( "<cparam '%c' (%d)>" ,
502499 self -> tag , self -> value .i );
503- break ;
504500 case 'l' :
505501 case 'L' :
506- sprintf ( buffer , "<cparam '%c' (%ld)>" ,
502+ return PyUnicode_FromFormat ( "<cparam '%c' (%ld)>" ,
507503 self -> tag , self -> value .l );
508- break ;
509504
510505 case 'q' :
511506 case 'Q' :
512- sprintf (buffer ,
513- #ifdef MS_WIN32
514- "<cparam '%c' (%I64d)>" ,
515- #else
516- "<cparam '%c' (%lld)>" ,
517- #endif
507+ return PyUnicode_FromFormat ("<cparam '%c' (%lld)>" ,
518508 self -> tag , self -> value .q );
519- break ;
520509 case 'd' :
521- sprintf (buffer , "<cparam '%c' (%f)>" ,
522- self -> tag , self -> value .d );
523- break ;
524- case 'f' :
525- sprintf (buffer , "<cparam '%c' (%f)>" ,
526- self -> tag , self -> value .f );
527- break ;
528-
510+ case 'f' : {
511+ PyObject * f = PyFloat_FromDouble ((self -> tag == 'f' ) ? self -> value .f : self -> value .d );
512+ if (f == NULL ) {
513+ return NULL ;
514+ }
515+ PyObject * result = PyUnicode_FromFormat ("<cparam '%c' (%R)>" , self -> tag , f );
516+ Py_DECREF (f );
517+ return result ;
518+ }
529519 case 'c' :
530520 if (is_literal_char ((unsigned char )self -> value .c )) {
531- sprintf ( buffer , "<cparam '%c' ('%c')>" ,
521+ return PyUnicode_FromFormat ( "<cparam '%c' ('%c')>" ,
532522 self -> tag , self -> value .c );
533523 }
534524 else {
535- sprintf ( buffer , "<cparam '%c' ('\\x%02x')>" ,
525+ return PyUnicode_FromFormat ( "<cparam '%c' ('\\x%02x')>" ,
536526 self -> tag , (unsigned char )self -> value .c );
537527 }
538- break ;
539528
540529/* Hm, are these 'z' and 'Z' codes useful at all?
541530 Shouldn't they be replaced by the functionality of c_string
@@ -544,22 +533,20 @@ PyCArg_repr(PyCArgObject *self)
544533 case 'z' :
545534 case 'Z' :
546535 case 'P' :
547- sprintf ( buffer , "<cparam '%c' (%p)>" ,
536+ return PyUnicode_FromFormat ( "<cparam '%c' (%p)>" ,
548537 self -> tag , self -> value .p );
549538 break ;
550539
551540 default :
552541 if (is_literal_char ((unsigned char )self -> tag )) {
553- sprintf ( buffer , "<cparam '%c' at %p>" ,
542+ return PyUnicode_FromFormat ( "<cparam '%c' at %p>" ,
554543 (unsigned char )self -> tag , (void * )self );
555544 }
556545 else {
557- sprintf ( buffer , "<cparam 0x%02x at %p>" ,
546+ return PyUnicode_FromFormat ( "<cparam 0x%02x at %p>" ,
558547 (unsigned char )self -> tag , (void * )self );
559548 }
560- break ;
561549 }
562- return PyUnicode_FromString (buffer );
563550}
564551
565552static PyMemberDef PyCArgType_members [] = {
0 commit comments