Diff for /embedtools/src/pceng.c between versions 1.1.2.2 and 1.1.2.12

version 1.1.2.2, 2011/07/22 13:35:06 version 1.1.2.12, 2012/04/05 12:22:44
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
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;cfg_root_t cfg;
 char szConf[MAXPATHLEN] = DEFAULT_PCENG_CFG;
   
   
 static void  static void
Line 57  Usage() Line 58  Usage()
 {  {
         printf( "-= PCEngines =- events managment tool\n"          printf( "-= PCEngines =- events managment tool\n"
                 "=== %s === %s@%s ===\n\n"                  "=== %s === %s@%s ===\n\n"
                "  Syntax: pceng [options]\n"                "  Syntax: pceng [options] [led_no[=<0|1>] ...]\n"
                 "\n"                  "\n"
                 "\t-v\t\tVerbose ...\n"                  "\t-v\t\tVerbose ...\n"
                "\t-b\t\tRun in batch mode ...\n"                "\t-D\t\tRun in background mode ...\n"
                 "\t-c <conf>\tConfig events file ...\n"                  "\t-c <conf>\tConfig events file ...\n"
                 "\n", compiled, compiledby, compilehost);                  "\n", compiled, compiledby, compilehost);
 }  }
   
   static void
   sigHand(int sig)
   {
           int stat;
   
           switch (sig) {
                   case SIGHUP:
                           cfgUnloadConfig(&cfg);
                           if (cfgLoadConfig(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, ledno, *pos;
        int mode = 0;        int i, ret = 0, mode = 1;
         struct sigaction sact;
 #ifdef __FreeBSD__
         int io;
 #endif
   
        while ((ch = getopt(argc, argv, "vhbc:")) != -1)        while ((ch = getopt(argc, argv, "vhDc:")) != -1)
                 switch (ch) {                  switch (ch) {
                         case 'c':                          case 'c':
                                 strlcpy(szConf, optarg, sizeof szConf);                                  strlcpy(szConf, optarg, sizeof szConf);
                                 break;                                  break;
                        case 'b':                        case 'D':
                                mode = 1;                                mode = 0;
                                 break;                                  break;
                         case 'v':                          case 'v':
                                 Verbose++;                                  Verbose++;
Line 91  main(int argc, char **argv) Line 119  main(int argc, char **argv)
         argc -= optind;          argc -= optind;
         argv += optind;          argv += optind;
   
        if (LoadConfig(szConf, &cfg)) {        if (!mode)
                 openlog("pceng", LOG_CONS | LOG_PID, LOG_DAEMON);
         else
                 openlog("pceng", LOG_CONS | LOG_PID | LOG_PERROR, LOG_USER);
 
 #ifdef __FreeBSD__
         io = open(_PATH_DEVIO, O_RDONLY);
         if (io == -1) {
                 printf("Error:: in open dev %s #%d - %s\n", _PATH_DEVIO, errno, strerror(errno));
                 ret = 2;
                 goto end;
         }
 #endif
 
         if (cfgLoadConfig(szConf, &cfg)) {
                 printf("Error:: #%d - %s\n", cfg_GetErrno(), cfg_GetError());                  printf("Error:: #%d - %s\n", cfg_GetErrno(), cfg_GetError());
                return 1;                ret = 1;
                 goto end;
         }          }
   
        UnloadConfig(&cfg);        if (argc) {
        return 0;                VERB(1) syslog(LOG_WARNING, "LED client ...");
                 for (i = 0; !ret && i < argc; pos = NULL, i++) {
                         if ((pos = strchr(argv[i], '='))) {
                                 *pos++ = 0;
                                 ledno = (char) strtol(argv[i], NULL, 0);
                                 ch = (char) strtol(pos, NULL, 0);
                         } else {
                                 ledno = (char) strtol(argv[i], NULL, 0);
                                 ch = -1;
                         }
                         ret = LED((u_char) ledno, (u_char) ch);
                         printf("%s:: LED#%d=%d\n", (ch == -1) ? "Get" : "Set", ledno, ret);
                 }
                 goto end;
         }
 
         sact.sa_handler = sigHand;
         sigemptyset(&sact.sa_mask);
         sigaction(SIGHUP, &sact, NULL);
         sigaction(SIGTERM, &sact, NULL);
         sigaction(SIGCHLD, &sact, NULL);
 
         if (!mode)
                 switch (fork()) {
                         case -1:
                                 printf("Error:: #%d - %s\n", errno, strerror(errno));
                                 ret = 1;
                                 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;
                 }
 
         ret = Run();
 
 end:
         cfgUnloadConfig(&cfg);
 #ifdef __FreeBSD__
         if (io > 2)
                 close(io);
 #endif
         closelog();
         return ret;
 }  }

Removed from v.1.1.2.2  
changed lines
  Added in v.1.1.2.12


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>