mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	Changed H specifier to mean "bitfield", i.e. any value from
-32768..65535 is acceptable. Added B specifier (with values from -128..255). No L added (which would have completed the set) because l already accepts any value (and the letter L is taken for quadwords).
This commit is contained in:
		
							parent
							
								
									ab3a0f36ed
								
							
						
					
					
						commit
						cc22fbe3db
					
				
					 1 changed files with 27 additions and 5 deletions
				
			
		|  | @ -409,6 +409,27 @@ convertsimple1(PyObject *arg, char **p_format, va_list *p_va) | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 	 | 	 | ||||||
|  | 	case 'B': /* byte sized bitfield - both signed and unsigned values allowed */ | ||||||
|  | 		{ | ||||||
|  | 			char *p = va_arg(*p_va, char *); | ||||||
|  | 			long ival = PyInt_AsLong(arg); | ||||||
|  | 			if (ival == -1 && PyErr_Occurred()) | ||||||
|  | 				return "integer<b>"; | ||||||
|  | 			else if (ival < SCHAR_MIN) { | ||||||
|  | 				PyErr_SetString(PyExc_OverflowError, | ||||||
|  | 			      "byte-sized integer bitfield is less than minimum"); | ||||||
|  | 				return "integer<B>"; | ||||||
|  | 			} | ||||||
|  | 			else if (ival > UCHAR_MAX) { | ||||||
|  | 				PyErr_SetString(PyExc_OverflowError, | ||||||
|  | 			      "byte-sized integer bitfield is greater than maximum"); | ||||||
|  | 				return "integer<B>"; | ||||||
|  | 			} | ||||||
|  | 			else | ||||||
|  | 				*p = (unsigned char) ival; | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 	 | ||||||
| 	case 'h': /* signed short int */ | 	case 'h': /* signed short int */ | ||||||
| 		{ | 		{ | ||||||
| 			short *p = va_arg(*p_va, short *); | 			short *p = va_arg(*p_va, short *); | ||||||
|  | @ -430,20 +451,20 @@ convertsimple1(PyObject *arg, char **p_format, va_list *p_va) | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 	 | 	 | ||||||
| 	case 'H': /* unsigned short int */ | 	case 'H': /* short int sized bitfield, both signed and unsigned allowed */ | ||||||
| 		{ | 		{ | ||||||
| 			unsigned short *p = va_arg(*p_va, unsigned short *); | 			unsigned short *p = va_arg(*p_va, unsigned short *); | ||||||
| 			long ival = PyInt_AsLong(arg); | 			long ival = PyInt_AsLong(arg); | ||||||
| 			if (ival == -1 && PyErr_Occurred()) | 			if (ival == -1 && PyErr_Occurred()) | ||||||
| 				return "integer<H>"; | 				return "integer<H>"; | ||||||
| 			else if (ival < 0) { | 			else if (ival < SHRT_MIN) { | ||||||
| 				PyErr_SetString(PyExc_OverflowError, | 				PyErr_SetString(PyExc_OverflowError, | ||||||
| 			      "unsigned short integer is less than minimum"); | 			      "short integer bitfield is less than minimum"); | ||||||
| 				return "integer<H>"; | 				return "integer<H>"; | ||||||
| 			} | 			} | ||||||
| 			else if (ival > USHRT_MAX) { | 			else if (ival > USHRT_MAX) { | ||||||
| 				PyErr_SetString(PyExc_OverflowError, | 				PyErr_SetString(PyExc_OverflowError, | ||||||
| 			      "unsigned short integer is greater than maximum"); | 			      "short integer bitfield is greater than maximum"); | ||||||
| 				return "integer<H>"; | 				return "integer<H>"; | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
|  | @ -1133,6 +1154,7 @@ skipitem(char **p_format, va_list *p_va) | ||||||
| 	switch (c) { | 	switch (c) { | ||||||
| 	 | 	 | ||||||
| 	case 'b': /* byte -- very short int */ | 	case 'b': /* byte -- very short int */ | ||||||
|  | 	case 'B': /* byte as bitfield */ | ||||||
| 		{ | 		{ | ||||||
| 			(void) va_arg(*p_va, char *); | 			(void) va_arg(*p_va, char *); | ||||||
| 			break; | 			break; | ||||||
|  | @ -1144,7 +1166,7 @@ skipitem(char **p_format, va_list *p_va) | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 	 | 	 | ||||||
| 	case 'H': /* unsigned short int */ | 	case 'H': /* short int as bitfield */ | ||||||
| 		{ | 		{ | ||||||
| 			(void) va_arg(*p_va, unsigned short *); | 			(void) va_arg(*p_va, unsigned short *); | ||||||
| 			break; | 			break; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jack Jansen
						Jack Jansen