|
version 1.1.2.2, 2011/07/22 13:35:06
|
version 1.1.2.3, 2011/07/22 14:20:24
|
|
Line 47 SUCH DAMAGE.
|
Line 47 SUCH DAMAGE.
|
| #include "pceng.h" |
#include "pceng.h" |
| |
|
| |
|
| int Verbose; | int Verbose, Kill; |
| extern char compiled[], compiledby[], compilehost[]; |
extern char compiled[], compiledby[], compilehost[]; |
| sl_config cfg; |
sl_config cfg; |
| |
char szConf[MAXPATHLEN] = DEFAULT_PCENG_CFG; |
| |
|
| |
|
| static void |
static void |
|
Line 65 Usage()
|
Line 66 Usage()
|
| "\n", compiled, compiledby, compilehost); |
"\n", compiled, compiledby, compilehost); |
| } |
} |
| |
|
| |
static void |
| |
sigHand(int sig) |
| |
{ |
| |
int stat; |
| |
|
| |
switch (sig) { |
| |
case SIGHUP: |
| |
UnloadConfig(&cfg); |
| |
if (LoadConfig(szConf, &cfg)) { |
| |
syslog(LOG_ERR, "Error:: #%d - %s", cfg_GetErrno(), cfg_GetError()); |
| |
raise(SIGTERM); |
| |
} |
| |
VERB(1) syslog(LOG_WARNING, "Reload config %s", szConf); |
| |
break; |
| |
case SIGTERM: |
| |
VERB(1) syslog(LOG_WARNING, "Kill process ..."); |
| |
Kill++; |
| |
break; |
| |
case SIGCHLD: |
| |
while (waitpid(-1, &stat, WNOHANG) > 0); |
| |
} |
| |
} |
| |
|
| |
|
| int |
int |
| main(int argc, char **argv) |
main(int argc, char **argv) |
| { |
{ |
| char ch, szConf[MAXPATHLEN] = DEFAULT_PCENG_CFG; | char ch; |
| int mode = 0; | int io, mode = 0; |
| | struct sigaction sact; |
| |
|
| while ((ch = getopt(argc, argv, "vhbc:")) != -1) |
while ((ch = getopt(argc, argv, "vhbc:")) != -1) |
| switch (ch) { |
switch (ch) { |
|
Line 91 main(int argc, char **argv)
|
Line 116 main(int argc, char **argv)
|
| argc -= optind; |
argc -= optind; |
| argv += optind; |
argv += optind; |
| |
|
| |
openlog("pceng", LOG_CONS | LOG_PID, LOG_DAEMON); |
| |
|
| if (LoadConfig(szConf, &cfg)) { |
if (LoadConfig(szConf, &cfg)) { |
| printf("Error:: #%d - %s\n", cfg_GetErrno(), cfg_GetError()); |
printf("Error:: #%d - %s\n", cfg_GetErrno(), cfg_GetError()); |
| return 1; |
return 1; |
| } |
} |
| |
|
| |
sact.sa_handler = sigHand; |
| |
sigemptyset(&sact.sa_mask); |
| |
sigaction(SIGHUP, &sact, NULL); |
| |
sigaction(SIGTERM, &sact, NULL); |
| |
sigaction(SIGCHLD, &sact, NULL); |
| |
|
| |
io = open(_PATH_DEVIO, O_RDWR); |
| |
if (io == -1) { |
| |
printf("Error:: in open dev %s #%d - %s\n", _PATH_DEVIO, errno, strerror(errno)); |
| |
goto end; |
| |
} |
| |
|
| |
if (!mode) |
| |
switch (fork()) { |
| |
case -1: |
| |
printf("Error:: #%d - %s\n", errno, strerror(errno)); |
| |
goto end; |
| |
case 0: |
| |
VERB(1) printf("Welcome into darkness ...\n"); |
| |
|
| |
setsid(); |
| |
chdir("/"); |
| |
|
| |
mode = open(_PATH_DEVNULL, O_RDWR); |
| |
if (mode > 2) { |
| |
dup2(mode, STDIN_FILENO); |
| |
dup2(mode, STDOUT_FILENO); |
| |
dup2(mode, STDERR_FILENO); |
| |
close(mode); |
| |
} |
| |
break; |
| |
default: |
| |
VERB(1) printf("PCENG Going to shadow land ...\n"); |
| |
goto end; |
| |
} |
| |
|
| |
Run(io); |
| |
|
| |
end: |
| |
if (io > 2) |
| |
close(io); |
| UnloadConfig(&cfg); |
UnloadConfig(&cfg); |
| |
closelog(); |
| return 0; |
return 0; |
| } |
} |