- Notifications
You must be signed in to change notification settings - Fork 31.7k
/
Copy pathfrozenmain.c
123 lines (104 loc) · 2.92 KB
/
frozenmain.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/* Python interpreter main program for frozen scripts */
#include"Python.h"
#include"internal/pystate.h"
#include<locale.h>
#ifdefMS_WINDOWS
externvoidPyWinFreeze_ExeInit(void);
externvoidPyWinFreeze_ExeTerm(void);
externintPyInitFrozenExtensions(void);
#endif
/* Main program */
int
Py_FrozenMain(intargc, char**argv)
{
_PyInitErrorerr=_PyRuntime_Initialize();
if (_Py_INIT_FAILED(err)) {
fprintf(stderr, "Fatal Python error: %s\n", err.msg);
fflush(stderr);
exit(1);
}
constchar*p;
inti, n, sts=1;
intinspect=0;
intunbuffered=0;
char*oldloc=NULL;
wchar_t**argv_copy=NULL;
/* We need a second copies, as Python might modify the first one. */
wchar_t**argv_copy2=NULL;
if (argc>0) {
argv_copy=PyMem_RawMalloc(sizeof(wchar_t*) *argc);
argv_copy2=PyMem_RawMalloc(sizeof(wchar_t*) *argc);
if (!argv_copy|| !argv_copy2) {
fprintf(stderr, "out of memory\n");
goto error;
}
}
Py_FrozenFlag=1; /* Suppress errors from getpath.c */
if ((p=Py_GETENV("PYTHONINSPECT")) &&*p!='\0')
inspect=1;
if ((p=Py_GETENV("PYTHONUNBUFFERED")) &&*p!='\0')
unbuffered=1;
if (unbuffered) {
setbuf(stdin, (char*)NULL);
setbuf(stdout, (char*)NULL);
setbuf(stderr, (char*)NULL);
}
oldloc=_PyMem_RawStrdup(setlocale(LC_ALL, NULL));
if (!oldloc) {
fprintf(stderr, "out of memory\n");
goto error;
}
setlocale(LC_ALL, "");
for (i=0; i<argc; i++) {
argv_copy[i] =Py_DecodeLocale(argv[i], NULL);
argv_copy2[i] =argv_copy[i];
if (!argv_copy[i]) {
fprintf(stderr, "Unable to decode the command line argument #%i\n",
i+1);
argc=i;
goto error;
}
}
setlocale(LC_ALL, oldloc);
PyMem_RawFree(oldloc);
oldloc=NULL;
#ifdefMS_WINDOWS
PyInitFrozenExtensions();
#endif/* MS_WINDOWS */
if (argc >= 1)
Py_SetProgramName(argv_copy[0]);
Py_Initialize();
#ifdefMS_WINDOWS
PyWinFreeze_ExeInit();
#endif
if (Py_VerboseFlag)
fprintf(stderr, "Python %s\n%s\n",
Py_GetVersion(), Py_GetCopyright());
PySys_SetArgv(argc, argv_copy);
n=PyImport_ImportFrozenModule("__main__");
if (n==0)
Py_FatalError("__main__ not frozen");
if (n<0) {
PyErr_Print();
sts=1;
}
else
sts=0;
if (inspect&&isatty((int)fileno(stdin)))
sts=PyRun_AnyFile(stdin, "<stdin>") !=0;
#ifdefMS_WINDOWS
PyWinFreeze_ExeTerm();
#endif
if (Py_FinalizeEx() <0) {
sts=120;
}
error:
PyMem_RawFree(argv_copy);
if (argv_copy2) {
for (i=0; i<argc; i++)
PyMem_RawFree(argv_copy2[i]);
PyMem_RawFree(argv_copy2);
}
PyMem_RawFree(oldloc);
returnsts;
}