Browse Source

feat: 修复hgt的问题

头文件声明变量时没有使用extern
SongZihuan 3 năm trước cách đây
mục cha
commit
351406fec0
5 tập tin đã thay đổi với 27 bổ sung25 xóa
  1. 1 1
      .gitignore
  2. 1 1
      lang/hgt.py
  3. 4 4
      src/core/env.cpp
  4. 3 2
      src/core/parser.cpp
  5. 18 17
      src/core/sig.cpp

+ 1 - 1
.gitignore

@@ -49,7 +49,7 @@
 .tmp_versions/
 modules.order
 Module.symvers
-Mkfile.old
+Mkfile.old_sigset
 dkms.conf
 
 #IDE

+ 1 - 1
lang/hgt.py

@@ -130,7 +130,7 @@ with open(os.path.join(output_dir, f"{base_name}_ht.py"), "w", encoding="utf-8")
 
             for i in flat_list:
                 fc.write(f"{export} const char *HT_TEXT_{base_name}_{i} = {flat_list[i][0]};\n")
-                fh.write(f"{export} const char *HT_TEXT_{base_name}_{i};\n")
+                fh.write(f"{export} extern const char *HT_TEXT_{base_name}_{i};\n")
                 fpy.write(f"# {i}: str = \"\"  # {flat_list[i][0]}\n")
 
             fc.write(f'''\n

+ 4 - 4
src/core/env.cpp

@@ -1690,7 +1690,7 @@ bool checkLiteralCode(const char *literal, char **func, bool *in_protect, af_Env
 
 static af_EnvironmentList *makeEnvironmentList(af_Environment *env) {
     static size_t id = 0;
-    static auto mutex = PTHREAD_MUTEX_INITIALIZER;
+    static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
     auto envl = calloc(1, af_EnvironmentList);
     envl->env = env;
@@ -1758,7 +1758,7 @@ void freeErrorInfo(af_ErrorInfo *ei, af_Environment *env){
 static void fprintfNote(FILE *file, const char *note) {
     char *ent = nullptr;
     while(true) {
-        ent = strchr(note, '\n');
+        ent = const_cast<char *>(strchr(note, '\n'));
         if (ent != nullptr)
             *ent = NUL;
         fprintf(file, "   #note %s\n", note);
@@ -1783,7 +1783,7 @@ void fprintfErrorInfo(FILE *file, af_ErrorInfo *ei) {
 static void fprintfNoteStderr(const char *note) {
     char *ent = nullptr;
     while(true) {
-        ent = strchr(note, '\n');
+        ent = const_cast<char *>(strchr(note, '\n'));
         if (ent != nullptr)
             *ent = NUL;
         printf_stderr(0, "   #note %s\n", note);
@@ -1808,7 +1808,7 @@ void fprintfErrorInfoStderr(af_ErrorInfo *ei) {
 static void fprintfNoteStdout(const char *note) {
     char *ent = nullptr;
     while(true) {
-        ent = strchr(note, '\n');
+        ent = const_cast<char *>(strchr(note, '\n'));
         if (ent != nullptr)
             *ent = NUL;
         printf_stdout(0, "   #note %s\n", note);

+ 3 - 2
src/core/parser.cpp

@@ -174,12 +174,13 @@ af_Parser *makeParserByFile(ConstFilePath path){
     return parser;
 }
 
+typedef void (*HandleFunc) (int);
 struct readerDataStdin {
     af_Parser *parser;
     bool no_first;
 
-    __p_sig_fn_t sig_int;
-    __p_sig_fn_t sig_term;
+    HandleFunc sig_int;
+    HandleFunc sig_term;
 
     char *data;
     size_t index;

+ 18 - 17
src/core/sig.cpp

@@ -2,9 +2,10 @@
 #include "__sig.hpp"
 #include "pthread.h"
 
+typedef void (*HandleFunc) (int);
 struct af_SignalInfo {
-    __p_sig_fn_t sig_int;
-    __p_sig_fn_t sig_term;
+    HandleFunc sig_int;
+    HandleFunc sig_term;
 
     volatile sig_atomic_t flat_int;  // SIGUSR1 (*nix)
     volatile sig_atomic_t flat_term;  // SIGUSR1 (*nix)
@@ -13,10 +14,10 @@ struct af_SignalInfo {
     volatile sig_atomic_t flat_u1;  // SIGUSR1 (*nix)
     volatile sig_atomic_t flat_u2;  // SIGUSR1 (*nix)
 
-    __p_sig_fn_t sig_u1;
-    __p_sig_fn_t sig_u2;
-    sigset_t new;
-    sigset_t old;
+    HandleFunc sig_u1;
+    HandleFunc sig_u2;
+    sigset_t new_sigset;
+    sigset_t old_sigset;
 #endif
 };
 
@@ -64,13 +65,13 @@ void aFunSignalInit() {
     sig_info.sig_term = signal(SIGTERM, SIG_IGN);
     stdio_signal_init(true);
 #else
-    sigemptyset(&sig_info.old);
-    sigemptyset(&sig_info.new);
-    sigaddset(&sig_info.new, SIGINT);
-    sigaddset(&sig_info.new, SIGTERM);
-    sigaddset(&sig_info.new, SIGUSR1);
-    sigaddset(&sig_info.new, SIGUSR2);
-    sigprocmask(SIG_BLOCK, &sig_info.new, &sig_info.old);
+    sigemptyset(&sig_info.old_sigset);
+    sigemptyset(&sig_info.new_sigset);
+    sigaddset(&sig_info.new_sigset, SIGINT);
+    sigaddset(&sig_info.new_sigset, SIGTERM);
+    sigaddset(&sig_info.new_sigset, SIGUSR1);
+    sigaddset(&sig_info.new_sigset, SIGUSR2);
+    sigprocmask(SIG_BLOCK, &sig_info.new_sigset, &sig_info.old_sigset);
 
     sig_info.sig_int = signal(SIGINT, aFunSigFunc);
     sig_info.sig_term = signal(SIGTERM, aFunSigFunc);
@@ -93,7 +94,7 @@ void aFunSignalRecover() {
         return;
     }
 
-    __p_sig_fn_t re;
+    HandleFunc re;
     writeDebugLog(aFunCoreLogger, "Signal recover");
 
     if (sig_info.sig_int != SIG_ERR) {
@@ -118,7 +119,7 @@ void aFunSignalRecover() {
         re = signal(SIGUSR2, sig_info.sig_u2);
         assertWarningLog(re != SIG_ERR, aFunCoreLogger, "SIGUSR2 recover fail");
     }
-    sigprocmask(SIG_SETMASK, &sig_info.old, nullptr);
+    sigprocmask(SIG_SETMASK, &sig_info.old_sigset, nullptr);
 #endif
     pthread_mutex_unlock(&sig_mutex);
 }
@@ -136,9 +137,9 @@ static void aFuncheckSignal() {
         signal(SIGTERM, aFunSigFunc);
         signal(SIGUSR1, aFunSigFunc);
         signal(SIGUSR2, aFunSigFunc);
-        sigprocmask(SIG_SETMASK, &sig_info.old, nullptr);  // 让信号递达
+        sigprocmask(SIG_SETMASK, &sig_info.old_sigset, nullptr);  // 让信号递达
     }
-    sigprocmask(SIG_BLOCK, &sig_info.new, &sig_info.old);
+    sigprocmask(SIG_BLOCK, &sig_info.new_sigset, &sig_info.old_sigset);
 #endif
 }