aboutsummaryrefslogtreecommitdiffstats
path: root/src/SctCommon.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/SctCommon.h')
-rw-r--r--src/SctCommon.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/SctCommon.h b/src/SctCommon.h
new file mode 100644
index 0000000..a26d5ac
--- /dev/null
+++ b/src/SctCommon.h
@@ -0,0 +1,88 @@
+#ifndef SCTJUDGE_SCT_COMMON
+#define SCTJUDGE_SCT_COMMON
+
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+/* --- SctCommon.c --- */
+
+/* 字串轉整數 wrapper */
+int str_to_u(const char*, unsigned*);
+
+/* 一定要讀到 count 位元組的資料才會回傳,所以只要回傳 < count
+ * 就表示已經讀到 EOF 了 */
+int read_complete(int fd, void* buf, size_t count);
+
+
+
+/* 安全的 strerror */
+int strerror_threadsafe(int, char*, size_t);
+
+/* 會自動配置空間的 sprintf */
+int sprintf_malloc(char**, const char*, ...);
+
+
+/* 將某個 timespec 調整成合理的數值 */
+void checktimespec(struct timespec*);
+
+/* 計算前兩個 timespec 的數值差異,存到第三個參數 */
+void difftimespec(const struct timespec*, const struct timespec*,
+ struct timespec*);
+
+/* 比較兩個 timespec 的大小,使用方法與 strcmp 相同 */
+int comparetimespec(const struct timespec*, const struct timespec*);
+
+
+
+/* 這個一定要先執行,不然預設 uid 就是 0
+ * 注意這函式只應該在 main() 一開始執行,不然就不知道最初的 uid 了! */
+void save_uids(void);
+
+#ifndef HAVE_CONF_CAP
+void disable_setuid(void);
+void enable_setuid(void);
+#endif
+
+/* 避免 disable_setuid() 之後 getuid() 得到錯誤的值,所以用這些變數把最初的
+ * UID 給記下來!*/
+extern uid_t procrealuid;
+extern uid_t proceffuid;
+
+
+
+
+
+/* --- SctMain.c --- */
+
+/* 如果不是 NULL 就 free 掉它 */
+#define FREE_IF_NOT_NULL(p) \
+ if((p) != NULL){ \
+ free(p); \
+ } \
+ (p) = NULL
+
+/* 如果是 NULL 就替換成 "(NULL)" */
+#define STRING_NULL(p) \
+ ((p) == NULL) ? ("(NULL)") : (p)
+
+/* 測試 flag 是 yes 還是 no 並轉成字串 */
+#define DISPLAY_YESNO(flag, value) \
+ (((flag) & (value)) ? ("Yes") : ("No"))
+
+/* sctjudge 的使用者界面選擇 */
+#define SCTJUDGE_UI_CLI 0
+#define SCTJUDGE_UI_TUI 1
+#define SCTJUDGE_UI_GUI 2
+
+/* sctjudge 這個程式的 exit status
+ * 注意,檢測 malloc 失敗的東西已經去掉了 */
+#define SCTJUDGE_EXIT_SUCCESS 0 /* 當然就是正常結束 */
+#define SCTJUDGE_EXIT_SYNTAX 1 /* 解析階段:命令列語法錯誤 */
+#define SCTJUDGE_EXIT_INVALID 2 /* 配置無效或需要強制執行 */
+#define SCTJUDGE_EXIT_INSECURE 3 /* 不安全的設定值 */
+#define SCTJUDGE_EXIT_REJECT 4 /* 拒絕此參數或需要強制執行 */
+#define SCTJUDGE_EXIT_NA 255 /* 尚未實作的功能 */
+
+#endif