#ifndef SHARED_H #define SHARED_H #include #include #include #include #define ANSCII "\x1b[" #define NEXT ";" #define RESET "0" #define BOLD "1" #define NORMAL "3" #define BACKGROUND "4" #define HIGHLIGHT "9" #define BLACK "0" #define RED "1" #define GREEN "2" #define YELLOW "3" #define BLUE "4" #define MAGENTA "5" #define TURQUOISE "6" #define WHITE "7" #define COLOR "m" typedef uint8_t bool; #define true 1 #define false 0 #define UNUSED(x) (void)(x) #define ARG_UNUSED 0 #define ARG_USED 1 #define ARG_IGNORE 2 #define ARG_INVALID 3 void check_arg (char* arg); void global_help(void (*help)(void)); void parse_help (int argc, char** argv, void (*help)(void)); int parse_args (int argc, char** argv, void (*help)(void), int (*short_arg)(char, char*), int (*long_arg)(char*, char*)); FILE* get_file_s(const char* path, const char* type); FILE* get_file(const char* path, const char* type); int get_tty(void); FILE* get_tty_stream(char* type); void nuke_str(char* type); char* get_path_buffer(void); int push_path_buffer(const char* string); void pop_path_buffer(int i); char* get_path_buffer_2(void); int push_path_buffer_2(const char* string); void pop_path_buffer_2(int i); long int get_number(const char* text); long int get_blkm(const char* text); mode_t get_mode(const char* text); bool streql(const char* a, const char* b); bool prefix(const char* pre, const char* str); void print_file_size(size_t bytes, char buf[5]); void print_date_time(time_t mills, char buf[13]); void print_file_path(char* path); bool is_dot_dir(const char* path); const char* get_last_component(const char* path); void die (void); __attribute__ ((__format__(printf, 1, 2))) void error_s(const char* format, ...); __attribute__ ((__format__(printf, 1, 2))) void error(const char* format, ...); __attribute__ ((__format__(printf, 1, 2))) void output(const char* format, ...); typedef struct regex_t* re_t; re_t re_compile(const char* pattern); int re_matchp(re_t pattern, const char* text, int* matchlength); int re_match(const char* pattern, const char* text, int* matchlength); struct Stack { size_t size; size_t capacity; void* data; }; void stack_init(struct Stack* stack, size_t size); void stack_push(struct Stack* stack, void* data, size_t len); void* stack_pop(struct Stack* stack, size_t len); void stack_free(struct Stack* stack); void stack_push_int(struct Stack* stack, int value); bool stack_pop_int(struct Stack* stack, int* value); #define DEFAULT_SHELL "/bin/sh" #define DEFAULT_PATH "/sbin:/usr/sbin:/bin:/usr/bin" void setup_environment(const char *shell, bool new_env, bool clear_env, const struct passwd *pw); void exec_shell(const char *shell, bool loginshell, const char **additional_args); int check_password(const struct passwd *pw, char* plaintext); int prompt_password(const struct passwd *pw, char* prompt); void change_identity(const struct passwd* pw); void* xalloc(size_t size); void* xrealloc(void* ptr, size_t size); void* xzalloc(size_t size); void xsetenv(const char *name, const char *value); void xsetuid(uid_t uid); void xsetgid(gid_t gid); struct passwd* xgetpwnam(char* name); char* crypt(const char* plaintext, const char* pw_pass); #define PASSWORD_INVALID 0 #define PASSWORD_VALID 1 #define PASSWORD_EMPTY 2 #endif