Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d50338f

Browse files
committed
Added support for H (unsigned short) specifier in PyArg_ParseTuple and
Py_BuildValue.
1 parent 63f3d17 commit d50338f

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

Python/getargs.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,27 @@ convertsimple1(arg, p_format, p_va)
489489
break;
490490
}
491491

492+
case 'H': /* unsigned short int */
493+
{
494+
unsigned short *p = va_arg(*p_va, unsigned short *);
495+
long ival = PyInt_AsLong(arg);
496+
if (ival == -1 && PyErr_Occurred())
497+
return "integer<H>";
498+
else if (ival < 0) {
499+
PyErr_SetString(PyExc_OverflowError,
500+
"unsigned short integer is less than minimum");
501+
return "integer<H>";
502+
}
503+
else if (ival > USHRT_MAX) {
504+
PyErr_SetString(PyExc_OverflowError,
505+
"unsigned short integer is greater than maximum");
506+
return "integer<H>";
507+
}
508+
else
509+
*p = (unsigned short) ival;
510+
break;
511+
}
512+
492513
case 'i': /* signed int */
493514
{
494515
int *p = va_arg(*p_va, int *);
@@ -509,7 +530,6 @@ convertsimple1(arg, p_format, p_va)
509530
*p = ival;
510531
break;
511532
}
512-
513533
case 'l': /* long int */
514534
{
515535
long *p = va_arg(*p_va, long *);
@@ -1207,6 +1227,12 @@ skipitem(p_format, p_va)
12071227
break;
12081228
}
12091229

1230+
case 'H': /* unsigned short int */
1231+
{
1232+
(void) va_arg(*p_va, unsigned short *);
1233+
break;
1234+
}
1235+
12101236
case 'i': /* int */
12111237
{
12121238
(void) va_arg(*p_va, int *);

Python/modsupport.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,9 @@ do_mkvalue(p_format, p_va)
278278
case 'h':
279279
case 'i':
280280
return PyInt_FromLong((long)va_arg(*p_va, int));
281+
282+
case 'H':
283+
return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
281284

282285
case 'l':
283286
return PyInt_FromLong((long)va_arg(*p_va, long));

0 commit comments

Comments
 (0)