/[LeafOK_CVS]/lbbs/src/main.c
ViewVC logotype

Diff of /lbbs/src/main.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.17 by sysadm, Thu Jun 23 16:43:21 2005 UTC Revision 1.18 by sysadm, Mon Apr 28 03:31:00 2025 UTC
# Line 1  Line 1 
1  /***************************************************************************  /***************************************************************************
2                            main.c  -  description                                                    main.c  -  description
3                               -------------------                                                           -------------------
4      begin                : Mon Oct 11 2004          begin                : Mon Oct 11 2004
5      copyright            : (C) 2004 by Leaflet          copyright            : (C) 2004 by Leaflet
6      email                : leaflet@leafok.com          email                : leaflet@leafok.com
7   ***************************************************************************/   ***************************************************************************/
8    
9  /***************************************************************************  /***************************************************************************
# Line 24  Line 24 
24  #include <sys/types.h>  #include <sys/types.h>
25  #include <unistd.h>  #include <unistd.h>
26    
27  void  void app_help(void)
 app_help (void)  
28  {  {
29    prints ("Usage: bbsd [-fhv] [...]\n\n"          prints("Usage: bbsd [-fhv] [...]\n\n"
30            "-f\t--foreground\t\tForce program run in foreground\n"                     "-f\t--foreground\t\tForce program run in foreground\n"
31            "-h\t--help\t\t\tDisplay this help message\n"                     "-h\t--help\t\t\tDisplay this help message\n"
32            "-v\t--version\t\tDisplay version information\n"                     "-v\t--version\t\tDisplay version information\n"
33            "\t--display-log\t\tDisplay standard log information\n"                     "\t--display-log\t\tDisplay standard log information\n"
34            "\t--display-error-log\tDisplay error log information\n"                     "\t--display-error-log\tDisplay error log information\n"
35            "\n    If meet any bug, please report to <leaflet@leafok.com>\n\n");                     "\n    If meet any bug, please report to <leaflet@leafok.com>\n\n");
36  }  }
37    
38  void  void arg_error(void)
 arg_error (void)  
39  {  {
40    prints ("Invalid arguments\n");          prints("Invalid arguments\n");
41    app_help ();          app_help();
42  }  }
43    
44  int  int main(int argc, char *argv[])
 main (int argc, char *argv[])  
45  {  {
46    char log_dir[256], file_log_std[256], file_log_error[256], file_config[256];          char log_dir[256], file_log_std[256], file_log_error[256], file_config[256];
47    int i, j;          int i, j;
48    int daemon = 1, std_log_redir = 0, error_log_redir = 0;          int daemon = 1, std_log_redir = 0, error_log_redir = 0;
49    
50    //Parse args          // Parse args
51    for (i = 1; i < argc; i++)          for (i = 1; i < argc; i++)
     {  
       switch (argv[i][0])  
52          {          {
53          case '-':                  switch (argv[i][0])
           if (argv[i][1] != '-')  
             {  
               for (j = 1; j < strlen (argv[i]); j++)  
                 {  
                   switch (argv[i][j])  
                     {  
                     case 'f':  
                       daemon = 0;  
                       break;  
                     case 'h':  
                       app_help ();  
                       exit (0);  
                     case 'v':  
                       puts (app_version);  
                       exit (0);  
                     default:  
                       arg_error ();  
                       exit (1);  
                     }  
                 }  
             }  
           else  
             {  
               if (strcmp (argv[i] + 2, "foreground") == 0)  
                 {  
                   daemon = 0;  
                   break;  
                 }  
               if (strcmp (argv[i] + 2, "help") == 0)  
                 {  
                   app_help ();  
                   exit (0);  
                 }  
               if (strcmp (argv[i] + 2, "version") == 0)  
                 {  
                   puts (app_version);  
                   exit (0);  
                 }  
               if (strcmp (argv[i] + 2, "display-log") == 0)  
                 {  
                   std_log_redir = 1;  
                 }  
               if (strcmp (argv[i] + 2, "display-error-log") == 0)  
54                  {                  {
55                    error_log_redir = 1;                  case '-':
56                            if (argv[i][1] != '-')
57                            {
58                                    for (j = 1; j < strlen(argv[i]); j++)
59                                    {
60                                            switch (argv[i][j])
61                                            {
62                                            case 'f':
63                                                    daemon = 0;
64                                                    break;
65                                            case 'h':
66                                                    app_help();
67                                                    exit(0);
68                                            case 'v':
69                                                    puts(app_version);
70                                                    exit(0);
71                                            default:
72                                                    arg_error();
73                                                    exit(1);
74                                            }
75                                    }
76                            }
77                            else
78                            {
79                                    if (strcmp(argv[i] + 2, "foreground") == 0)
80                                    {
81                                            daemon = 0;
82                                            break;
83                                    }
84                                    if (strcmp(argv[i] + 2, "help") == 0)
85                                    {
86                                            app_help();
87                                            exit(0);
88                                    }
89                                    if (strcmp(argv[i] + 2, "version") == 0)
90                                    {
91                                            puts(app_version);
92                                            exit(0);
93                                    }
94                                    if (strcmp(argv[i] + 2, "display-log") == 0)
95                                    {
96                                            std_log_redir = 1;
97                                    }
98                                    if (strcmp(argv[i] + 2, "display-error-log") == 0)
99                                    {
100                                            error_log_redir = 1;
101                                    }
102                            }
103                            break;
104                  }                  }
             }  
           break;  
105          }          }
     }  
106    
107    //Initialize daemon          // Initialize daemon
108    if (daemon)          if (daemon)
109      init_daemon ();                  init_daemon();
110    
111    //Change current dir          // Change current dir
112    strncpy (app_home_dir, argv[0], rindex (argv[0], '/') - argv[0] + 1);          strncpy(app_home_dir, argv[0], rindex(argv[0], '/') - argv[0] + 1);
113    strcat (app_home_dir, "../");          strcat(app_home_dir, "../");
114    chdir (app_home_dir);          chdir(app_home_dir);
115    
116    //Initialize log          // Initialize log
117    strcpy (app_temp_dir, "/tmp/lbbs/");          strcpy(app_temp_dir, "/tmp/lbbs/");
118    mkdir (app_temp_dir, 0777);          mkdir(app_temp_dir, 0777);
119    strcpy (log_dir, app_home_dir);          strcpy(log_dir, app_home_dir);
120    strcat (log_dir, "log/");          strcat(log_dir, "log/");
121    strcpy (file_log_std, log_dir);          strcpy(file_log_std, log_dir);
122    strcpy (file_log_error, log_dir);          strcpy(file_log_error, log_dir);
123    strcat (file_log_std, "bbsd.log");          strcat(file_log_std, "bbsd.log");
124    strcat (file_log_error, "error.log");          strcat(file_log_error, "error.log");
125    mkdir (log_dir, 0750);          mkdir(log_dir, 0750);
126    if (log_begin (file_log_std, file_log_error) < 0)          if (log_begin(file_log_std, file_log_error) < 0)
127      exit (-1);                  exit(-1);
128    
129    if ((!daemon) && std_log_redir)          if ((!daemon) && std_log_redir)
130      log_std_redirect (2);                  log_std_redirect(2);
131    if ((!daemon) && error_log_redir)          if ((!daemon) && error_log_redir)
132      log_err_redirect (3);                  log_err_redirect(3);
133    
134    //Load configuration          // Load configuration
135    strcpy (file_config, app_home_dir);          strcpy(file_config, app_home_dir);
136    strcat (file_config, "conf/bbsd.conf");          strcat(file_config, "conf/bbsd.conf");
137    if (load_conf (file_config) < 0)          if (load_conf(file_config) < 0)
138      exit (-2);                  exit(-2);
139    
140    //Load menus          // Load menus
141    strcpy (file_config, app_home_dir);          strcpy(file_config, app_home_dir);
142    strcat (file_config, "conf/menu.conf");          strcat(file_config, "conf/menu.conf");
143    if (load_menu (&bbs_menu, file_config) < 0)          if (load_menu(&bbs_menu, file_config) < 0)
144      exit (-3);                  exit(-3);
145    
146    //Set signal handler          // Set signal handler
147    signal (SIGCHLD, child_exit);          signal(SIGCHLD, child_exit);
148    signal (SIGTERM, system_exit);          signal(SIGTERM, system_exit);
149    signal (SIG_RELOAD_MENU, reload_bbs_menu);          signal(SIG_RELOAD_MENU, reload_bbs_menu);
150      
151    //Initialize socket server          // Initialize socket server
152    net_server (BBS_address, BBS_port);          net_server(BBS_address, BBS_port);
153    
154    //Wait for child process exit          // Wait for child process exit
155    while (SYS_child_process_count > 0)          while (SYS_child_process_count > 0)
156    {          {
157      log_std (".");                  log_std(".");
158      sleep(1);                  sleep(1);
159    }          }
160      
161    //Cleanup          // Cleanup
162    unload_menu (&bbs_menu);          unload_menu(&bbs_menu);
163    rmdir (app_temp_dir);          rmdir(app_temp_dir);
164    
165    return 0;          return 0;
166  }  }


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1