Conditional build of cmdscript to allow compilation with old python

versions (<3.10.x)
This commit is contained in:
Nitraiolo 2022-12-17 15:26:36 +01:00
commit 0d2e86f99c

View file

@ -403,6 +403,7 @@ static int CmdScriptRun(const char *Cmd) {
// hook Proxmark3 API // hook Proxmark3 API
PyImport_AppendInittab("_pm3", PyInit__pm3); PyImport_AppendInittab("_pm3", PyInit__pm3);
#endif #endif
#if PY_MINOR_VERSION >= 10
PyConfig py_conf; PyConfig py_conf;
PyConfig_InitIsolatedConfig(&py_conf); PyConfig_InitIsolatedConfig(&py_conf);
// Despite being isolated we probably want to allow users to use // Despite being isolated we probably want to allow users to use
@ -410,11 +411,15 @@ static int CmdScriptRun(const char *Cmd) {
// as system ones. But it seems isolated mode still enforces them off. // as system ones. But it seems isolated mode still enforces them off.
py_conf.use_environment = 1; py_conf.use_environment = 1;
py_conf.user_site_directory = 1; py_conf.user_site_directory = 1;
#else
Py_Initialize();
#endif
//int argc, char ** argv //int argc, char ** argv
char *argv[128]; char *argv[128];
argv[0] = filename; argv[0] = filename;
int argc = split(arguments, &argv[1]); int argc = split(arguments, &argv[1]);
#if PY_MINOR_VERSION >= 10
// The following line will implicitly pre-initialize Python // The following line will implicitly pre-initialize Python
PyConfig_SetBytesArgv(&py_conf, argc + 1, argv); PyConfig_SetBytesArgv(&py_conf, argc + 1, argv);
// This is required by Proxspace to work with an isolated Python configuration // This is required by Proxspace to work with an isolated Python configuration
@ -424,6 +429,17 @@ static int CmdScriptRun(const char *Cmd) {
// clean up // clean up
PyConfig_Clear(&py_conf); PyConfig_Clear(&py_conf);
#else
wchar_t *py_args[argc + 1];
py_args[0] = Py_DecodeLocale(filename, NULL);
for (int i = 0; i < argc; i++) {
py_args[i + 1] = Py_DecodeLocale(argv[i], NULL);
}
PySys_SetArgv(argc + 1, py_args);
// clean up
#endif
for (int i = 0; i < argc; ++i) { for (int i = 0; i < argc; ++i) {
free(argv[i + 1]); free(argv[i + 1]);
} }