浏览代码

feat: 添加命令行参数编码转换

SongZihuan 3 年之前
父节点
当前提交
5764ec14e2
共有 2 个文件被更改,包括 28 次插入1 次删除
  1. 27 0
      src/main.c
  2. 1 1
      src/tool/file.c

+ 27 - 0
src/main.c

@@ -51,7 +51,34 @@ void freeBaseName(void *_) {
     free(base_path);
 }
 
+#ifdef aFunWIN32_NO_CYGWIN
+
+int argc__ = 0;
+char **argv__ = NULL;
+
+void convertArgs(int argc, char *argv_ansi[]) {
+    argc__ = argc;
+    argv__ = calloc((size_t)argc, sizeof(char *));
+    for(int i = 0; i < argc; i++) {
+        if (convertMultiByte(argv__ + i, argv_ansi[i], CP_ACP, CP_UTF8) == 0) {
+            fputs_std_("参数转换错误", stderr);
+            exit(EXIT_FAILURE);
+        }
+    }
+}
+
+void convertArgsFree(void) {
+    for(int i = 0; i < argc__; i++)
+        free(argv__[i]);
+    free(argv__);
+}
+
+int main(int argc, char **argv_ansi) {
+    convertArgs(argc, argv_ansi);
+    char **argv = argv__;
+#else
 int main(int argc, char **argv) {
+#endif
     jmp_buf main_buf;
     tty_stdin = isatty(fileno(stdin));
     base_path = getExedir(1);

+ 1 - 1
src/tool/file.c

@@ -277,8 +277,8 @@ bool isCharUTF8(char *str) {
 FILE *fileOpen(char *path_, char *mode_) {
     if (STR_LEN(mode_) >= 5)
         return NULL;
-    FILE *file = NULL;
 #if aFunWIN32_NO_CYGWIN
+    FILE *file = NULL;
     wchar_t *path = NULL;
     wchar_t mode[5];
     if (convertWideByte(&path, path_, CP_UTF8) == 0)