diff options
Diffstat (limited to 'src/SctCommon.h')
-rw-r--r-- | src/SctCommon.h | 88 |
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 |