ยปCore Development>Code coverage>Modules/python.c

Python code coverage for Modules/python.c

#countcontent
1n/a/* Minimal main program -- everything is loaded from the library */
2n/a
3n/a#include "Python.h"
4n/a#include <locale.h>
5n/a
6n/a#ifdef __FreeBSD__
7n/a#include <floatingpoint.h>
8n/a#endif
9n/a
10n/a#ifdef MS_WINDOWS
11n/aint
12n/awmain(int argc, wchar_t **argv)
13n/a{
14n/a return Py_Main(argc, argv);
15n/a}
16n/a#else
17n/a
18n/aint
19n/amain(int argc, char **argv)
20566{
21n/a wchar_t **argv_copy;
22n/a /* We need a second copy, as Python might modify the first one. */
23n/a wchar_t **argv_copy2;
24n/a int i, res;
25n/a char *oldloc;
26n/a#ifdef __FreeBSD__
27n/a fp_except_t m;
28n/a#endif
29n/a
30566 argv_copy = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*) * (argc+1));
31566 argv_copy2 = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*) * (argc+1));
32566 if (!argv_copy || !argv_copy2) {
330 fprintf(stderr, "out of memory\n");
340 return 1;
35n/a }
36n/a
37n/a /* 754 requires that FP exceptions run in "no stop" mode by default,
38n/a * and until C vendors implement C99's ways to control FP exceptions,
39n/a * Python requires non-stop mode. Alas, some platforms enable FP
40n/a * exceptions by default. Here we disable them.
41n/a */
42n/a#ifdef __FreeBSD__
43n/a m = fpgetmask();
44n/a fpsetmask(m & ~FP_X_OFL);
45n/a#endif
46n/a
47566 oldloc = _PyMem_RawStrdup(setlocale(LC_ALL, NULL));
48566 if (!oldloc) {
490 fprintf(stderr, "out of memory\n");
500 return 1;
51n/a }
52n/a
53566 setlocale(LC_ALL, "");
542930 for (i = 0; i < argc; i++) {
552364 argv_copy[i] = _Py_char2wchar(argv[i], NULL);
562364 if (!argv_copy[i]) {
570 PyMem_RawFree(oldloc);
580 fprintf(stderr, "Fatal Python error: "
59n/a "unable to decode the command line argument #%i\n",
60n/a i + 1);
610 return 1;
62n/a }
632364 argv_copy2[i] = argv_copy[i];
64n/a }
65566 argv_copy2[argc] = argv_copy[argc] = NULL;
66n/a
67566 setlocale(LC_ALL, oldloc);
68566 PyMem_RawFree(oldloc);
69566 res = Py_Main(argc, argv_copy);
702165 for (i = 0; i < argc; i++) {
711728 PyMem_RawFree(argv_copy2[i]);
72n/a }
73437 PyMem_RawFree(argv_copy);
74437 PyMem_RawFree(argv_copy2);
75437 return res;
76n/a}
77n/a#endif