mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Revert r56044 (which changed the %c format specifier to accept a
unicode char into an int variable) and add %C which does this.
This commit is contained in:
		
							parent
							
								
									8934fc26c1
								
							
						
					
					
						commit
						d09413012c
					
				
					 4 changed files with 21 additions and 2 deletions
				
			
		|  | @ -1785,7 +1785,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) | ||||||
| 	if (type == &Arraytype && !_PyArg_NoKeywords("array.array()", kwds)) | 	if (type == &Arraytype && !_PyArg_NoKeywords("array.array()", kwds)) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 
 | 
 | ||||||
| 	if (!PyArg_ParseTuple(args, "c|O:array", &c, &initial)) | 	if (!PyArg_ParseTuple(args, "C|O:array", &c, &initial)) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 
 | 
 | ||||||
| 	if (!(initial == NULL || PyList_Check(initial) | 	if (!(initial == NULL || PyList_Check(initial) | ||||||
|  |  | ||||||
|  | @ -4033,7 +4033,7 @@ datetime_isoformat(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) | ||||||
| 	PyObject *result; | 	PyObject *result; | ||||||
| 	int us = DATE_GET_MICROSECOND(self); | 	int us = DATE_GET_MICROSECOND(self); | ||||||
| 
 | 
 | ||||||
| 	if (!PyArg_ParseTupleAndKeywords(args, kw, "|c:isoformat", keywords, &sep)) | 	if (!PyArg_ParseTupleAndKeywords(args, kw, "|C:isoformat", keywords, &sep)) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 	if (us) | 	if (us) | ||||||
| 		result = PyUnicode_FromFormat("%04d-%02d-%02d%c%02d:%02d:%02d.%06d", | 		result = PyUnicode_FromFormat("%04d-%02d-%02d%c%02d:%02d:%02d.%06d", | ||||||
|  |  | ||||||
|  | @ -761,6 +761,19 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, | ||||||
| #endif /* WITHOUT_COMPLEX */ | #endif /* WITHOUT_COMPLEX */ | ||||||
| 	 | 	 | ||||||
| 	case 'c': {/* char */ | 	case 'c': {/* char */ | ||||||
|  | 		char *p = va_arg(*p_va, char *); | ||||||
|  | 		if (PyString_Check(arg) && PyString_Size(arg) == 1) | ||||||
|  | 			*p = PyString_AS_STRING(arg)[0]; | ||||||
|  | 		else if (PyUnicode_Check(arg) && | ||||||
|  | 			 PyUnicode_GET_SIZE(arg) == 1 && | ||||||
|  | 			 PyUnicode_AS_UNICODE(arg)[0] < 256) | ||||||
|  | 			*p = PyUnicode_AS_UNICODE(arg)[0]; | ||||||
|  | 		else | ||||||
|  | 			return converterr("char < 256", arg, msgbuf, bufsize); | ||||||
|  | 		break; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	case 'C': {/* unicode char */ | ||||||
| 		int *p = va_arg(*p_va, int *); | 		int *p = va_arg(*p_va, int *); | ||||||
| 		if (PyString_Check(arg) && PyString_Size(arg) == 1) | 		if (PyString_Check(arg) && PyString_Size(arg) == 1) | ||||||
| 			*p = PyString_AS_STRING(arg)[0]; | 			*p = PyString_AS_STRING(arg)[0]; | ||||||
|  |  | ||||||
|  | @ -384,6 +384,12 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) | ||||||
| #endif /* WITHOUT_COMPLEX */ | #endif /* WITHOUT_COMPLEX */ | ||||||
| 
 | 
 | ||||||
| 		case 'c': | 		case 'c': | ||||||
|  | 		{ | ||||||
|  | 			char p[1]; | ||||||
|  | 			p[0] = (char)va_arg(*p_va, int); | ||||||
|  | 			return PyString_FromStringAndSize(p, 1); | ||||||
|  | 		} | ||||||
|  | 		case 'C': | ||||||
| 		{ | 		{ | ||||||
| 			int i = va_arg(*p_va, int); | 			int i = va_arg(*p_va, int); | ||||||
| 			Py_UNICODE c; | 			Py_UNICODE c; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Walter Dörwald
						Walter Dörwald