Add changes to be a real daemon just for unix os.
authorsteudten <steudten@users.sourceforge.net>
Mon, 5 Nov 2001 21:41:43 +0000 (21:41 +0000)
committersteudten <steudten@users.sourceforge.net>
Mon, 5 Nov 2001 21:41:43 +0000 (21:41 +0000)
(change cwd to /, detach from controlling tty, set
process group and session leader to the own process.
Add DBG() Macro.
Add some fatal-error log message for failed malloc().
Add '-d' if compiled with 'configure --with-debug' to
enable debug output.

jcc.c
jcc.h
loadcfg.c
miscutil.c

diff --git a/jcc.c b/jcc.c
index 157381d..0a06e62 100644 (file)
--- a/jcc.c
+++ b/jcc.c
@@ -1,4 +1,4 @@
-const char jcc_rcs[] = "$Id: jcc.c,v 1.51 2001/10/26 17:38:28 oes Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.52 2001/10/26 20:11:20 jongfoster Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/jcc.c,v $
@@ -33,6 +33,9 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.51 2001/10/26 17:38:28 oes Exp $";
  *
  * Revisions   :
  *    $Log: jcc.c,v $
+ *    Revision 1.52  2001/10/26 20:11:20  jongfoster
+ *    Fixing type mismatch
+ *
  *    Revision 1.51  2001/10/26 17:38:28  oes
  *    Cosmetics
  *
@@ -379,6 +382,12 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.51 2001/10/26 17:38:28 oes Exp $";
 # endif /* ndef __OS2__ */
 # include <sys/time.h>
 # include <sys/stat.h>
+# include <sys/ioctl.h>
+
+#ifdef sun
+#include <sys/termios.h>
+#endif /* sun */
+
 # include <signal.h>
 
 # ifdef __BEOS__
@@ -401,6 +410,10 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.51 2001/10/26 17:38:28 oes Exp $";
 
 #endif
 
+#ifdef _DEBUG
+int ldebug = 0;
+#endif
+
 #include "project.h"
 #include "list.h"
 #include "jcc.h"
@@ -448,6 +461,9 @@ static int32 server_thread(void *data);
 #define sleep(N)  DosSleep(((N) * 100))
 #endif
 
+#if defined(unix)
+const char *basedir;
+#endif /* defined unix */
 
 /* The vanilla wafer. */
 static const char VANILLA_WAFER[] =
@@ -1346,6 +1362,8 @@ int real_main(int argc, const char *argv[])
 int main(int argc, const char *argv[])
 #endif
 {
+   int         argc_pos = 1;
+
    configfile =
 #ifdef AMIGA
    "AmiTCP:db/junkbuster/config"
@@ -1371,16 +1389,51 @@ int main(int argc, const char *argv[])
       printf(VERSION "\n");
       exit(2);
    }
+#ifdef _DEBUG
+   if ((argc >= 2) && (strcmp(argv[1], "-d")==0))
+   {
+       ldebug++;
+       argc_pos++;
+       fprintf(stderr,"debugging enabled..\n");
+   }
+#endif /* _DEBUG */
 #endif /* !defined(_WIN32) || defined(_WIN_CONSOLE) */
 
    Argc = argc;
    Argv = argv;
 
-   if (argc > 1)
+   if (argc > argc_pos )
    {
-      configfile = argv[1];
+      configfile = argv[argc_pos];
    }
 
+#if defined(unix)
+       if ( *configfile != '/' )
+       {
+               char    *abs_file;
+
+               DBG(1, ("configfile before '%s'\n",configfile) );
+
+               /* make config-filename absolute here */        
+               if ( !(basedir = getcwd( NULL, 1024 )))
+               {
+                       perror("get working dir");
+               }
+               DBG(1, ("working dir '%s'\n",basedir) );
+               if ( !(abs_file = malloc( strlen( basedir ) + strlen( configfile ) + 5 )))
+               {
+                       perror("malloc failed");
+                       exit( 1 );
+               }
+               strcpy( abs_file, basedir );
+               strcat( abs_file, "/" );
+               strcat( abs_file, configfile );
+               configfile = abs_file;
+               DBG(1, ("configfile after '%s'\n",configfile) );
+       }
+#endif /* defined unix */
+
+
    files->next = NULL;
 
 #ifdef AMIGA
@@ -1408,6 +1461,52 @@ int main(int argc, const char *argv[])
    /* Initialize the CGI subsystem */
    cgi_init_error_messages();
 
+#if defined(unix)
+{
+       pid_t   pid = 0;
+       int     fd;
+
+       /*
+       ** we make us a real daemon
+       */
+#ifdef _DEBUG
+       if ( !ldebug) 
+#endif
+               pid  = fork();
+       if ( pid < 0 )  /* error */
+       {
+               perror("fork");
+               exit( 3 );
+       } 
+       else if ( pid != 0 ) /* parent */
+       {
+               exit( 0 );
+       }
+       /* child */
+       setpgrp();
+       fd = open("/dev/tty", O_RDONLY);
+       if ( fd ) 
+       {
+               /* no error check here */
+               ioctl( fd, TIOCNOTTY,0 );
+               close ( fd );
+       }
+       /* should close stderr (fd 2) here too, but the test for existence
+       ** and load config file is done in listen_loop() and puts
+       ** some messages on stderr there.
+       */
+#ifdef _DEBUG
+       if ( !ldebug ) 
+               close( 0 ); close( 1 ); 
+#else
+       close( 0 ); close( 1 ); 
+#endif /* _DEBUG */
+       chdir("/");
+
+}
+#endif /* defined unix */
+
+   DBG(1, ("call listen_loop() \n") );
    listen_loop();
 
    /* NOTREACHED */
diff --git a/jcc.h b/jcc.h
index f3ee734..ddd23bd 100644 (file)
--- a/jcc.h
+++ b/jcc.h
@@ -1,6 +1,6 @@
 #ifndef JCC_H_INCLUDED
 #define JCC_H_INCLUDED
-#define JCC_H_VERSION "$Id: jcc.h,v 1.5 2001/07/29 19:32:00 jongfoster Exp $"
+#define JCC_H_VERSION "$Id: jcc.h,v 1.6 2001/07/30 22:08:36 jongfoster Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/jcc.h,v $
  *
  * Revisions   :
  *    $Log: jcc.h,v $
+ *    Revision 1.6  2001/07/30 22:08:36  jongfoster
+ *    Tidying up #defines:
+ *    - All feature #defines are now of the form FEATURE_xxx
+ *    - Permanently turned off WIN_GUI_EDIT
+ *    - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS
+ *
  *    Revision 1.5  2001/07/29 19:32:00  jongfoster
  *    Renaming _main() [mingw32 only] to real_main(), for ANSI compliance.
  *
@@ -65,7 +71,6 @@ extern "C" {
 struct client_state;
 struct file_list;
 
-
 /* Global variables */
 
 #ifdef FEATURE_STATISTICS
index d92dbec..0c0fae2 100644 (file)
--- a/loadcfg.c
+++ b/loadcfg.c
@@ -1,4 +1,4 @@
-const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.24 2001/10/23 21:40:30 jongfoster Exp $";
+const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.25 2001/10/25 03:40:48 david__schmidt Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/loadcfg.c,v $
@@ -35,6 +35,12 @@ const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.24 2001/10/23 21:40:30 jongfoster
  *
  * Revisions   :
  *    $Log: loadcfg.c,v $
+ *    Revision 1.25  2001/10/25 03:40:48  david__schmidt
+ *    Change in porting tactics: OS/2's EMX porting layer doesn't allow multiple
+ *    threads to call select() simultaneously.  So, it's time to do a real, live,
+ *    native OS/2 port.  See defines for __EMX__ (the porting layer) vs. __OS2__
+ *    (native). Both versions will work, but using __OS2__ offers multi-threading.
+ *
  *    Revision 1.24  2001/10/23 21:40:30  jongfoster
  *    Added support for enable-edit-actions and enable-remote-toggle config
  *    file options.
@@ -425,6 +431,7 @@ struct configuration_spec * load_config(void)
    struct client_state * fake_csp;
    struct file_list *fs;
 
+   DBG(1, ("load_config() entered..\n") );
    if (!check_file_changed(current_configfile, configfile, &fs))
    {
       /* No need to load */
@@ -436,7 +443,9 @@ struct configuration_spec * load_config(void)
                 configfile);
    }
 
+   /*
    log_error(LOG_LEVEL_INFO, "loading configuration file '%s':", configfile);
+   */
 
 #ifdef FEATURE_TOGGLE
    g_bToggleIJB      = 1;
@@ -924,7 +933,7 @@ struct configuration_spec * load_config(void)
  ****************************************************************************/
          case hash_logdir :
             freez(config->logdir);
-            config->logdir = strdup(arg);
+            config->logdir = make_path(NULL, arg);
             continue;
 
 /****************************************************************************
index f79cfd7..beab02b 100644 (file)
@@ -1,4 +1,4 @@
-const char miscutil_rcs[] = "$Id: miscutil.c,v 1.22 2001/10/26 17:39:38 oes Exp $";
+const char miscutil_rcs[] = "$Id: miscutil.c,v 1.23 2001/10/29 03:48:10 david__schmidt Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/miscutil.c,v $
@@ -36,6 +36,10 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.22 2001/10/26 17:39:38 oes Exp
  *
  * Revisions   :
  *    $Log: miscutil.c,v $
+ *    Revision 1.23  2001/10/29 03:48:10  david__schmidt
+ *    OS/2 native needed a snprintf() routine.  Added one to miscutil, brackedted
+ *    by and __OS2__ ifdef.
+ *
  *    Revision 1.22  2001/10/26 17:39:38  oes
  *    Moved ijb_isspace and ijb_tolower to project.h
  *
@@ -736,8 +740,32 @@ char * make_path(const char * dir, const char * file)
    }
    else
    {
-      char * path = malloc(strlen(dir) + strlen(file) + 2);
+      char * path;
+
+#if defined(unix)
+      if ( *dir != '/' && basedir && *basedir )
+      {
+             path = malloc( strlen( basedir ) + strlen(dir) + strlen(file) + 3);
+             if (!path ) log_error(LOG_LEVEL_FATAL, "malloc failed!");
+             strcpy(path, basedir);
+             strcat(path, "/");
+             strcat(path, dir);
+             DBG(1, ("make_path: path: %s\n",path) );
+      }
+      else
+      {
+             path = malloc(strlen(dir) + strlen(file) + 2);
+             if (!path ) log_error(LOG_LEVEL_FATAL, "malloc failed!");
+             strcpy(path, dir);
+      }
+#else
+
+      path = malloc(strlen(dir) + strlen(file) + 2);
+      if (!path ) log_error(LOG_LEVEL_FATAL, "malloc failed!");
       strcpy(path, dir);
+
+#endif /* defined unix */
+
 #ifdef _WIN32
       if(path[strlen(path)-1] != '\\')
       {
@@ -1529,4 +1557,4 @@ int portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap) {
   Local Variables:
   tab-width: 3
   end:
-*/
\ No newline at end of file
+*/