mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Implement new format character 't#'. This is like s#, accepting an
object that implements the buffer interface, but requires a buffer that contains 8-bit character data. Greg Stein.
This commit is contained in:
		
							parent
							
								
									1db7070217
								
							
						
					
					
						commit
						b317f8aa0d
					
				
					 1 changed files with 25 additions and 0 deletions
				
			
		|  | @ -712,6 +712,31 @@ convertsimple1(arg, p_format, p_va) | |||
| 			break; | ||||
| 		} | ||||
| 		 | ||||
| 	case 't': /* 8-bit character buffer, read-only access */ | ||||
| 		{ | ||||
| 			const char **p = va_arg(*p_va, const char **); | ||||
| 			PyBufferProcs *pb = arg->ob_type->tp_as_buffer; | ||||
| 			int count; | ||||
| 
 | ||||
| 			if ( *format++ != '#' ) | ||||
| 				return "invalid use of 't' format character"; | ||||
| 			if ( !PyType_HasFeature( | ||||
| 				arg->ob_type, | ||||
| 				Py_TPFLAGS_HAVE_GETCHARBUFFER) || | ||||
| 			     pb == NULL || | ||||
| 			     pb->bf_getcharbuffer == NULL || | ||||
| 			     pb->bf_getsegcount == NULL ) | ||||
| 				return "read-only character buffer"; | ||||
| 			if ( (*pb->bf_getsegcount)(arg, NULL) != 1 ) | ||||
| 				return "single-segment read-only buffer"; | ||||
| 			if ( (count = pb->bf_getcharbuffer(arg, 0, p)) < 0 ) | ||||
| 				return "(unspecified)"; | ||||
| 
 | ||||
| 			*va_arg(*p_va, int *) = count; | ||||
| 
 | ||||
| 			break; | ||||
| 		} | ||||
| 		 | ||||
| 	 | ||||
| 	default: | ||||
| 		return "impossible<bad format char>"; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guido van Rossum
						Guido van Rossum