mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +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; | 			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: | 	default: | ||||||
| 		return "impossible<bad format char>"; | 		return "impossible<bad format char>"; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guido van Rossum
						Guido van Rossum