2 /* Python interpreter main program for frozen scripts */
8 extern void PyWinFreeze_ExeInit(void);
9 extern void PyWinFreeze_ExeTerm(void);
10 extern int PyInitFrozenExtensions(void);
16 Py_FrozenMain(int argc
, char **argv
)
23 wchar_t **argv_copy
= PyMem_Malloc(sizeof(wchar_t*)*argc
);
24 /* We need a second copies, as Python might modify the first one. */
25 wchar_t **argv_copy2
= PyMem_Malloc(sizeof(wchar_t*)*argc
);
27 Py_FrozenFlag
= 1; /* Suppress errors from getpath.c */
29 if ((p
= Py_GETENV("PYTHONINSPECT")) && *p
!= '\0')
31 if ((p
= Py_GETENV("PYTHONUNBUFFERED")) && *p
!= '\0')
35 setbuf(stdin
, (char *)NULL
);
36 setbuf(stdout
, (char *)NULL
);
37 setbuf(stderr
, (char *)NULL
);
41 fprintf(stderr
, "out of memory\n");
45 oldloc
= setlocale(LC_ALL
, NULL
);
46 setlocale(LC_ALL
, "");
47 for (i
= 0; i
< argc
; i
++) {
48 #ifdef HAVE_BROKEN_MBSTOWCS
49 size_t argsize
= strlen(argv
[i
]);
51 size_t argsize
= mbstowcs(NULL
, argv
[i
], 0);
54 if (argsize
== (size_t)-1) {
55 fprintf(stderr
, "Could not convert argument %d to string\n", i
);
58 argv_copy
[i
] = PyMem_Malloc((argsize
+1)*sizeof(wchar_t));
59 argv_copy2
[i
] = argv_copy
[i
];
61 fprintf(stderr
, "out of memory\n");
64 count
= mbstowcs(argv_copy
[i
], argv
[i
], argsize
+1);
65 if (count
== (size_t)-1) {
66 fprintf(stderr
, "Could not convert argument %d to string\n", i
);
70 setlocale(LC_ALL
, oldloc
);
73 PyInitFrozenExtensions();
74 #endif /* MS_WINDOWS */
75 Py_SetProgramName(argv_copy
[0]);
78 PyWinFreeze_ExeInit();
82 fprintf(stderr
, "Python %s\n%s\n",
83 Py_GetVersion(), Py_GetCopyright());
85 PySys_SetArgv(argc
, argv_copy
);
87 n
= PyImport_ImportFrozenModule("__main__");
89 Py_FatalError("__main__ not frozen");
97 if (inspect
&& isatty((int)fileno(stdin
)))
98 sts
= PyRun_AnyFile(stdin
, "<stdin>") != 0;
101 PyWinFreeze_ExeTerm();
104 for (i
= 0; i
< argc
; i
++) {
105 PyMem_Free(argv_copy2
[i
]);
107 PyMem_Free(argv_copy
);
108 PyMem_Free(argv_copy2
);