@@ -1137,9 +1137,7 @@ c_set(void *ptr, PyObject *value, Py_ssize_t size)
11371137 return NULL ;
11381138 if (PyBytes_GET_SIZE (value ) != 1 ) {
11391139 Py_DECREF (value );
1140- PyErr_Format (PyExc_TypeError ,
1141- "one character string expected" );
1142- return NULL ;
1140+ goto error ;
11431141 }
11441142 * (char * )ptr = PyBytes_AsString (value )[0 ];
11451143 Py_DECREF (value );
@@ -1149,22 +1147,17 @@ c_set(void *ptr, PyObject *value, Py_ssize_t size)
11491147 * (char * )ptr = PyBytes_AsString (value )[0 ];
11501148 _RET (value );
11511149 }
1152- /* XXX struni remove later */
1153- if (!PyString_Check (value ) || (1 != PyString_Size (value ))) {
1154- PyErr_Format (PyExc_TypeError ,
1155- "one character string expected" );
1156- return NULL ;
1157- }
1158- * (char * )ptr = PyString_AS_STRING (value )[0 ];
1159- _RET (value );
1150+ error :
1151+ PyErr_Format (PyExc_TypeError ,
1152+ "one character string expected" );
1153+ return NULL ;
11601154}
11611155
11621156
11631157static PyObject *
11641158c_get (void * ptr , Py_ssize_t size )
11651159{
1166- /* XXX struni return PyBytes (or PyUnicode?) later */
1167- return PyString_FromStringAndSize ((char * )ptr , 1 );
1160+ return PyUnicode_FromStringAndSize ((char * )ptr , 1 );
11681161}
11691162
11701163#ifdef CTYPES_UNICODE
@@ -1280,24 +1273,16 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length)
12801273static PyObject *
12811274s_get (void * ptr , Py_ssize_t size )
12821275{
1283- PyObject * result ;
1284- size_t slen ;
1276+ Py_ssize_t i ;
1277+ char * p ;
12851278
1286- result = PyString_FromString ((char * )ptr );
1287- if (!result )
1288- return NULL ;
1289- /* chop off at the first NUL character, if any.
1290- * On error, result will be deallocated and set to NULL.
1291- */
1292- slen = strlen (PyString_AS_STRING (result ));
1293- size = min (size , (Py_ssize_t )slen );
1294- if (result -> ob_refcnt == 1 ) {
1295- /* shorten the result */
1296- _PyString_Resize (& result , size );
1297- return result ;
1298- } else
1299- /* cannot shorten the result */
1300- return PyString_FromStringAndSize (ptr , size );
1279+ p = (char * )ptr ;
1280+ for (i = 0 ; i < size ; ++ i ) {
1281+ if (* p ++ == '\0' )
1282+ break ;
1283+ }
1284+
1285+ return PyUnicode_FromStringAndSize ((char * )ptr , (Py_ssize_t )i );
13011286}
13021287
13031288static PyObject *
@@ -1393,7 +1378,7 @@ z_get(void *ptr, Py_ssize_t size)
13931378 return NULL ;
13941379 }
13951380#endif
1396- return PyString_FromString (* (char * * )ptr );
1381+ return PyUnicode_FromString (* (char * * )ptr );
13971382 } else {
13981383 Py_INCREF (Py_None );
13991384 return Py_None ;
0 commit comments