aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c44
1 files changed, 28 insertions, 16 deletions
diff --git a/src/main.c b/src/main.c
index fbb8ee9..1f6f583 100644
--- a/src/main.c
+++ b/src/main.c
@@ -9,10 +9,13 @@
int main(int argc, char* argv[])
{
- log_init_stdout(_LOG_DEBUG);
-
- signal(SIGCHLD,SIG_IGN); //Ignore sigchld
struct prog_params params = parse_args(argc, argv);
+
+ log_init_stdout( _LOG_DEBUG );
+
+ signal( SIGCHLD, SIG_IGN ); //Ignore sigchld
+ signal( SIGKILL, terminate);
+ signal( SIGINT, terminate);
//Fork and write PID to pidfile
if(params.fork)
@@ -21,39 +24,48 @@ int main(int argc, char* argv[])
if(!pidfile)
{
- LOGPRINTF(_LOG_ERROR,"Unable to open pidfile\n");
+ LOGPRINTF( _LOG_ERROR, "Unable to open pidfile\n" );
exit(1);
}
pid_t pid = fork();
if(pid < 0)
{
- LOGPRINTF(_LOG_ERROR,"fork failed\n");
+ LOGPRINTF( _LOG_ERROR, "fork failed\n" );
exit(1);
}
else if(pid > 0)
{
- fprintf(pidfile, "%i", pid);
- LOGPRINTF(_LOG_INFO,"Forked with PID %i\n\n", pid);
- fclose (pidfile);
- exit(0);
+ fprintf( pidfile, "%i", pid );
+ LOGPRINTF( _LOG_NOTE, "Forked with PID %i\n\n", pid );
+
+ if( log_fd == STDIN_FILENO )
+ LOGPRINTF( _LOG_WARNING, "STDIO will be closed but no logfile is set. No logging possible\n" );
+
+ fclose ( pidfile );
+ exit( 0 );
}
fclose (pidfile);
//Close STDIO
- close (STDIN_FILENO);
- close (STDOUT_FILENO);
- close (STDERR_FILENO);
+ close ( STDIN_FILENO );
+ close ( STDOUT_FILENO );
+ close ( STDERR_FILENO );
}//if params.fork
- LOGPRINTF(_LOG_DEBUG, "%s, %i\n", params.run_argv[0], params.run_argc);
+ LOGPRINTF(_LOG_DEBUG, "command: %s, %i\n", params.run_argv[0], params.run_argc);
if ( params.serial )
- dialup_server(params);
- else if (params.telnet)
- telnet_server(params);
+ dialup_server( params );
+ else if ( params.telnet )
+ telnet_server( params );
return 0;
}
+void terminate()
+{
+ log_close();
+ exit ( 1 );
+}