Revert r33661, which broke all buildbots.
diff --git a/Modules/main.c b/Modules/main.c
index 2148ccc..5a84cc2 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -287,7 +287,7 @@
 {
 	int c;
 	int sts;
-	wchar_t *command = NULL;
+	char *command = NULL;
 	wchar_t *filename = NULL;
 	wchar_t *module = NULL;
 	FILE *fp = stdin;
@@ -299,6 +299,7 @@
 	int version = 0;
 	int saw_unbuffered_flag = 0;
 	PyCompilerFlags cf;
+	char *oldloc;
 
 	cf.cf_flags = 0;
 
@@ -309,19 +310,30 @@
 
 	while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) {
 		if (c == 'c') {
-			size_t len;
+			size_t r1, r2;
+			oldloc = setlocale(LC_ALL, NULL);
+			setlocale(LC_ALL, "");
+			r1 = wcslen(_PyOS_optarg);
+			r2 = wcstombs(NULL, _PyOS_optarg, r1);
+			if (r2 == (size_t) -1)
+				Py_FatalError(
+				   "cannot convert character encoding of -c argument");
+			if (r2 > r1)
+				r1 = r2;
+			r1 += 2;
 			/* -c is the last option; following arguments
 			   that look like options are left for the
 			   command to interpret. */
-
-			len = wcslen(_PyOS_optarg) + 1 + 1;
-			command = (wchar_t *)malloc(sizeof(wchar_t) * len);
+			command = (char *)malloc(r1);
 			if (command == NULL)
 				Py_FatalError(
 				   "not enough memory to copy -c argument");
-			wcscpy(command, _PyOS_optarg);
-			command[len - 2] = '\n';
-			command[len - 1] = 0;
+			r2 = wcstombs(command, _PyOS_optarg, r1);
+			if (r2 > r1-1)
+				Py_FatalError(
+				    "not enough memory to copy -c argument");
+			strcat(command, "\n");
+			setlocale(LC_ALL, oldloc);
 			break;
 		}
 
@@ -531,18 +543,8 @@
 	}
 
 	if (command) {
-		PyObject *commandObj = PyUnicode_FromUnicode(
-		                           command, wcslen(command));
+		sts = PyRun_SimpleStringFlags(command, &cf) != 0;
 		free(command);
-		if (commandObj != NULL) {
-			sts = PyRun_SimpleStringFlags(
-				_PyUnicode_AsString(commandObj), &cf) != 0;
-		}
-		else {
-			PyErr_Print();
-			sts = 1;
-		}
-		Py_DECREF(commandObj);
 	} else if (module) {
 		sts = RunModule(module, 1);
 	}