| 
									
										
										
										
											1997-07-19 19:25:33 +00:00
										 |  |  | /* Minimal main program -- everything is loaded from the library */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-08-08 20:01:22 +00:00
										 |  |  | #include "Python.h"
 | 
					
						
							| 
									
										
										
										
											2008-04-05 20:41:37 +00:00
										 |  |  | #include <locale.h>
 | 
					
						
							| 
									
										
										
										
											1998-08-08 20:01:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-28 21:56:08 +00:00
										 |  |  | #ifdef __FreeBSD__
 | 
					
						
							|  |  |  | #include <floatingpoint.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-05 20:41:37 +00:00
										 |  |  | #ifdef MS_WINDOWS
 | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | wmain(int argc, wchar_t **argv) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     return Py_Main(argc, argv); | 
					
						
							| 
									
										
										
										
											2008-04-05 20:41:37 +00:00
										 |  |  | } | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2009-05-05 04:43:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-20 22:58:25 +00:00
										 |  |  | #ifdef __APPLE__
 | 
					
						
							|  |  |  | extern wchar_t* _Py_DecodeUTF8_surrogateescape(const char *s, Py_ssize_t size); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-08-15 02:52:08 +00:00
										 |  |  | int | 
					
						
							| 
									
										
										
										
											2000-07-09 20:35:15 +00:00
										 |  |  | main(int argc, char **argv) | 
					
						
							| 
									
										
										
										
											1997-07-19 19:25:33 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     wchar_t **argv_copy = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*argc); | 
					
						
							|  |  |  |     /* We need a second copies, as Python might modify the first one. */ | 
					
						
							|  |  |  |     wchar_t **argv_copy2 = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*argc); | 
					
						
							|  |  |  |     int i, res; | 
					
						
							|  |  |  |     char *oldloc; | 
					
						
							|  |  |  |     /* 754 requires that FP exceptions run in "no stop" mode by default,
 | 
					
						
							|  |  |  |      * and until C vendors implement C99's ways to control FP exceptions, | 
					
						
							|  |  |  |      * Python requires non-stop mode.  Alas, some platforms enable FP | 
					
						
							|  |  |  |      * exceptions by default.  Here we disable them. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2002-12-28 21:56:08 +00:00
										 |  |  | #ifdef __FreeBSD__
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     fp_except_t m; | 
					
						
							| 
									
										
										
										
											2002-12-28 21:56:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     m = fpgetmask(); | 
					
						
							|  |  |  |     fpsetmask(m & ~FP_X_OFL); | 
					
						
							| 
									
										
										
										
											2002-12-28 21:56:08 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     if (!argv_copy || !argv_copy2) { | 
					
						
							|  |  |  |         fprintf(stderr, "out of memory\n"); | 
					
						
							|  |  |  |         return 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     oldloc = strdup(setlocale(LC_ALL, NULL)); | 
					
						
							|  |  |  |     setlocale(LC_ALL, ""); | 
					
						
							|  |  |  |     for (i = 0; i < argc; i++) { | 
					
						
							| 
									
										
										
										
											2010-10-20 22:58:25 +00:00
										 |  |  | #ifdef __APPLE__
 | 
					
						
							|  |  |  |         argv_copy[i] = _Py_DecodeUTF8_surrogateescape(argv[i], strlen(argv[i])); | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2010-10-16 23:16:16 +00:00
										 |  |  |         argv_copy[i] = _Py_char2wchar(argv[i], NULL); | 
					
						
							| 
									
										
										
										
											2010-10-20 22:58:25 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |         if (!argv_copy[i]) | 
					
						
							|  |  |  |             return 1; | 
					
						
							| 
									
										
										
										
											2010-10-13 23:24:06 +00:00
										 |  |  |         argv_copy2[i] = argv_copy[i]; | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |     setlocale(LC_ALL, oldloc); | 
					
						
							|  |  |  |     free(oldloc); | 
					
						
							|  |  |  |     res = Py_Main(argc, argv_copy); | 
					
						
							|  |  |  |     for (i = 0; i < argc; i++) { | 
					
						
							|  |  |  |         PyMem_Free(argv_copy2[i]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     PyMem_Free(argv_copy); | 
					
						
							|  |  |  |     PyMem_Free(argv_copy2); | 
					
						
							|  |  |  |     return res; | 
					
						
							| 
									
										
										
										
											1997-07-19 19:25:33 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2008-04-05 20:41:37 +00:00
										 |  |  | #endif
 |