@@ -489,58 +489,47 @@ is_literal_char(unsigned char c)
489
489
static PyObject *
490
490
PyCArg_repr(PyCArgObject *self)
491
491
{
492
-
char buffer[256];
493
492
switch(self->tag) {
494
493
case 'b':
495
494
case 'B':
496
-
sprintf(buffer, "<cparam '%c' (%d)>",
495
+
return PyUnicode_FromFormat("<cparam '%c' (%d)>",
497
496
self->tag, self->value.b);
498
-
break;
499
497
case 'h':
500
498
case 'H':
501
-
sprintf(buffer, "<cparam '%c' (%d)>",
499
+
return PyUnicode_FromFormat("<cparam '%c' (%d)>",
502
500
self->tag, self->value.h);
503
-
break;
504
501
case 'i':
505
502
case 'I':
506
-
sprintf(buffer, "<cparam '%c' (%d)>",
503
+
return PyUnicode_FromFormat("<cparam '%c' (%d)>",
507
504
self->tag, self->value.i);
508
-
break;
509
505
case 'l':
510
506
case 'L':
511
-
sprintf(buffer, "<cparam '%c' (%ld)>",
507
+
return PyUnicode_FromFormat("<cparam '%c' (%ld)>",
512
508
self->tag, self->value.l);
513
-
break;
514
509
515
510
case 'q':
516
511
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)>",
523
513
self->tag, self->value.q);
524
-
break;
525
514
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
+
}
534
524
case 'c':
535
525
if (is_literal_char((unsigned char)self->value.c)) {
536
-
sprintf(buffer, "<cparam '%c' ('%c')>",
526
+
return PyUnicode_FromFormat("<cparam '%c' ('%c')>",
537
527
self->tag, self->value.c);
538
528
}
539
529
else {
540
-
sprintf(buffer, "<cparam '%c' ('\\x%02x')>",
530
+
return PyUnicode_FromFormat("<cparam '%c' ('\\x%02x')>",
541
531
self->tag, (unsigned char)self->value.c);
542
532
}
543
-
break;
544
533
545
534
/* Hm, are these 'z' and 'Z' codes useful at all?
546
535
Shouldn't they be replaced by the functionality of c_string
@@ -549,22 +538,20 @@ PyCArg_repr(PyCArgObject *self)
549
538
case 'z':
550
539
case 'Z':
551
540
case 'P':
552
-
sprintf(buffer, "<cparam '%c' (%p)>",
541
+
return PyUnicode_FromFormat("<cparam '%c' (%p)>",
553
542
self->tag, self->value.p);
554
543
break;
555
544
556
545
default:
557
546
if (is_literal_char((unsigned char)self->tag)) {
558
-
sprintf(buffer, "<cparam '%c' at %p>",
547
+
return PyUnicode_FromFormat("<cparam '%c' at %p>",
559
548
(unsigned char)self->tag, (void *)self);
560
549
}
561
550
else {
562
-
sprintf(buffer, "<cparam 0x%02x at %p>",
551
+
return PyUnicode_FromFormat("<cparam 0x%02x at %p>",
563
552
(unsigned char)self->tag, (void *)self);
564
553
}
565
-
break;
566
554
}
567
-
return PyUnicode_FromString(buffer);
568
555
}
569
556
570
557
static PyMemberDef PyCArgType_members[] = {
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4