cScm Configuration Daemon

cScm – is a tool to convert SCM configuration files into binary format and store its in shared memory for reading by cSvn-ui and cGit-ui CGI scripts

2 Commits   0 Branches   1 Tag
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  1) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  2) #ifdef HAVE_CONFIG_H
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  3) #include <config.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  4) #endif
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  5) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  6) #include <fcntl.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  7) #include <paths.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  8) #include <unistd.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  9) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 10) #include <daemon.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 11) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 12) int daemon( int nochdir, int noclose )
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 13) {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 14)   int fd;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 15) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 16)   switch( fork() )
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 17)   {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 18)     case -1:
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 19)       return( -1 );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 20)     case 0:
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 21)       break;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 22)     default:
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 23)       _exit( 0 ); /* direct use kernel exit */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 24)   }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 25) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 26)   if( setsid() == -1 ) return( -1 );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 27)   if( !nochdir ) chdir( "/" );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 28)   if( noclose ) return( 0 );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 29) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 30)   fd = open( _PATH_DEVNULL, O_RDWR, 0 );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 31)   if( fd != -1 )
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 32)   {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 33)     dup2( fd, STDIN_FILENO );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 34)     dup2( fd, STDOUT_FILENO );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 35)     dup2( fd, STDERR_FILENO );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 36)     if( fd > 2 ) close( fd );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 37)   }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 38)   return( 0 );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 39) }