#ifndef CONFIG_H #define CONFIG_H #include #include "keyword.h" typedef struct config config; struct config { char *git_root; /* Root of git server. */ char *sock_type; /* Type of socket. */ char *sock; /* Socket address. */ char *port; /* Listen port. */ int merge_type; /* Merge type. */ char *pr_root; /* Root of pull requests. */ char *key_path; /* Path to maintainer authentication key file. */ }; int check_port(void *ctx, void *ret, const keyword *key, keyword_val val); #define offset_list(...) (size_t []){__VA_ARGS__, -1} static const keyword *config_keywords[] = { &(const keyword){"git-root", "Root of git server (can also be a url).", NULL, TYPE_STRING, offset_list(offsetof(config, git_root)), NULL, NULL}, &(const keyword){"socket-type", "Socket type to use (options: unix, network. default: network).", NULL, TYPE_STRING, offset_list(offsetof(config, sock_type)), NULL, NULL}, &(const keyword){"socket", "Path, IP address, or domain name of socket.", NULL, TYPE_STRING, offset_list(offsetof(config, sock)), NULL, NULL}, &(const keyword){"port", "Port to listen on (network socket only).", NULL, TYPE_STRING, offset_list(offsetof(config, port)), check_port, NULL}, &(const keyword){"merge-type", "Type of merge (options: 0 = Merge individually, 1 = Merge into one).", NULL, TYPE_INT, offset_list(offsetof(config, merge_type)), NULL, NULL}, &(const keyword){"pr-root", "Directory to store pull requests in.", NULL, TYPE_STRING, offset_list(offsetof(config, pr_root)), NULL, NULL}, &(const keyword){"key-file", "Path to file containing gpg/pgp public keys of each maintainer.", NULL, TYPE_STRING, offset_list(offsetof(config, key_path)), NULL, NULL}, NULL, }; #undef offset_list extern config *parse_config(const char *filename); extern void cleanup_config(config *conf); #endif