comparison Modules/python.c @ 84502:65f2c92ed079

Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup() Replace strdup() with _PyMem_RawStrdup() or _PyMem_Strdup(), depending if the GIL is held or not.
author Victor Stinner <victor.stinner@gmail.com>
date Sun, 07 Jul 2013 23:30:24 +0200
parents 18bb92b0c458
children b583fd54c8d6
comparison
equal deleted inserted replaced
84501:31a635303e55 84502:65f2c92ed079
41 41
42 m = fpgetmask(); 42 m = fpgetmask();
43 fpsetmask(m & ~FP_X_OFL); 43 fpsetmask(m & ~FP_X_OFL);
44 #endif 44 #endif
45 45
46 oldloc = strdup(setlocale(LC_ALL, NULL)); 46 oldloc = _PyMem_RawStrdup(setlocale(LC_ALL, NULL));
47 setlocale(LC_ALL, ""); 47 setlocale(LC_ALL, "");
48 for (i = 0; i < argc; i++) { 48 for (i = 0; i < argc; i++) {
49 argv_copy[i] = _Py_char2wchar(argv[i], NULL); 49 argv_copy[i] = _Py_char2wchar(argv[i], NULL);
50 if (!argv_copy[i]) { 50 if (!argv_copy[i]) {
51 free(oldloc); 51 PyMem_RawFree(oldloc);
52 fprintf(stderr, "Fatal Python error: " 52 fprintf(stderr, "Fatal Python error: "
53 "unable to decode the command line argument #%i\n", 53 "unable to decode the command line argument #%i\n",
54 i + 1); 54 i + 1);
55 return 1; 55 return 1;
56 } 56 }
57 argv_copy2[i] = argv_copy[i]; 57 argv_copy2[i] = argv_copy[i];
58 } 58 }
59 argv_copy2[argc] = argv_copy[argc] = NULL; 59 argv_copy2[argc] = argv_copy[argc] = NULL;
60 60
61 setlocale(LC_ALL, oldloc); 61 setlocale(LC_ALL, oldloc);
62 free(oldloc); 62 PyMem_RawFree(oldloc);
63 res = Py_Main(argc, argv_copy); 63 res = Py_Main(argc, argv_copy);
64 for (i = 0; i < argc; i++) { 64 for (i = 0; i < argc; i++) {
65 PyMem_RawFree(argv_copy2[i]); 65 PyMem_RawFree(argv_copy2[i]);
66 } 66 }
67 PyMem_RawFree(argv_copy); 67 PyMem_RawFree(argv_copy);