16
16
Py_FrozenMain (int argc , char * * argv )
17
17
{
18
18
char * p ;
19
- int i , n , sts ;
19
+ int i , n , sts = 1 ;
20
20
int inspect = 0 ;
21
21
int unbuffered = 0 ;
22
- char * oldloc ;
23
- wchar_t * * argv_copy ;
22
+ char * oldloc = NULL ;
23
+ wchar_t * * argv_copy = NULL ;
24
24
/* We need a second copies, as Python might modify the first one. */
25
- wchar_t * * argv_copy2 ;
25
+ wchar_t * * argv_copy2 = NULL ;
26
26
27
- argv_copy = PyMem_RawMalloc (sizeof (wchar_t * )* argc );
28
- argv_copy2 = PyMem_RawMalloc (sizeof (wchar_t * )* argc );
27
+ argv_copy = PyMem_RawMalloc (sizeof (wchar_t * ) * argc );
28
+ argv_copy2 = PyMem_RawMalloc (sizeof (wchar_t * ) * argc );
29
29
if (!argv_copy || !argv_copy2 ) {
30
30
fprintf (stderr , "out of memory\n" );
31
- return 1 ;
31
+ goto error ;
32
32
}
33
33
34
34
Py_FrozenFlag = 1 ; /* Suppress errors from getpath.c */
@@ -44,23 +44,26 @@ Py_FrozenMain(int argc, char **argv)
44
44
setbuf (stderr , (char * )NULL );
45
45
}
46
46
47
- if (!argv_copy ) {
47
+ oldloc = _PyMem_RawStrdup (setlocale (LC_ALL , NULL ));
48
+ if (!oldloc ) {
48
49
fprintf (stderr , "out of memory\n" );
49
- return 1 ;
50
+ goto error ;
50
51
}
51
52
52
- oldloc = setlocale (LC_ALL , NULL );
53
53
setlocale (LC_ALL , "" );
54
54
for (i = 0 ; i < argc ; i ++ ) {
55
55
argv_copy [i ] = _Py_char2wchar (argv [i ], NULL );
56
+ argv_copy2 [i ] = argv_copy [i ];
56
57
if (!argv_copy [i ]) {
57
58
fprintf (stderr , "Unable to decode the command line argument #%i\n" ,
58
59
i + 1 );
59
- return 1 ;
60
+ argc = i ;
61
+ goto error ;
60
62
}
61
- argv_copy2 [i ] = argv_copy [i ];
62
63
}
63
64
setlocale (LC_ALL , oldloc );
65
+ PyMem_RawFree (oldloc );
66
+ oldloc = NULL ;
64
67
65
68
#ifdef MS_WINDOWS
66
69
PyInitFrozenExtensions ();
@@ -94,10 +97,14 @@ Py_FrozenMain(int argc, char **argv)
94
97
PyWinFreeze_ExeTerm ();
95
98
#endif
96
99
Py_Finalize ();
97
- for (i = 0 ; i < argc ; i ++ ) {
98
- PyMem_RawFree (argv_copy2 [i ]);
99
- }
100
+
101
+ error :
100
102
PyMem_RawFree (argv_copy );
101
- PyMem_RawFree (argv_copy2 );
103
+ if (argv_copy2 ) {
104
+ for (i = 0 ; i < argc ; i ++ )
105
+ PyMem_RawFree (argv_copy2 [i ]);
106
+ PyMem_RawFree (argv_copy2 );
107
+ }
108
+ PyMem_RawFree (oldloc );
102
109
return sts ;
103
110
}
0 commit comments