diff options
author | Alex Xu (Hello71) <alex_y_xu@yahoo.ca> | 2018-08-26 19:41:23 -0400 |
---|---|---|
committer | Alex Xu (Hello71) <alex_y_xu@yahoo.ca> | 2018-08-26 19:41:23 -0400 |
commit | da69892f56a081cb4cd65eb0a8065783d9473bd3 (patch) | |
tree | f4bf33fc7c65366163565a12bd0254f0c7c21975 /src/main.c | |
parent | f3664a28a927c7a9a122af4d72a89114b26f39bd (diff) | |
download | random-seed-da69892f56a081cb4cd65eb0a8065783d9473bd3.tar.xz random-seed-da69892f56a081cb4cd65eb0a8065783d9473bd3.zip |
Refactor.
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..6914de0 --- /dev/null +++ b/src/main.c @@ -0,0 +1,61 @@ +#include "config.h" + +#include "random-seed.h" +#include "util.h" + +#include <stdio.h> +#include <stdlib.h> +#include <sys/resource.h> +#include <sys/stat.h> + +static inline void usage() { + puts("usage: random-seed MODE FILE"); + puts("see random-seed(8) for more information."); +} + +static inline void caprlimit(int resource, rlim_t rlimit) { + struct rlimit rlim; + if (getrlimit(resource, &rlim) == -1) { + perror("warning: couldn't get resource limit"); + return; + } + if (rlim.rlim_cur > rlimit) { + rlim.rlim_cur = rlimit; + if (setrlimit(resource, &rlim) == -1) { + perror("warning: couldn't set resource limit"); + return; + } + } +} + +int main(int argc, char *argv[]) { + char *mode, *seed_path; + + switch (argc) { + case 2: + if (streq(argv[1], "-h") || streq(argv[1], "--help")) { + usage(); + exit(0); + } + if (streq(argv[1], "-V") || streq(argv[1], "--version")) { + printf("random-seed %s\n", PACKAGE_VERSION); + exit(0); + } + mode = argv[1]; + seed_path = DEFAULT_SEED_PATH; + break; + case 3: + mode = argv[1]; + seed_path = argv[2]; + break; + default: + fprintf(stderr, "error: invalid arguments\n"); + usage(); + exit(2); + } + + umask(0); + caprlimit(RLIMIT_DATA, 32*1024*1024); + caprlimit(RLIMIT_FSIZE, 1*1024*1024); + run(mode, seed_path); +} |