@@ -853,70 +853,6 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
853853 /* XXX WAAAAH! 's', 'y', 'z', 'u', 'Z', 'e', 'w' codes all
854854 need to be cleaned up! */
855855
856- case 's' : {/* text string */
857- if (* format == '*' ) {
858- Py_buffer * p = (Py_buffer * )va_arg (* p_va , Py_buffer * );
859-
860- if (PyUnicode_Check (arg )) {
861- uarg = UNICODE_DEFAULT_ENCODING (arg );
862- if (uarg == NULL )
863- return converterr (CONV_UNICODE ,
864- arg , msgbuf , bufsize );
865- PyBuffer_FillInfo (p , arg ,
866- PyBytes_AS_STRING (uarg ), PyBytes_GET_SIZE (uarg ),
867- 1 , 0 );
868- }
869- else { /* any buffer-like object */
870- char * buf ;
871- if (getbuffer (arg , p , & buf ) < 0 )
872- return converterr (buf , arg , msgbuf , bufsize );
873- }
874- if (addcleanup (p , freelist , cleanup_buffer )) {
875- return converterr (
876- "(cleanup problem)" ,
877- arg , msgbuf , bufsize );
878- }
879- format ++ ;
880- } else if (* format == '#' ) {
881- void * * p = (void * * )va_arg (* p_va , char * * );
882- FETCH_SIZE ;
883-
884- if (PyUnicode_Check (arg )) {
885- uarg = UNICODE_DEFAULT_ENCODING (arg );
886- if (uarg == NULL )
887- return converterr (CONV_UNICODE ,
888- arg , msgbuf , bufsize );
889- * p = PyBytes_AS_STRING (uarg );
890- STORE_SIZE (PyBytes_GET_SIZE (uarg ));
891- }
892- else { /* any buffer-like object */
893- /* XXX Really? */
894- char * buf ;
895- Py_ssize_t count = convertbuffer (arg , p , & buf );
896- if (count < 0 )
897- return converterr (buf , arg , msgbuf , bufsize );
898- STORE_SIZE (count );
899- }
900- format ++ ;
901- } else {
902- char * * p = va_arg (* p_va , char * * );
903-
904- if (PyUnicode_Check (arg )) {
905- uarg = UNICODE_DEFAULT_ENCODING (arg );
906- if (uarg == NULL )
907- return converterr (CONV_UNICODE ,
908- arg , msgbuf , bufsize );
909- * p = PyBytes_AS_STRING (uarg );
910- }
911- else
912- return converterr ("string" , arg , msgbuf , bufsize );
913- if ((Py_ssize_t ) strlen (* p ) != PyBytes_GET_SIZE (uarg ))
914- return converterr ("string without null bytes" ,
915- arg , msgbuf , bufsize );
916- }
917- break ;
918- }
919-
920856 case 'y' : {/* any buffer-like object, but not PyUnicode */
921857 void * * p = (void * * )va_arg (* p_va , char * * );
922858 char * buf ;
@@ -948,11 +884,14 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
948884 break ;
949885 }
950886
951- case 'z' : {/* like 's' or 's#', but None is okay, stored as NULL */
887+ case 's' : /* text string */
888+ case 'z' : /* text string or None */
889+ {
952890 if (* format == '*' ) {
891+ /* "s*" or "z*" */
953892 Py_buffer * p = (Py_buffer * )va_arg (* p_va , Py_buffer * );
954893
955- if (arg == Py_None )
894+ if (c == 'z' && arg == Py_None )
956895 PyBuffer_FillInfo (p , NULL , NULL , 0 , 1 , 0 );
957896 else if (PyUnicode_Check (arg )) {
958897 uarg = UNICODE_DEFAULT_ENCODING (arg );
@@ -975,11 +914,12 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
975914 }
976915 format ++ ;
977916 } else if (* format == '#' ) { /* any buffer-like object */
917+ /* "s#" or "z#" */
978918 void * * p = (void * * )va_arg (* p_va , char * * );
979919 FETCH_SIZE ;
980920
981- if (arg == Py_None ) {
982- * p = 0 ;
921+ if (c == 'z' && arg == Py_None ) {
922+ * p = NULL ;
983923 STORE_SIZE (0 );
984924 }
985925 else if (PyUnicode_Check (arg )) {
@@ -1000,11 +940,12 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
1000940 }
1001941 format ++ ;
1002942 } else {
943+ /* "s" or "z" */
1003944 char * * p = va_arg (* p_va , char * * );
1004945 uarg = NULL ;
1005946
1006- if (arg == Py_None )
1007- * p = 0 ;
947+ if (c == 'z' && arg == Py_None )
948+ * p = NULL ;
1008949 else if (PyUnicode_Check (arg )) {
1009950 uarg = UNICODE_DEFAULT_ENCODING (arg );
1010951 if (uarg == NULL )
@@ -1013,24 +954,28 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
1013954 * p = PyBytes_AS_STRING (uarg );
1014955 }
1015956 else
1016- return converterr ("string or None" ,
957+ return converterr (c == 'z' ? "str or None" : "str " ,
1017958 arg , msgbuf , bufsize );
1018959 if (* p != NULL && uarg != NULL &&
1019960 (Py_ssize_t ) strlen (* p ) != PyBytes_GET_SIZE (uarg ))
1020961 return converterr (
1021- "string without null bytes or None" ,
962+ c == 'z' ? "str without null bytes or None"
963+ : "str without null bytes" ,
1022964 arg , msgbuf , bufsize );
1023965 }
1024966 break ;
1025967 }
1026968
1027- case 'Z' : {/* unicode, may be NULL (None) */
969+ case 'u' : /* raw unicode buffer (Py_UNICODE *) */
970+ case 'Z' : /* raw unicode buffer or None */
971+ {
1028972 if (* format == '#' ) { /* any buffer-like object */
973+ /* "s#" or "Z#" */
1029974 Py_UNICODE * * p = va_arg (* p_va , Py_UNICODE * * );
1030975 FETCH_SIZE ;
1031976
1032- if (arg == Py_None ) {
1033- * p = 0 ;
977+ if (c == 'Z' && arg == Py_None ) {
978+ * p = NULL ;
1034979 STORE_SIZE (0 );
1035980 }
1036981 else if (PyUnicode_Check (arg )) {
@@ -1041,18 +986,20 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
1041986 return converterr ("str or None" , arg , msgbuf , bufsize );
1042987 format ++ ;
1043988 } else {
989+ /* "s" or "Z" */
1044990 Py_UNICODE * * p = va_arg (* p_va , Py_UNICODE * * );
1045991
1046- if (arg == Py_None )
1047- * p = 0 ;
992+ if (c == 'Z' && arg == Py_None )
993+ * p = NULL ;
1048994 else if (PyUnicode_Check (arg )) {
1049995 * p = PyUnicode_AS_UNICODE (arg );
1050996 if (Py_UNICODE_strlen (* p ) != PyUnicode_GET_SIZE (arg ))
1051997 return converterr (
1052998 "str without null character or None" ,
1053999 arg , msgbuf , bufsize );
10541000 } else
1055- return converterr ("str or None" , arg , msgbuf , bufsize );
1001+ return converterr (c == 'Z' ? "str or None" : "str" ,
1002+ arg , msgbuf , bufsize );
10561003 }
10571004 break ;
10581005 }
@@ -1222,24 +1169,6 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
12221169 break ;
12231170 }
12241171
1225- case 'u' : {/* raw unicode buffer (Py_UNICODE *) */
1226- Py_UNICODE * * p = va_arg (* p_va , Py_UNICODE * * );
1227- if (!PyUnicode_Check (arg ))
1228- return converterr ("str" , arg , msgbuf , bufsize );
1229- * p = PyUnicode_AS_UNICODE (arg );
1230- if (* format == '#' ) { /* store pointer and size */
1231- FETCH_SIZE ;
1232- STORE_SIZE (PyUnicode_GET_SIZE (arg ));
1233- format ++ ;
1234- } else {
1235- if (Py_UNICODE_strlen (* p ) != PyUnicode_GET_SIZE (arg ))
1236- return converterr (
1237- "str without null character" ,
1238- arg , msgbuf , bufsize );
1239- }
1240- break ;
1241- }
1242-
12431172 case 'S' : { /* PyBytes object */
12441173 PyObject * * p = va_arg (* p_va , PyObject * * );
12451174 if (PyBytes_Check (arg ))
0 commit comments