diff options
author | Kozlov Dmitry <dima@server> | 2010-09-02 19:01:47 +0400 |
---|---|---|
committer | Kozlov Dmitry <dima@server> | 2010-09-02 19:01:47 +0400 |
commit | b43d224c8a306ff54bbb913c5aab891f82541f6e (patch) | |
tree | c3b6c135030fcd4bba4a2ea44d21745fba254a6c /accel-pptpd/main.c | |
parent | 81515c09f55f152e8330c3b43ad159be64f494e8 (diff) | |
download | accel-ppp-xebd-b43d224c8a306ff54bbb913c5aab891f82541f6e.tar.gz accel-ppp-xebd-b43d224c8a306ff54bbb913c5aab891f82541f6e.zip |
rewriting triton library ...
Diffstat (limited to 'accel-pptpd/main.c')
-rw-r--r-- | accel-pptpd/main.c | 121 |
1 files changed, 75 insertions, 46 deletions
diff --git a/accel-pptpd/main.c b/accel-pptpd/main.c index 90f206d..31069f3 100644 --- a/accel-pptpd/main.c +++ b/accel-pptpd/main.c @@ -4,38 +4,64 @@ #include <stdlib.h> #include <stdio.h> #include <sys/stat.h> +#include <sys/mman.h> #include "triton/triton.h" -void sigterm(int num) +static int goto_daemon; +static char *pid_file; +static char *conf_file; + +static void sigterm(int num) { } -int main(int argc,char **argv) -{ + +#define ARG_MAX 128 +static int parse_cmdline(char ***argv) +{ + FILE *f; int i; - int daemon=0; - char *pid_file=NULL; - char *conf_file=NULL; - sigset_t set; + size_t len; - if (argc<2) - goto usage; + f = fopen("/proc/self/cmdline", "r"); + if (!f) { + perror("open cmdline"); + _exit(EXIT_FAILURE); + } - for(i=1; i<argc; i++) + *argv = malloc(ARG_MAX * sizeof(void *)); + memset(*argv, 0, ARG_MAX * sizeof(void *)); + + for(i = 0; i < ARG_MAX; i++) { - if (!strcmp(argv[i],"-d")) - daemon=1; - else if (!strcmp(argv[i],"-p")) - { - if (i==argc-1) + len = 0; + if (getdelim(&(*argv)[i], &len, 0, f) < 0) + break; + } + + return i; +} +static void __init __main(void) +{ + int i,argc; + char **argv; + + argc=parse_cmdline(&argv); + + if (argc < 2) + goto usage; + + for(i = 1; i < argc; i++) { + if (!strcmp(argv[i], "-d")) + goto_daemon = 1; + else if (!strcmp(argv[i], "-p")) { + if (i == argc - 1) goto usage; - pid_file=argv[++i]; - } - else if (!strcmp(argv[i],"-c")) - { - if (i==argc-1) + pid_file = argv[++i]; + } else if (!strcmp(argv[i], "-c")) { + if (i == argc - 1) goto usage; - conf_file=argv[++i]; + conf_file = argv[++i]; } } @@ -43,21 +69,33 @@ int main(int argc,char **argv) goto usage; if (triton_init(conf_file)) - return EXIT_FAILURE; - - if (daemon) - { - pid_t pid=fork(); - if (pid>0) + _exit(EXIT_FAILURE); + + return; + +usage: + printf("usage: pptpd [-d] [-p <file>] -c <file>\n\ + where:\n\ + -d - daemon mode\n\ + -p - write pid to <file>\n\ + -c - config file\n"); + _exit(EXIT_FAILURE); +} +int main(int argc, char **argv) +{ + sigset_t set; + + if (goto_daemon) { + pid_t pid = fork(); + if (pid > 0) _exit(EXIT_SUCCESS); - if (pid<0) - { + if (pid < 0) { perror("fork"); return EXIT_FAILURE; } - if (setsid()<0) - return EXIT_FAILURE; - pid=fork(); + if (setsid() < 0) + _exit(EXIT_FAILURE); + pid = fork(); if (pid) _exit(0); umask(0); @@ -67,19 +105,17 @@ int main(int argc,char **argv) close(STDERR_FILENO); } - if (pid_file) - { - FILE *f=fopen("pid_file","w"); - if (f) - { - fprintf(f,"%i",getpid()); + if (pid_file) { + FILE *f = fopen("pid_file", "w"); + if (f) { + fprintf(f, "%i", getpid()); fclose(f); } } triton_run(); - signal(SIGTERM,sigterm); + signal(SIGTERM, sigterm); sigfillset(&set); sigdelset(&set, SIGTERM); sigdelset(&set, SIGSEGV); @@ -92,12 +128,5 @@ int main(int argc,char **argv) triton_terminate(); return EXIT_SUCCESS; -usage: - printf("usage: pptpd [-d] [-p <file>] -c <file>\ - where:\ - -d - daemon mode\ - -p - write pid to <file>\ - -c - config file\n"); - return EXIT_FAILURE; } |