@@ -268,49 +268,94 @@ _PyMem_SetDefaultAllocator(PyMemAllocatorDomain domain,
268268
269269
270270int
271- _PyMem_SetupAllocators (const char * opt )
271+ _PyMem_GetAllocatorName (const char * name , PyMemAllocatorName * allocator )
272272{
273- if (opt == NULL || * opt == '\0' ) {
273+ if (name == NULL || * name == '\0' ) {
274274 /* PYTHONMALLOC is empty or is not set or ignored (-E/-I command line
275- options ): use default memory allocators */
276- opt = "default" ;
275+ nameions ): use default memory allocators */
276+ * allocator = PYMEM_ALLOCATOR_DEFAULT ;
277277 }
278+ else if (strcmp (name , "default" ) == 0 ) {
279+ * allocator = PYMEM_ALLOCATOR_DEFAULT ;
280+ }
281+ else if (strcmp (name , "debug" ) == 0 ) {
282+ * allocator = PYMEM_ALLOCATOR_DEBUG ;
283+ }
284+ #ifdef WITH_PYMALLOC
285+ else if (strcmp (name , "pymalloc ") == 0 ) {
286+ * allocator = PYMEM_ALLOCATOR_PYMALLOC ;
287+ }
288+ else if (strcmp (name , "pymalloc_debug ") == 0 ) {
289+ * allocator = PYMEM_ALLOCATOR_PYMALLOC_DEBUG ;
290+ }
291+ #endif
292+ else if (strcmp (name , "malloc" ) == 0 ) {
293+ * allocator = PYMEM_ALLOCATOR_MALLOC ;
294+ }
295+ else if (strcmp (name , "malloc_debug" ) == 0 ) {
296+ * allocator = PYMEM_ALLOCATOR_MALLOC_DEBUG ;
297+ }
298+ else {
299+ /* unknown allocator */
300+ return -1 ;
301+ }
302+ return 0 ;
303+ }
304+
278305
279- if (strcmp (opt , "default" ) == 0 ) {
306+ int
307+ _PyMem_SetupAllocators (PyMemAllocatorName allocator )
308+ {
309+ switch (allocator ) {
310+ case PYMEM_ALLOCATOR_NOT_SET :
311+ /* do nothing */
312+ break ;
313+
314+ case PYMEM_ALLOCATOR_DEFAULT :
280315 (void )_PyMem_SetDefaultAllocator (PYMEM_DOMAIN_RAW , NULL );
281316 (void )_PyMem_SetDefaultAllocator (PYMEM_DOMAIN_MEM , NULL );
282317 (void )_PyMem_SetDefaultAllocator (PYMEM_DOMAIN_OBJ , NULL );
283- }
284- else if (strcmp (opt , "debug" ) == 0 ) {
318+ break ;
319+
320+ case PYMEM_ALLOCATOR_DEBUG :
285321 (void )pymem_set_default_allocator (PYMEM_DOMAIN_RAW , 1 , NULL );
286322 (void )pymem_set_default_allocator (PYMEM_DOMAIN_MEM , 1 , NULL );
287323 (void )pymem_set_default_allocator (PYMEM_DOMAIN_OBJ , 1 , NULL );
288- }
324+ break ;
325+
289326#ifdef WITH_PYMALLOC
290- else if (strcmp (opt , "pymalloc ") == 0 || strcmp(opt, " pymalloc_debug ") == 0) {
327+ case PYMEM_ALLOCATOR_PYMALLOC :
328+ case PYMEM_ALLOCATOR_PYMALLOC_DEBUG :
329+ {
291330 PyMemAllocatorEx malloc_alloc = MALLOC_ALLOC ;
292331 PyMem_SetAllocator (PYMEM_DOMAIN_RAW , & malloc_alloc );
293332
294333 PyMemAllocatorEx pymalloc = PYMALLOC_ALLOC ;
295334 PyMem_SetAllocator (PYMEM_DOMAIN_MEM , & pymalloc );
296335 PyMem_SetAllocator (PYMEM_DOMAIN_OBJ , & pymalloc );
297336
298- if (strcmp ( opt , "pymalloc_debug" ) == 0 ) {
337+ if (allocator == PYMEM_ALLOCATOR_PYMALLOC_DEBUG ) {
299338 PyMem_SetupDebugHooks ();
300339 }
340+ break ;
301341 }
302342#endif
303- else if (strcmp (opt , "malloc ") == 0 || strcmp(opt, " malloc_debug ") == 0) {
343+
344+ case PYMEM_ALLOCATOR_MALLOC :
345+ case PYMEM_ALLOCATOR_MALLOC_DEBUG :
346+ {
304347 PyMemAllocatorEx malloc_alloc = MALLOC_ALLOC ;
305348 PyMem_SetAllocator (PYMEM_DOMAIN_RAW , & malloc_alloc );
306349 PyMem_SetAllocator (PYMEM_DOMAIN_MEM , & malloc_alloc );
307350 PyMem_SetAllocator (PYMEM_DOMAIN_OBJ , & malloc_alloc );
308351
309- if (strcmp ( opt , "malloc_debug" ) == 0 ) {
352+ if (allocator == PYMEM_ALLOCATOR_MALLOC_DEBUG ) {
310353 PyMem_SetupDebugHooks ();
311354 }
355+ break ;
312356 }
313- else {
357+
358+ default :
314359 /* unknown allocator */
315360 return -1 ;
316361 }
@@ -326,7 +371,7 @@ pymemallocator_eq(PyMemAllocatorEx *a, PyMemAllocatorEx *b)
326371
327372
328373const char *
329- _PyMem_GetAllocatorsName (void )
374+ _PyMem_GetCurrentAllocatorName (void )
330375{
331376 PyMemAllocatorEx malloc_alloc = MALLOC_ALLOC ;
332377#ifdef WITH_PYMALLOC
0 commit comments