diff options
| author | Carson Fleming <carsonf@syapse.com> | 2017-07-14 13:32:24 -0700 |
|---|---|---|
| committer | Carson Fleming <carsonf@syapse.com> | 2017-07-14 13:32:24 -0700 |
| commit | 43c4a4ee5edf57720cad9dc6a93abd4a0c3d2978 (patch) | |
| tree | d5ded473658f84c57df45f0cb5d9811f7a2f2704 /daemonize.c | |
| parent | 8219dc32ee8983022a0f8212bb3df9546cbb99ff (diff) | |
| download | daemonize-43c4a4ee5edf57720cad9dc6a93abd4a0c3d2978.tar.gz | |
Created daemonize
Diffstat (limited to 'daemonize.c')
| -rw-r--r-- | daemonize.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/daemonize.c b/daemonize.c new file mode 100644 index 0000000..ab231c5 --- /dev/null +++ b/daemonize.c @@ -0,0 +1,47 @@ +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <ctype.h> +#include <string.h> + +void q (char* m) { + fprintf(stderr, "%s\n", m); + exit(1); +} + +char* lowerdup (char* a) { + char* b = strdup(a); + int i; + for (i = 0; b[i] != 0; i++) { + b[i] = tolower(b[i]); + } + return b; +} + +int main (int argc, char** argv) { + if (argc < 2) q("[daemonize] Too few arguments.\nUsage: daemonize [--chdir] [--noclose] <command>"); + int i, cmdlen = 0, buff_size = 256, nochdir = 1, noclose = 0; + char* buffer = malloc(buff_size); + + for (i = 1; i < argc; i++) { + char* cmp = lowerdup(argv[i]); + if (strcmp(cmp, "--chdir") == 0) nochdir = 0; + else if (strcmp(cmp, "--noclose") == 0) noclose = 1; + else { + int arglen = strlen(argv[i]); + if (cmdlen+arglen+1 > buff_size) { + buff_size *= 2; + buffer = realloc(buffer, buff_size); + if (buffer == NULL) q("[daemonize] Out of memory parsing arguments."); + } + strncpy(&buffer[cmdlen], argv[i], arglen); + cmdlen += arglen+1; + buffer[cmdlen-1] = ' '; + } + free(cmp); + } + buffer[cmdlen-1] = 0; + + daemon(nochdir, noclose); + system(buffer); +} |
