diff --git a/server/main.c b/server/main.c index 9944115..97856ac 100644 --- a/server/main.c +++ b/server/main.c @@ -81,12 +81,14 @@ #define DEFAULT_DRIVER_PATH "" /* not needed */ #define MAX_DRIVERS 8 #define DEFAULT_FOREGROUND_MODE 0 -#define DEFAULT_ROTATE_SERVER_SCREEN 1 +#define DEFAULT_ROTATE_SERVER_SCREEN SERVERSCREEN_ON #define DEFAULT_REPORTDEST RPT_DEST_STDERR #define DEFAULT_REPORTLEVEL RPT_WARNING #define DEFAULT_SCREEN_DURATION 32 -#define DEFAULT_HEARTBEAT HEARTBEAT_ON +#define DEFAULT_BACKLIGHT BACKLIGHT_OPEN +#define DEFAULT_HEARTBEAT HEARTBEAT_OPEN +#define DEFAULT_TITLESPEED TITLESPEED_MAX /* All variables are set to 'unset' values*/ #define UNSET_INT -1 @@ -162,7 +164,7 @@ static void output_help_screen(void); static void output_GPL_notice(void); #define CHAIN(e,f) { if (e>=0) { e=(f); }} -#define CHAIN_END(e,msg) { if (e<0) { report(RPT_CRIT,(msg)); exit(e); }} +#define CHAIN_END(e,msg) { if (e<0) { report(RPT_CRIT,(msg)); exit(EXIT_FAILURE); }} int @@ -307,14 +309,14 @@ process_command_line(int argc, char **argv) break; case 'c': strncpy(configfile, optarg, sizeof(configfile)); - configfile[sizeof(configfile)-1] = 0; /* Terminate string */ + configfile[sizeof(configfile)-1] = '\0'; /* Terminate string */ break; case 'd': /* Add to a list of drivers to be initialized later...*/ if (num_drivers < MAX_DRIVERS) { drivernames[num_drivers] = strdup(optarg); if (drivernames[num_drivers] != NULL) { - num_drivers ++; + num_drivers++; } else { report(RPT_ERR, "alloc error storing driver name: %s", optarg); @@ -330,14 +332,14 @@ process_command_line(int argc, char **argv) break; case 'a': strncpy(bind_addr, optarg, sizeof(bind_addr)); - bind_addr[sizeof(bind_addr)-1] = 0; /* Terminate string */ + bind_addr[sizeof(bind_addr)-1] = '\0'; /* Terminate string */ break; case 'p': bind_port = atoi(optarg); break; case 'u': strncpy(user, optarg, sizeof(user)); - user[sizeof(user)-1] = 0; /* Terminate string */ + user[sizeof(user)-1] = '\0'; /* Terminate string */ break; case 'w': default_duration = (int) (atof(optarg) * 1e6 / TIME_UNIT); @@ -406,16 +408,16 @@ process_configfile(char *configfile) } if (bind_port == UNSET_INT) - bind_port = config_get_int("server", "port", 0, UNSET_INT); + bind_port = config_get_int("Server", "Port", 0, UNSET_INT); if (strcmp(bind_addr, UNSET_STR) == 0) - strncpy(bind_addr, config_get_string("server", "bind", 0, UNSET_STR), sizeof(bind_addr)); + strncpy(bind_addr, config_get_string("Server", "Bind", 0, UNSET_STR), sizeof(bind_addr)); if (strcmp(user, UNSET_STR) == 0) - strncpy(user, config_get_string("server", "user", 0, UNSET_STR), sizeof(user)); + strncpy(user, config_get_string("Server", "User", 0, UNSET_STR), sizeof(user)); if (default_duration == UNSET_INT) { - default_duration = (config_get_float("server", "waittime", 0, 0) * 1e6 / TIME_UNIT); + default_duration = (config_get_float("Server", "WaitTime", 0, 0) * 1e6 / TIME_UNIT); if (default_duration == 0) default_duration = UNSET_INT; else if (default_duration * TIME_UNIT < 2e6) { @@ -425,56 +427,26 @@ process_configfile(char *configfile) } if (foreground_mode == UNSET_INT) { - int fg = config_get_bool("server", "foreground", 0, UNSET_INT); + int fg = config_get_bool("Server", "Foreground", 0, UNSET_INT); if (fg != UNSET_INT) foreground_mode = fg; } if (rotate_server_screen == UNSET_INT) { - rotate_server_screen = config_get_bool("server", "serverscreen", 0, UNSET_INT); + rotate_server_screen = config_get_tristate("Server", "ServerScreen", 0, "never", UNSET_INT); } if (backlight == UNSET_INT) { - const char *s = config_get_string("server", "Backlight", 0, NULL); - - if (s != NULL) { - if ((strcasecmp(s, "on") == 0) || (strcasecmp(s, "yes") == 0)) { - backlight = BACKLIGHT_ON; - } - else if (strcasecmp(s, "off") == 0) { - backlight = BACKLIGHT_OFF; - } - if ((strcasecmp(s, "off") == 0) || (strcasecmp(s, "no") == 0)) { - backlight = BACKLIGHT_OPEN; - } - else { - report(RPT_WARNING, "Backlight state should be on, off or open"); - } - } + backlight = config_get_tristate("Server", "Backlight", 0, "open", UNSET_INT); } if (heartbeat == UNSET_INT) { - const char *s = config_get_string("server", "Heartbeat", 0, NULL); - - if (s != NULL) { - if ((strcasecmp(s, "on") == 0) || (strcasecmp(s, "yes") == 0)) { - heartbeat = HEARTBEAT_ON; - } - else if (strcasecmp(s, "off") == 0) { - heartbeat = HEARTBEAT_OFF; - } - if ((strcasecmp(s, "off") == 0) || (strcasecmp(s, "no") == 0)) { - heartbeat = HEARTBEAT_OPEN; - } - else { - report(RPT_WARNING, "Heartbeat state should be on, off or open"); - } - } + heartbeat = config_get_tristate("Server", "Heartbeat", 0, "open", UNSET_INT); } if (titlespeed == UNSET_INT) { - int speed = config_get_int("server", "TitleSpeed", 0, TITLESPEED_DEFAULT); + int speed = config_get_int("Server", "TitleSpeed", 0, DEFAULT_TITLESPEED); /* set titlespeed */ titlespeed = (speed <= TITLESPEED_NO) @@ -483,31 +455,33 @@ process_configfile(char *configfile) } if (report_dest == UNSET_INT) { - int rs = config_get_bool("server", "reportToSyslog", 0, UNSET_INT); + int rs = config_get_bool("Server", "ReportToSyslog", 0, UNSET_INT); if (rs != UNSET_INT) report_dest = (rs) ? RPT_DEST_SYSLOG : RPT_DEST_STDERR; } if (report_level == UNSET_INT) { - report_level = config_get_int("server", "reportLevel", 0, UNSET_INT); + report_level = config_get_int("Server", "ReportLevel", 0, UNSET_INT); } - /* Read drivers*/ + /* Read drivers */ /* If drivers have been specified on the command line, then do not * use the driver list from the config file. */ if (num_drivers == 0) { - /* read the drivernames*/ - + /* loop over all the Driver= directives to read the driver names */ while (1) { - const char *s = config_get_string("server", "driver", num_drivers, NULL); + const char *s = config_get_string("Server", "Driver", num_drivers, NULL); if (s == NULL) break; - if (s[0] != 0) { - drivernames[num_drivers] = malloc(strlen(s)+1); - strcpy(drivernames[num_drivers], s); + if (s[0] != '\0') { + drivernames[num_drivers] = strdup(s); + if (drivernames[num_drivers] == NULL) { + report(RPT_ERR, "alloc error storing driver name: %s", s); + exit(EXIT_FAILURE); + } num_drivers++; } } @@ -522,7 +496,7 @@ set_default_settings(void) { debug(RPT_DEBUG, "%s()", __FUNCTION__); - /* Set defaults into unfilled variables....*/ + /* Set defaults into unfilled variables... */ if (bind_port == UNSET_INT) bind_port = DEFAULT_BIND_PORT; @@ -539,11 +513,11 @@ set_default_settings(void) if (default_duration == UNSET_INT) default_duration = DEFAULT_SCREEN_DURATION; if (backlight == UNSET_INT) - backlight = BACKLIGHT_OPEN; + backlight = DEFAULT_BACKLIGHT; if (heartbeat == UNSET_INT) - heartbeat = HEARTBEAT_OPEN; + heartbeat = DEFAULT_HEARTBEAT; if (titlespeed == UNSET_INT) - titlespeed = TITLESPEED_DEFAULT; + titlespeed = DEFAULT_TITLESPEED; if (report_dest == UNSET_INT) report_dest = DEFAULT_REPORTDEST; @@ -551,10 +525,13 @@ set_default_settings(void) report_level = DEFAULT_REPORTLEVEL; - /* Use default driver*/ + /* Use default driver */ if (num_drivers == 0) { - drivernames[0] = malloc(strlen(DEFAULT_DRIVER)+1); - strcpy(drivernames[0], DEFAULT_DRIVER); + drivernames[0] = strdup(DEFAULT_DRIVER); + if (drivernames[0] == NULL) { + report(RPT_ERR, "alloc error storing driver name: %s", DEFAULT_DRIVER); + exit(EXIT_FAILURE); + } num_drivers = 1; } } @@ -613,7 +590,7 @@ child_ok_func(int signal) debug(RPT_INFO, "%s(signal=%d)", __FUNCTION__, signal); /* Exit now ! because of bug? in wait() */ - _exit(0); /* Parent exits normally. */ + _exit(EXIT_SUCCESS); /* Parent exits normally. */ } @@ -669,7 +646,7 @@ daemonize(void) /* Child is still running and has signalled it's OK. * This means the parent can now rest in peace. */ debug(RPT_INFO, "Got OK signal from child."); - exit(0); /* Parent exits normally. */ + exit(EXIT_SUCCESS); /* Parent exits normally. */ } /* At this point we are always the child. */ /* Reset signal handler */ @@ -950,7 +927,7 @@ exit_program(int val) sock_shutdown(); /* shutdown the sockets server */ report(RPT_INFO, "Exiting."); - _exit(0); + _exit(EXIT_SUCCESS); } diff --git a/server/render.h b/server/render.h index 84cd250..d4f70fe 100644 --- a/server/render.h +++ b/server/render.h @@ -33,7 +33,6 @@ #define TITLESPEED_NO 0 /* needs to be (TITLESPEED_MIN - 1) */ #define TITLESPEED_MIN 1 #define TITLESPEED_MAX 10 -#define TITLESPEED_DEFAULT 10 /* = no delay */ extern int heartbeat; extern int backlight; diff --git a/server/serverscreens.h b/server/serverscreens.h index 6258a26..d101237 100644 --- a/server/serverscreens.h +++ b/server/serverscreens.h @@ -14,6 +14,11 @@ #include "screen.h" +/* server screen rotation states */ +#define SERVERSCREEN_OFF 0 /* show server screen in rotation */ +#define SERVERSCREEN_ON 1 /* show server sreen only when there is no other screen */ +#define SERVERSCREEN_NEVER 2 /* don't rotate, and only show a blank screen [not implemented] */ + extern Screen *server_screen; extern int rotate_server_screen;