Commit 3e810925 authored by Christoffer Ackelman's avatar Christoffer Ackelman

Fixed the broken yes-no prompt in rt_ini.

parent e8c64073
...@@ -84,14 +84,16 @@ static pwr_tStatus terminate(); ...@@ -84,14 +84,16 @@ static pwr_tStatus terminate();
static pwr_tStatus start(ini_sContext* cp); static pwr_tStatus start(ini_sContext* cp);
static void usage(char*); static void usage(char*);
static void ini_errl_cb(void* userdata, char* str, char severity, static void ini_errl_cb(void* userdata, char* str, char severity,
pwr_tStatus sts, int anix, int message_type); pwr_tStatus sts, int anix, int message_type);
void handle_signal(int sig, siginfo_t* si, void* ctx); void handle_signal(int sig, siginfo_t* si, void* ctx);
static int pid_fd = -1; static int pid_fd = -1;
static char* pid_filename = NULL; static char* pid_filename = NULL;
void set_valid_time() { /* Set valid utc time */} void set_valid_time()
{ /* Set valid utc time */
}
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
...@@ -104,27 +106,22 @@ int main(int argc, char** argv) ...@@ -104,27 +106,22 @@ int main(int argc, char** argv)
ver_WriteVersionInfo("ProviewR Runtime Environment"); ver_WriteVersionInfo("ProviewR Runtime Environment");
if (cp->flags.b.restart) printf("test\n");
{
if (cp->flags.b.restart) {
sts = interactive(argc, argv, cp); sts = interactive(argc, argv, cp);
} } else if (cp->flags.b.stop) {
else if (cp->flags.b.stop)
{
sts = stop(cp); sts = stop(cp);
} } else {
else
{
// Now lets daemonize if asked to // Now lets daemonize if asked to
if (cp->flags.b.daemonize) if (cp->flags.b.daemonize) {
{
daemonize(); daemonize();
} }
sts = start(cp); sts = start(cp);
// Now lets create the pid file before starting our endless event loop // Now lets create the pid file before starting our endless event loop
if (cp->flags.b.daemonize) if (cp->flags.b.daemonize) {
{
create_pidfile(); create_pidfile();
} }
...@@ -149,8 +146,7 @@ static pwr_tStatus start(ini_sContext* cp) ...@@ -149,8 +146,7 @@ static pwr_tStatus start(ini_sContext* cp)
strcpy(console, cp->console); strcpy(console, cp->console);
if ((fd = open(console, O_APPEND | O_WRONLY)) == -1) if ((fd = open(console, O_APPEND | O_WRONLY)) == -1)
errl_Init(NULL, ini_errl_cb, cp); errl_Init(NULL, ini_errl_cb, cp);
else else {
{
close(fd); close(fd);
errl_Init(console, ini_errl_cb, cp); errl_Init(console, ini_errl_cb, cp);
} }
...@@ -169,10 +165,9 @@ static pwr_tStatus start(ini_sContext* cp) ...@@ -169,10 +165,9 @@ static pwr_tStatus start(ini_sContext* cp)
ini_CheckNode(&sts, cp); ini_CheckNode(&sts, cp);
cp->me = tree_Find(&sts, cp->nid_t, &cp->node.nid); cp->me = tree_Find(&sts, cp->nid_t, &cp->node.nid);
if (cp->me == NULL) if (cp->me == NULL) {
{ errh_LogFatal(
errh_LogFatal(&cp->log, "Cannot find my own node in %s\n", &cp->log, "Cannot find my own node in %s\n", cp->nodefile.name);
cp->nodefile.name);
exit(QCOM__WEIRD); exit(QCOM__WEIRD);
} }
...@@ -188,10 +183,8 @@ static pwr_tStatus start(ini_sContext* cp) ...@@ -188,10 +183,8 @@ static pwr_tStatus start(ini_sContext* cp)
ini_BuildNode(&sts, cp); ini_BuildNode(&sts, cp);
if (cp->np != NULL) if (cp->np != NULL) {
{ if (cp->np->ErrLogTerm[0] != '\0') {
if (cp->np->ErrLogTerm[0] != '\0')
{
errh_LogInfo(&cp->log, "Setting log terminal to: %s", cp->np->ErrLogTerm); errh_LogInfo(&cp->log, "Setting log terminal to: %s", cp->np->ErrLogTerm);
errl_SetTerm(cp->np->ErrLogTerm); errl_SetTerm(cp->np->ErrLogTerm);
} }
...@@ -235,8 +228,7 @@ static pwr_tStatus start(ini_sContext* cp) ...@@ -235,8 +228,7 @@ static pwr_tStatus start(ini_sContext* cp)
qini_BuildDb(&sts, cp->nid_t, cp->me, NULL, cp->busid); qini_BuildDb(&sts, cp->nid_t, cp->me, NULL, cp->busid);
sts = redu_get_initial_state(cp->nodename, cp->busid, &state); sts = redu_get_initial_state(cp->nodename, cp->busid, &state);
if (ODD(sts)) if (ODD(sts)) {
{
cp->np->RedundancyState = state; cp->np->RedundancyState = state;
qcom_SetRedundancyState(state); qcom_SetRedundancyState(state);
} }
...@@ -254,28 +246,26 @@ static pwr_tStatus start(ini_sContext* cp) ...@@ -254,28 +246,26 @@ static pwr_tStatus start(ini_sContext* cp)
net_Connect(&sts, &gdbroot->my_aid, &gdbroot->my_qid, NULL, "pwr_ini"); net_Connect(&sts, &gdbroot->my_aid, &gdbroot->my_qid, NULL, "pwr_ini");
/*if (!qcom_Init(&sts, 0)) {*/ /*if (!qcom_Init(&sts, 0)) {*/
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_LogFatal(&cp->log, "net_Connect, %m", sts); errh_LogFatal(&cp->log, "net_Connect, %m", sts);
exit(sts); exit(sts);
} }
qcom_SignalOr(&sts, &qcom_cQini, qcom_SignalOr(
ini_mEvent_newPlcInit | ini_mEvent_newPlcStart); &sts, &qcom_cQini, ini_mEvent_newPlcInit | ini_mEvent_newPlcStart);
ini_ProcIter(&sts, cp, proc_mProcess_user, 0, ini_ProcLoad); ini_ProcIter(&sts, cp, proc_mProcess_user, 0, ini_ProcLoad);
ini_ProcIter(&sts, cp, proc_mProcess_user, 0, ini_ProcStart); ini_ProcIter(&sts, cp, proc_mProcess_user, 0, ini_ProcStart);
ini_ProcIter(&sts, cp, proc_mProcess_user, 0, ini_ProcPrio); ini_ProcIter(&sts, cp, proc_mProcess_user, 0, ini_ProcPrio);
qcom_CreateQ(&sts, &cp->eventQ, NULL, "iniEvent"); qcom_CreateQ(&sts, &cp->eventQ, NULL, "iniEvent");
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts); errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts);
exit(sts); exit(sts);
} }
qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini,
ini_mEvent_newPlcStartDone | cp->plc_sigmask, qcom_cTmoEternal); ini_mEvent_newPlcStartDone | cp->plc_sigmask, qcom_cTmoEternal);
sts = ini_SetAttributeAfterPlc(cp->aliasfile.name, cp->nodename, 0); sts = ini_SetAttributeAfterPlc(cp->aliasfile.name, cp->nodename, 0);
if (EVEN(sts) && sts != INI__FILE) if (EVEN(sts) && sts != INI__FILE)
...@@ -300,28 +290,24 @@ static pwr_tStatus interactive(int argc, char** argv, ini_sContext* cp) ...@@ -300,28 +290,24 @@ static pwr_tStatus interactive(int argc, char** argv, ini_sContext* cp)
errh_Interactive(); errh_Interactive();
if (!qcom_Init(&sts, 0, "pwr_ini_restart")) if (!qcom_Init(&sts, 0, "pwr_ini_restart")) {
{
errh_LogFatal(&cp->log, "qcom_Init, %m", sts); errh_LogFatal(&cp->log, "qcom_Init, %m", sts);
exit(sts); exit(sts);
} }
qcom_CreateQ(&sts, &cp->myQ, NULL, "pwr_ini_restart"); qcom_CreateQ(&sts, &cp->myQ, NULL, "pwr_ini_restart");
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts); errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts);
exit(sts); exit(sts);
} }
for (i = 0, totlen = 0; i < argc; i++) for (i = 0, totlen = 0; i < argc; i++) {
{
len = strlen(argv[i]); len = strlen(argv[i]);
totlen += 1 + len; totlen += 1 + len;
errh_LogInfo(&cp->log, "argv[%d]: %d \"%s\"", i, len, argv[i]); errh_LogInfo(&cp->log, "argv[%d]: %d \"%s\"", i, len, argv[i]);
} }
bp = malloc(totlen); bp = malloc(totlen);
for (i = 0, sp = bp; i < argc; i++) for (i = 0, sp = bp; i < argc; i++) {
{
len = strlen(argv[i]); len = strlen(argv[i]);
memcpy(sp, argv[i], len + 1); memcpy(sp, argv[i], len + 1);
sp += len + 1; sp += len + 1;
...@@ -338,18 +324,14 @@ static pwr_tStatus interactive(int argc, char** argv, ini_sContext* cp) ...@@ -338,18 +324,14 @@ static pwr_tStatus interactive(int argc, char** argv, ini_sContext* cp)
qcom_Put(&sts, &qid, &put); qcom_Put(&sts, &qid, &put);
while (1) while (1) {
{
char* s; char* s;
get.data = NULL; get.data = NULL;
s = qcom_Get(&sts, &cp->myQ, &get, 100000); s = qcom_Get(&sts, &cp->myQ, &get, 100000);
if (sts == QCOM__TMO && sts == QCOM__QEMPTY) if (sts == QCOM__TMO && sts == QCOM__QEMPTY) {
{
break; break;
} } else if (s != NULL) {
else if (s != NULL)
{
printf("%s\n", s); printf("%s\n", s);
qcom_Free(NULL, s); qcom_Free(NULL, s);
} }
...@@ -374,8 +356,7 @@ static pwr_tStatus stop(ini_sContext* cp) ...@@ -374,8 +356,7 @@ static pwr_tStatus stop(ini_sContext* cp)
// errh_Interactive(); // errh_Interactive();
if (!qcom_Init(&sts, 0, "pwr_ini_stop")) if (!qcom_Init(&sts, 0, "pwr_ini_stop")) {
{
exit(sts); exit(sts);
} }
...@@ -470,12 +451,12 @@ static pwr_tStatus restart(ini_sContext* cp) ...@@ -470,12 +451,12 @@ static pwr_tStatus restart(ini_sContext* cp)
qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_newPlcInit); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_newPlcInit);
qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini,
ini_mEvent_newPlcInitDone | cp->plc_sigmask, qcom_cTmoEternal); ini_mEvent_newPlcInitDone | cp->plc_sigmask, qcom_cTmoEternal);
errh_LogInfo(&cp->log, "Entering time critical period, stopping old PLC"); errh_LogInfo(&cp->log, "Entering time critical period, stopping old PLC");
qcom_SignalAnd(&sts, &qcom_cQini, ~cp->plc_sigmask); qcom_SignalAnd(&sts, &qcom_cQini, ~cp->plc_sigmask);
qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_oldPlcStop); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_oldPlcStop);
qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini,
ini_mEvent_oldPlcStopDone | cp->plc_sigmask, qcom_cTmoEternal); ini_mEvent_oldPlcStopDone | cp->plc_sigmask, qcom_cTmoEternal);
qcom_SignalAnd(&sts, &qcom_cQini, ~ini_mEvent_oldPlcStop); qcom_SignalAnd(&sts, &qcom_cQini, ~ini_mEvent_oldPlcStop);
ini_UpdateBodies(&sts, cp, 0); ini_UpdateBodies(&sts, cp, 0);
...@@ -483,15 +464,13 @@ static pwr_tStatus restart(ini_sContext* cp) ...@@ -483,15 +464,13 @@ static pwr_tStatus restart(ini_sContext* cp)
qcom_SignalAnd(&sts, &qcom_cQini, ~cp->plc_sigmask); qcom_SignalAnd(&sts, &qcom_cQini, ~cp->plc_sigmask);
qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_newPlcStart); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_newPlcStart);
qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini,
ini_mEvent_newPlcStartDone | cp->plc_sigmask, qcom_cTmoEternal); ini_mEvent_newPlcStartDone | cp->plc_sigmask, qcom_cTmoEternal);
errh_LogInfo(&cp->log, "Time critical period over, new PLC is running"); errh_LogInfo(&cp->log, "Time critical period over, new PLC is running");
qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_swapDone); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_swapDone);
for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL; for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL;
pp = lst_Succ(NULL, pl, &pl)) pp = lst_Succ(NULL, pl, &pl)) {
{ if (pp->flags.m & ini_mProc_plc && pp->objectp) {
if (pp->flags.m & ini_mProc_plc && pp->objectp)
{
pwr_sClass_PlcProcess* plc = pp->objectp; pwr_sClass_PlcProcess* plc = pp->objectp;
time_GetTime(&plc->LastChgTime); time_GetTime(&plc->LastChgTime);
...@@ -559,62 +538,48 @@ static pwr_tStatus terminate() ...@@ -559,62 +538,48 @@ static pwr_tStatus terminate()
static int ask_yes_no(char* text) static int ask_yes_no(char* text)
{ {
char ans;
printf("%s ? (y|n) [n]: ", text); printf("%s ? [Y/n]: ", text);
printf("n\n"); scanf("%c", &ans);
return (ans == 'y' || ans == 'Y');
return 0;
} }
static int checkErrors(ini_sContext* cp) static int checkErrors(ini_sContext* cp)
{ {
if (cp->warnings == 0 && cp->errors == 0 && cp->fatals == 0) if (cp->warnings == 0 && cp->errors == 0 && cp->fatals == 0)
return 1; return 1;
if (cp->fatals > 0) if (cp->fatals > 0) {
{
errh_LogFatal(&cp->log, errh_LogFatal(&cp->log,
"Found %d warning(s), %d error(s) and %d fatal error(s)", "Found %d warning(s), %d error(s) and %d fatal error(s)", cp->warnings,
cp->warnings, cp->errors, cp->fatals); cp->errors, cp->fatals);
if (cp->flags.b.ignoreFatal) if (cp->flags.b.ignoreFatal) {
{ errh_LogInfo(
errh_LogInfo(&cp->log, &cp->log, "Ignoring fatal errors, errors and warnings, continued...");
"Ignoring fatal errors, errors and warnings, continued...");
return 1; return 1;
} } else {
else
{
return ask_yes_no("Do you want to continue"); return ask_yes_no("Do you want to continue");
} }
} }
if (cp->errors > 0) if (cp->errors > 0) {
{
errh_LogError(&cp->log, errh_LogError(&cp->log,
"Found %d warning(s), %d error(s) and %d fatal error(s)", "Found %d warning(s), %d error(s) and %d fatal error(s)", cp->warnings,
cp->warnings, cp->errors, cp->fatals); cp->errors, cp->fatals);
if (cp->flags.b.ignoreError) if (cp->flags.b.ignoreError) {
{
errh_LogInfo(&cp->log, "Ignoring errors and warnings, continued..."); errh_LogInfo(&cp->log, "Ignoring errors and warnings, continued...");
return 1; return 1;
} } else {
else
{
return ask_yes_no("Do you want to continue"); return ask_yes_no("Do you want to continue");
} }
} }
if (cp->warnings > 0) if (cp->warnings > 0) {
{
errh_LogWarning(&cp->log, errh_LogWarning(&cp->log,
"Found %d warning(s), %d error(s) and %d fatal error(s)", "Found %d warning(s), %d error(s) and %d fatal error(s)", cp->warnings,
cp->warnings, cp->errors, cp->fatals); cp->errors, cp->fatals);
if (cp->flags.b.ignoreWarning) if (cp->flags.b.ignoreWarning) {
{
errh_LogInfo(&cp->log, "Ignoring warnings, continued..."); errh_LogInfo(&cp->log, "Ignoring warnings, continued...");
return 1; return 1;
} } else {
else
{
return ask_yes_no("Do you want to continue"); return ask_yes_no("Do you want to continue");
} }
} }
...@@ -627,31 +592,25 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -627,31 +592,25 @@ static ini_sContext* createContext(int argc, char** argv)
ini_sContext* cp; ini_sContext* cp;
pwr_tStatus sts; pwr_tStatus sts;
if (argc > 1 && streq(argv[1], "--version")) if (argc > 1 && streq(argv[1], "--version")) {
{
system("cat $pwr_exe/rt_version.dat"); system("cat $pwr_exe/rt_version.dat");
exit(1); exit(1);
} }
if (!(cp = ini_CreateContext(&sts))) if (!(cp = ini_CreateContext(&sts))) {
{
fprintf(stderr, "%s: could not allocate context\n", argv[0]); fprintf(stderr, "%s: could not allocate context\n", argv[0]);
exit(1); exit(1);
} }
for (i = 1; i < argc; i++) for (i = 1; i < argc; i++) {
{ if (argv[i][0] == '-') {
if (argv[i][0] == '-')
{
int i_incr = 0; int i_incr = 0;
for (j = 1; for (j = 1;
argv[i][j] != 0 && argv[i][j] != ' ' && argv[i][j] != ' '; j++) argv[i][j] != 0 && argv[i][j] != ' ' && argv[i][j] != ' ';
{ j++) {
switch (argv[i][j]) switch (argv[i][j]) {
{
case 'a': case 'a':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -661,9 +620,8 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -661,9 +620,8 @@ static ini_sContext* createContext(int argc, char** argv)
i_incr = 1; i_incr = 1;
break; break;
case 'b': case 'b':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -671,9 +629,8 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -671,9 +629,8 @@ static ini_sContext* createContext(int argc, char** argv)
strcpy(cp->bootfile.name, argv[i + 1]); strcpy(cp->bootfile.name, argv[i + 1]);
break; break;
case 'c': case 'c':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -682,9 +639,8 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -682,9 +639,8 @@ static ini_sContext* createContext(int argc, char** argv)
i_incr = 1; i_incr = 1;
break; break;
case 'd': case 'd':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -699,9 +655,8 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -699,9 +655,8 @@ static ini_sContext* createContext(int argc, char** argv)
cp->flags.b.ignoreFatal = 1; cp->flags.b.ignoreFatal = 1;
break; break;
case 'h': case 'h':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -714,9 +669,8 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -714,9 +669,8 @@ static ini_sContext* createContext(int argc, char** argv)
cp->flags.b.interactive = 1; cp->flags.b.interactive = 1;
break; break;
case 'n': case 'n':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -726,9 +680,8 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -726,9 +680,8 @@ static ini_sContext* createContext(int argc, char** argv)
i_incr = 1; i_incr = 1;
break; break;
case 'p': case 'p':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -741,9 +694,8 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -741,9 +694,8 @@ static ini_sContext* createContext(int argc, char** argv)
i_incr = 1; i_incr = 1;
break; break;
case 'q': case 'q':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -764,9 +716,8 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -764,9 +716,8 @@ static ini_sContext* createContext(int argc, char** argv)
cp->flags.b.ignoreWarning = 1; cp->flags.b.ignoreWarning = 1;
break; break;
case 'A': case 'A':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -779,9 +730,8 @@ static ini_sContext* createContext(int argc, char** argv) ...@@ -779,9 +730,8 @@ static ini_sContext* createContext(int argc, char** argv)
cp->flags.b.daemonize = 1; cp->flags.b.daemonize = 1;
break; break;
case 'P': case 'P':
if (i + 1 >= argc || if (i + 1 >= argc
!(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) || !(argv[i][j + 1] == ' ' || argv[i][j + 1] != ' ')) {
{
usage(argv[0]); usage(argv[0]);
exit(0); exit(0);
} }
...@@ -809,7 +759,7 @@ static void usage(char* name) ...@@ -809,7 +759,7 @@ static void usage(char* name)
{ {
fprintf(stderr, "usage: %s -a arg -b arg -d arg -efg arg -hip arg -q arg -ru " fprintf(stderr, "usage: %s -a arg -b arg -d arg -efg arg -hip arg -q arg -ru "
"arg -s arg -vwA arg -H arg\n", "arg -s arg -vwA arg -H arg\n",
name); name);
fprintf(stderr, " -? : give help\n"); fprintf(stderr, " -? : give help\n");
fprintf(stderr, " -a arg: use 'arg' as application file\n"); fprintf(stderr, " -a arg: use 'arg' as application file\n");
fprintf(stderr, " -b arg: use 'arg' as boot file\n"); fprintf(stderr, " -b arg: use 'arg' as boot file\n");
...@@ -828,7 +778,7 @@ static void usage(char* name) ...@@ -828,7 +778,7 @@ static void usage(char* name)
fprintf(stderr, " -w : ignore warnings\n"); fprintf(stderr, " -w : ignore warnings\n");
fprintf(stderr, " -A arg: use 'arg' as alias file\n"); fprintf(stderr, " -A arg: use 'arg' as alias file\n");
fprintf(stderr, fprintf(stderr,
" -D : Daemonize rt_ini. Default PID file is /run/pwr/pwr.pid\n"); " -D : Daemonize rt_ini. Default PID file is /run/pwr/pwr.pid\n");
fprintf(stderr, " -p : PID file, implies -D\n"); fprintf(stderr, " -p : PID file, implies -D\n");
fprintf(stderr, " -H arg: use 'arg' as hostname\n"); fprintf(stderr, " -H arg: use 'arg' as hostname\n");
fprintf(stderr, " -N arg: use 'arg' as nodename\n"); fprintf(stderr, " -N arg: use 'arg' as nodename\n");
...@@ -844,18 +794,15 @@ static void logChanges(ini_sContext* cp) ...@@ -844,18 +794,15 @@ static void logChanges(ini_sContext* cp)
int cre, upd, upd_io; int cre, upd, upd_io;
for (vp = lst_Succ(NULL, &cp->vol_lh, &vl); vp != NULL; for (vp = lst_Succ(NULL, &cp->vol_lh, &vl); vp != NULL;
vp = lst_Succ(NULL, vl, &vl)) vp = lst_Succ(NULL, vl, &vl)) {
{
cre = upd = upd_io = 0; cre = upd = upd_io = 0;
for (iop = lst_Succ(NULL, &vp->cre_lh, &ol); iop != NULL; for (iop = lst_Succ(NULL, &vp->cre_lh, &ol); iop != NULL;
iop = lst_Succ(NULL, ol, &ol)) iop = lst_Succ(NULL, ol, &ol)) {
{
errh_LogInfo(&cp->log, "cre: %s\n", iop->oh.name); errh_LogInfo(&cp->log, "cre: %s\n", iop->oh.name);
cre++; cre++;
} }
for (iop = lst_Succ(NULL, &vp->upd_io_lh, &ol); iop != NULL; for (iop = lst_Succ(NULL, &vp->upd_io_lh, &ol); iop != NULL;
iop = lst_Succ(NULL, ol, &ol)) iop = lst_Succ(NULL, ol, &ol)) {
{
printf("upd: %s, (", iop->op->g.f.name.orig); printf("upd: %s, (", iop->op->g.f.name.orig);
if (iop->flags.b.father) if (iop->flags.b.father)
printf("father, "); printf("father, ");
...@@ -875,8 +822,7 @@ static void logChanges(ini_sContext* cp) ...@@ -875,8 +822,7 @@ static void logChanges(ini_sContext* cp)
upd_io++; upd_io++;
} }
for (iop = lst_Succ(NULL, &vp->upd_lh, &ol); iop != NULL; for (iop = lst_Succ(NULL, &vp->upd_lh, &ol); iop != NULL;
iop = lst_Succ(NULL, ol, &ol)) iop = lst_Succ(NULL, ol, &ol)) {
{
printf("upd: %s, (", iop->op->g.f.name.orig); printf("upd: %s, (", iop->op->g.f.name.orig);
if (iop->flags.b.father) if (iop->flags.b.father)
printf("father, "); printf("father, ");
...@@ -896,7 +842,7 @@ static void logChanges(ini_sContext* cp) ...@@ -896,7 +842,7 @@ static void logChanges(ini_sContext* cp)
upd++; upd++;
} }
errh_LogInfo(&cp->log, "Volume: %s, id: %d, cre: %d, upd_io: %d, upd: %d\n", errh_LogInfo(&cp->log, "Volume: %s, id: %d, cre: %d, upd_io: %d, upd: %d\n",
vp->volume.name, vp->vid, cre, upd_io, upd); vp->volume.name, vp->vid, cre, upd_io, upd);
} }
} }
...@@ -906,12 +852,12 @@ static void logCardinality(ini_sContext* cp) ...@@ -906,12 +852,12 @@ static void logCardinality(ini_sContext* cp)
ivol_sVolume* vp; ivol_sVolume* vp;
errh_LogInfo(&cp->log, "Cardinality: %d, bodysize: %d\n", errh_LogInfo(&cp->log, "Cardinality: %d, bodysize: %d\n",
cp->node.cardinality, cp->node.bodySize); cp->node.cardinality, cp->node.bodySize);
for (vp = lst_Succ(NULL, &cp->vol_lh, &vl); vp != NULL; for (vp = lst_Succ(NULL, &cp->vol_lh, &vl); vp != NULL;
vp = lst_Succ(NULL, vl, &vl)) vp = lst_Succ(NULL, vl, &vl))
errh_LogInfo( errh_LogInfo(&cp->log,
&cp->log, "Volume: %s, id: %d, cardinality: %d, bodysize: %d\n", "Volume: %s, id: %d, cardinality: %d, bodysize: %d\n", vp->volume.name,
vp->volume.name, vp->vid, vp->volume.cardinality, vp->volume.rbodySize); vp->vid, vp->volume.cardinality, vp->volume.rbodySize);
} }
static pwr_tStatus events(ini_sContext* cp) static pwr_tStatus events(ini_sContext* cp)
...@@ -928,49 +874,42 @@ static pwr_tStatus events(ini_sContext* cp) ...@@ -928,49 +874,42 @@ static pwr_tStatus events(ini_sContext* cp)
cp->myQ.nid = 0; cp->myQ.nid = 0;
qcom_CreateQ(&sts, &cp->myQ, NULL, "events"); qcom_CreateQ(&sts, &cp->myQ, NULL, "events");
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts); errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts);
exit(sts); exit(sts);
} }
for (;;) for (;;) {
{
int status; int status;
get.data = NULL; get.data = NULL;
qcom_Get(&sts, &cp->myQ, &get, tmo_ms); qcom_Get(&sts, &cp->myQ, &get, tmo_ms);
/* Request for termination ?? */ /* Request for termination ?? */
if (sts != QCOM__TMO && sts != QCOM__QEMPTY && get.type.b == 11) if (sts != QCOM__TMO && sts != QCOM__QEMPTY && get.type.b == 11) {
{
sts = terminate(); sts = terminate();
return sts; return sts;
} }
/* Request for restart */ /* Request for restart */
if (sts != QCOM__TMO && sts != QCOM__QEMPTY && get.data != NULL) if (sts != QCOM__TMO && sts != QCOM__QEMPTY && get.data != NULL) {
{
int len, i, argc, totlen; int len, i, argc, totlen;
char **argv, *s; char **argv, *s;
ini_sContext* ncp; ini_sContext* ncp;
for (argc = 0, s = get.data, totlen = 0; totlen < get.size; argc++) for (argc = 0, s = get.data, totlen = 0; totlen < get.size; argc++) {
{
len = strlen(s); len = strlen(s);
s += len + 1; s += len + 1;
totlen += len + 1; totlen += len + 1;
} }
argv = (char**)calloc(sizeof(void*), argc); argv = (char**)calloc(sizeof(void*), argc);
for (i = 0, s = get.data; i < argc; i++) for (i = 0, s = get.data; i < argc; i++) {
{
len = strlen(s); len = strlen(s);
argv[i] = s; argv[i] = s;
s += len + 1; s += len + 1;
} }
ncp = createContext(argc, argv); ncp = createContext(argc, argv);
if (ncp != NULL) if (ncp != NULL) {
{
ncp->log.put.type.b = 10; ncp->log.put.type.b = 10;
ncp->log.put.type.s = 1; ncp->log.put.type.s = 1;
ncp->log.send = 1; ncp->log.send = 1;
...@@ -994,12 +933,10 @@ static pwr_tStatus events(ini_sContext* cp) ...@@ -994,12 +933,10 @@ static pwr_tStatus events(ini_sContext* cp)
break; break;
for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL; for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL;
pp = lst_Succ(NULL, pl, &pl)) pp = lst_Succ(NULL, pl, &pl)) {
{ if (pp->proc.pid == pid) {
if (pp->proc.pid == pid)
{
errh_LogInfo(&cp->log, "Process %s exited with status %d", errh_LogInfo(&cp->log, "Process %s exited with status %d",
pp->proc.name, status); pp->proc.name, status);
break; break;
} }
} }
...@@ -1059,218 +996,186 @@ static void load_backup() ...@@ -1059,218 +996,186 @@ static void load_backup()
pwr_sAttrRef aref; pwr_sAttrRef aref;
sts = io_get_iohandler_object(&iop, NULL); sts = io_get_iohandler_object(&iop, NULL);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("io_get_iohandler_object, %m", sts); errh_Error("io_get_iohandler_object, %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-av", &oid); sts = gdh_NameToObjid("pwrNode-active-io-av", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-av, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-av, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&avp); sts = gdh_ObjidToPointer(oid, (void*)&avp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &avp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &avp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-av_init", &oid); sts = gdh_NameToObjid("pwrNode-active-io-av_init", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-av_init, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-av_init, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&iavp); sts = gdh_ObjidToPointer(oid, (void*)&iavp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &iavp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &iavp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-dv", &oid); sts = gdh_NameToObjid("pwrNode-active-io-dv", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-dv, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-dv, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&dvp); sts = gdh_ObjidToPointer(oid, (void*)&dvp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &dvp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &dvp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-dv_init", &oid); sts = gdh_NameToObjid("pwrNode-active-io-dv_init", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-dv_init, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-dv_init, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&idvp); sts = gdh_ObjidToPointer(oid, (void*)&idvp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &idvp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &idvp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-iv", &oid); sts = gdh_NameToObjid("pwrNode-active-io-iv", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-iv, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-iv, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&ivp); sts = gdh_ObjidToPointer(oid, (void*)&ivp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &ivp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &ivp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-atv", &oid); sts = gdh_NameToObjid("pwrNode-active-io-atv", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-atv, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-atv, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&atvp); sts = gdh_ObjidToPointer(oid, (void*)&atvp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &atvp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &atvp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-dtv", &oid); sts = gdh_NameToObjid("pwrNode-active-io-dtv", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-dtv, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-dtv, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&dtvp); sts = gdh_ObjidToPointer(oid, (void*)&dtvp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &dtvp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &dtvp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-sv", &oid); sts = gdh_NameToObjid("pwrNode-active-io-sv", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-sv, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-sv, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&svp); sts = gdh_ObjidToPointer(oid, (void*)&svp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &svp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &svp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-iv_init", &oid); sts = gdh_NameToObjid("pwrNode-active-io-iv_init", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-iv_init, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-iv_init, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&iivp); sts = gdh_ObjidToPointer(oid, (void*)&iivp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &iivp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &iivp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-atv_init", &oid); sts = gdh_NameToObjid("pwrNode-active-io-atv_init", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-atv_init, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-atv_init, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&iatvp); sts = gdh_ObjidToPointer(oid, (void*)&iatvp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &iatvp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &iatvp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-dtv_init", &oid); sts = gdh_NameToObjid("pwrNode-active-io-dtv_init", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-dtv_init, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-dtv_init, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&idtvp); sts = gdh_ObjidToPointer(oid, (void*)&idtvp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &idtvp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &idtvp), %m", sts);
return; return;
} }
sts = gdh_NameToObjid("pwrNode-active-io-sv_init", &oid); sts = gdh_NameToObjid("pwrNode-active-io-sv_init", &oid);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_NameToObjid(pwrNode-active-io-sv_init, &oid), %m", sts); errh_Error("gdh_NameToObjid(pwrNode-active-io-sv_init, &oid), %m", sts);
return; return;
} }
sts = gdh_ObjidToPointer(oid, (void*)&isvp); sts = gdh_ObjidToPointer(oid, (void*)&isvp);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_ObjidToPointer(oid, (void *) &isvp), %m", sts); errh_Error("gdh_ObjidToPointer(oid, (void *) &isvp), %m", sts);
return; return;
} }
for (i = 0; i < iop->AvCount; i++) for (i = 0; i < iop->AvCount; i++) {
{
pwr_tFloat32* ifp = gdh_TranslateRtdbPointer(iavp->Value[i]); pwr_tFloat32* ifp = gdh_TranslateRtdbPointer(iavp->Value[i]);
avp->Value[i] = *ifp; avp->Value[i] = *ifp;
} }
for (i = 0; i < iop->DvCount; i++) for (i = 0; i < iop->DvCount; i++) {
{
pwr_tBoolean* ibp = gdh_TranslateRtdbPointer(idvp->Value[i]); pwr_tBoolean* ibp = gdh_TranslateRtdbPointer(idvp->Value[i]);
dvp->Value[i] = *ibp; dvp->Value[i] = *ibp;
} }
for (i = 0; i < iop->IvCount; i++) for (i = 0; i < iop->IvCount; i++) {
{
pwr_tInt32* iip = gdh_TranslateRtdbPointer(iivp->Value[i]); pwr_tInt32* iip = gdh_TranslateRtdbPointer(iivp->Value[i]);
ivp->Value[i] = *iip; ivp->Value[i] = *iip;
} }
for (i = 1; i < iop->ATvCount; i++) for (i = 1; i < iop->ATvCount; i++) {
{
pwr_tTime* iatp = gdh_TranslateRtdbPointer(iatvp->Value[i]); pwr_tTime* iatp = gdh_TranslateRtdbPointer(iatvp->Value[i]);
atvp->Value[i] = *iatp; atvp->Value[i] = *iatp;
} }
for (i = 0; i < iop->DTvCount; i++) for (i = 0; i < iop->DTvCount; i++) {
{
pwr_tDeltaTime* idtp = gdh_TranslateRtdbPointer(idtvp->Value[i]); pwr_tDeltaTime* idtp = gdh_TranslateRtdbPointer(idtvp->Value[i]);
dtvp->Value[i] = *idtp; dtvp->Value[i] = *idtp;
} }
for (i = 0; i < iop->SvCount; i++) for (i = 0; i < iop->SvCount; i++) {
{
char* istrp = gdh_TranslateRtdbPointer(isvp->Value[i]); char* istrp = gdh_TranslateRtdbPointer(isvp->Value[i]);
strncpy(svp->Value[i], istrp, sizeof(svp->Value[0])); strncpy(svp->Value[i], istrp, sizeof(svp->Value[0]));
} }
typedef struct typedef struct {
{
union { union {
pwr_tFloat32* f; pwr_tFloat32* f;
pwr_tInt32* i; pwr_tInt32* i;
...@@ -1316,14 +1221,12 @@ static void load_backup() ...@@ -1316,14 +1221,12 @@ static void load_backup()
rsav = calloc(sizeof(ini_sRestoreSig), iop->AvCount); rsav = calloc(sizeof(ini_sRestoreSig), iop->AvCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Av, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Av, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Av, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Av, &aref, &aref)) {
{
if (i >= iop->AvCount) if (i >= iop->AvCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsav[i].op.av); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsav[i].op.av);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1336,14 +1239,12 @@ static void load_backup() ...@@ -1336,14 +1239,12 @@ static void load_backup()
rsdv = calloc(sizeof(ini_sRestoreSig), iop->DvCount); rsdv = calloc(sizeof(ini_sRestoreSig), iop->DvCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Dv, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Dv, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Dv, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Dv, &aref, &aref)) {
{
if (i >= iop->DvCount) if (i >= iop->DvCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsdv[i].op.dv); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsdv[i].op.dv);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1356,14 +1257,12 @@ static void load_backup() ...@@ -1356,14 +1257,12 @@ static void load_backup()
rsiv = calloc(sizeof(ini_sRestoreSig), iop->IvCount); rsiv = calloc(sizeof(ini_sRestoreSig), iop->IvCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Iv, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Iv, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Iv, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Iv, &aref, &aref)) {
{
if (i >= iop->IvCount) if (i >= iop->IvCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsiv[i].op.iv); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsiv[i].op.iv);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1376,14 +1275,12 @@ static void load_backup() ...@@ -1376,14 +1275,12 @@ static void load_backup()
rsatv = calloc(sizeof(ini_sRestoreSig), iop->ATvCount); rsatv = calloc(sizeof(ini_sRestoreSig), iop->ATvCount);
i = 1; i = 1;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_ATv, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_ATv, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_ATv, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_ATv, &aref, &aref)) {
{
if (i >= iop->ATvCount) if (i >= iop->ATvCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsatv[i].op.atv); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsatv[i].op.atv);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer ATv, %m", sts); errh_Error("gdh_AttrRefToPointer ATv, %m", sts);
goto error; goto error;
} }
...@@ -1396,14 +1293,12 @@ static void load_backup() ...@@ -1396,14 +1293,12 @@ static void load_backup()
rsdtv = calloc(sizeof(ini_sRestoreSig), iop->DTvCount); rsdtv = calloc(sizeof(ini_sRestoreSig), iop->DTvCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_DTv, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_DTv, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_DTv, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_DTv, &aref, &aref)) {
{
if (i >= iop->DTvCount) if (i >= iop->DTvCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsdtv[i].op.dtv); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsdtv[i].op.dtv);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer DTv, %m", sts); errh_Error("gdh_AttrRefToPointer DTv, %m", sts);
goto error; goto error;
} }
...@@ -1416,14 +1311,12 @@ static void load_backup() ...@@ -1416,14 +1311,12 @@ static void load_backup()
rssv = calloc(sizeof(ini_sRestoreSig), iop->SvCount); rssv = calloc(sizeof(ini_sRestoreSig), iop->SvCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Sv, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Sv, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Sv, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Sv, &aref, &aref)) {
{
if (i >= iop->SvCount) if (i >= iop->SvCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rssv[i].op.sv); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rssv[i].op.sv);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Sv, %m", sts); errh_Error("gdh_AttrRefToPointer Sv, %m", sts);
goto error; goto error;
} }
...@@ -1436,14 +1329,12 @@ static void load_backup() ...@@ -1436,14 +1329,12 @@ static void load_backup()
rsai = calloc(sizeof(ini_sRestoreSig), iop->AiCount); rsai = calloc(sizeof(ini_sRestoreSig), iop->AiCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Ai, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Ai, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Ai, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Ai, &aref, &aref)) {
{
if (i >= iop->AiCount) if (i >= iop->AiCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsai[i].op.ai); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsai[i].op.ai);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1456,14 +1347,12 @@ static void load_backup() ...@@ -1456,14 +1347,12 @@ static void load_backup()
rsao = calloc(sizeof(ini_sRestoreSig), iop->AoCount); rsao = calloc(sizeof(ini_sRestoreSig), iop->AoCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Ao, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Ao, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Ao, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Ao, &aref, &aref)) {
{
if (i >= iop->AoCount) if (i >= iop->AoCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsao[i].op.ao); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsao[i].op.ao);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1476,14 +1365,12 @@ static void load_backup() ...@@ -1476,14 +1365,12 @@ static void load_backup()
rsii = calloc(sizeof(ini_sRestoreSig), iop->IiCount); rsii = calloc(sizeof(ini_sRestoreSig), iop->IiCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Ii, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Ii, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Ii, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Ii, &aref, &aref)) {
{
if (i >= iop->IiCount) if (i >= iop->IiCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsii[i].op.ii); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsii[i].op.ii);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1496,14 +1383,12 @@ static void load_backup() ...@@ -1496,14 +1383,12 @@ static void load_backup()
rsio = calloc(sizeof(ini_sRestoreSig), iop->IoCount); rsio = calloc(sizeof(ini_sRestoreSig), iop->IoCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Io, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Io, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Io, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Io, &aref, &aref)) {
{
if (i >= iop->IoCount) if (i >= iop->IoCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsio[i].op.io); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsio[i].op.io);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1516,14 +1401,12 @@ static void load_backup() ...@@ -1516,14 +1401,12 @@ static void load_backup()
rsdi = calloc(sizeof(ini_sRestoreSig), iop->DiCount); rsdi = calloc(sizeof(ini_sRestoreSig), iop->DiCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Di, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Di, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Di, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Di, &aref, &aref)) {
{
if (i >= iop->DiCount) if (i >= iop->DiCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsdi[i].op.di); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsdi[i].op.di);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1536,14 +1419,12 @@ static void load_backup() ...@@ -1536,14 +1419,12 @@ static void load_backup()
rsdo = calloc(sizeof(ini_sRestoreSig), iop->DoCount); rsdo = calloc(sizeof(ini_sRestoreSig), iop->DoCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Do, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Do, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Do, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Do, &aref, &aref)) {
{
if (i >= iop->DoCount) if (i >= iop->DoCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsdo[i].op.dox); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsdo[i].op.dox);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1557,14 +1438,12 @@ static void load_backup() ...@@ -1557,14 +1438,12 @@ static void load_backup()
rscoa = calloc(sizeof(pwr_tInt32*), iop->CoCount); rscoa = calloc(sizeof(pwr_tInt32*), iop->CoCount);
i = 0; i = 0;
for (sts = gdh_GetClassListAttrRef(pwr_cClass_Co, &aref); ODD(sts); for (sts = gdh_GetClassListAttrRef(pwr_cClass_Co, &aref); ODD(sts);
sts = gdh_GetNextAttrRef(pwr_cClass_Co, &aref, &aref)) sts = gdh_GetNextAttrRef(pwr_cClass_Co, &aref, &aref)) {
{
if (i >= iop->CoCount) if (i >= iop->CoCount)
break; break;
sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsco[i].op.co); sts = gdh_AttrRefToPointer(&aref, (pwr_tAddress*)&rsco[i].op.co);
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("gdh_AttrRefToPointer Iv, %m", sts); errh_Error("gdh_AttrRefToPointer Iv, %m", sts);
goto error; goto error;
} }
...@@ -1576,99 +1455,85 @@ static void load_backup() ...@@ -1576,99 +1455,85 @@ static void load_backup()
} }
sts = bck_LoadBackup(); sts = bck_LoadBackup();
if (EVEN(sts)) if (EVEN(sts)) {
{
errh_Error("bck_LoadBackup, %m", sts); errh_Error("bck_LoadBackup, %m", sts);
goto error; goto error;
} }
// Set stored ActualValue pointers // Set stored ActualValue pointers
for (i = 0; i < iop->AvCount; i++) for (i = 0; i < iop->AvCount; i++) {
{
rsav[i].op.av->ActualValue = rsav[i].actval_p.f; rsav[i].op.av->ActualValue = rsav[i].actval_p.f;
rsav[i].op.av->ValueIndex = rsav[i].validx; rsav[i].op.av->ValueIndex = rsav[i].validx;
} }
free(rsav); free(rsav);
for (i = 0; i < iop->DvCount; i++) for (i = 0; i < iop->DvCount; i++) {
{
rsdv[i].op.dv->ActualValue = rsdv[i].actval_p.b; rsdv[i].op.dv->ActualValue = rsdv[i].actval_p.b;
rsdv[i].op.dv->ValueIndex = rsdv[i].validx; rsdv[i].op.dv->ValueIndex = rsdv[i].validx;
} }
free(rsdv); free(rsdv);
for (i = 0; i < iop->IvCount; i++) for (i = 0; i < iop->IvCount; i++) {
{
rsiv[i].op.iv->ActualValue = rsiv[i].actval_p.i; rsiv[i].op.iv->ActualValue = rsiv[i].actval_p.i;
rsiv[i].op.iv->ValueIndex = rsiv[i].validx; rsiv[i].op.iv->ValueIndex = rsiv[i].validx;
} }
free(rsiv); free(rsiv);
for (i = 1; i < iop->ATvCount; i++) for (i = 1; i < iop->ATvCount; i++) {
{
rsatv[i].op.atv->ActualValue = rsatv[i].actval_p.at; rsatv[i].op.atv->ActualValue = rsatv[i].actval_p.at;
rsatv[i].op.atv->ValueIndex = rsatv[i].validx; rsatv[i].op.atv->ValueIndex = rsatv[i].validx;
} }
free(rsatv); free(rsatv);
for (i = 0; i < iop->DTvCount; i++) for (i = 0; i < iop->DTvCount; i++) {
{
rsdtv[i].op.dtv->ActualValue = rsdtv[i].actval_p.dt; rsdtv[i].op.dtv->ActualValue = rsdtv[i].actval_p.dt;
rsdtv[i].op.dtv->ValueIndex = rsdtv[i].validx; rsdtv[i].op.dtv->ValueIndex = rsdtv[i].validx;
} }
free(rsdtv); free(rsdtv);
for (i = 0; i < iop->SvCount; i++) for (i = 0; i < iop->SvCount; i++) {
{
rssv[i].op.sv->ActualValue = rssv[i].actval_p.str; rssv[i].op.sv->ActualValue = rssv[i].actval_p.str;
rssv[i].op.sv->ValueIndex = rssv[i].validx; rssv[i].op.sv->ValueIndex = rssv[i].validx;
} }
free(rssv); free(rssv);
for (i = 0; i < iop->AiCount; i++) for (i = 0; i < iop->AiCount; i++) {
{
rsai[i].op.ai->ActualValue = rsai[i].actval_p.f; rsai[i].op.ai->ActualValue = rsai[i].actval_p.f;
rsai[i].op.ai->ValueIndex = rsai[i].validx; rsai[i].op.ai->ValueIndex = rsai[i].validx;
} }
free(rsai); free(rsai);
for (i = 0; i < iop->AoCount; i++) for (i = 0; i < iop->AoCount; i++) {
{
rsao[i].op.ao->ActualValue = rsao[i].actval_p.f; rsao[i].op.ao->ActualValue = rsao[i].actval_p.f;
rsao[i].op.ao->ValueIndex = rsao[i].validx; rsao[i].op.ao->ValueIndex = rsao[i].validx;
} }
free(rsao); free(rsao);
for (i = 0; i < iop->IiCount; i++) for (i = 0; i < iop->IiCount; i++) {
{
rsii[i].op.ii->ActualValue = rsii[i].actval_p.i; rsii[i].op.ii->ActualValue = rsii[i].actval_p.i;
rsii[i].op.ii->ValueIndex = rsii[i].validx; rsii[i].op.ii->ValueIndex = rsii[i].validx;
} }
free(rsii); free(rsii);
for (i = 0; i < iop->IoCount; i++) for (i = 0; i < iop->IoCount; i++) {
{
rsio[i].op.io->ActualValue = rsio[i].actval_p.i; rsio[i].op.io->ActualValue = rsio[i].actval_p.i;
rsio[i].op.io->ValueIndex = rsio[i].validx; rsio[i].op.io->ValueIndex = rsio[i].validx;
} }
free(rsio); free(rsio);
for (i = 0; i < iop->DiCount; i++) for (i = 0; i < iop->DiCount; i++) {
{
rsdi[i].op.di->ActualValue = rsdi[i].actval_p.b; rsdi[i].op.di->ActualValue = rsdi[i].actval_p.b;
rsdi[i].op.di->ValueIndex = rsdi[i].validx; rsdi[i].op.di->ValueIndex = rsdi[i].validx;
} }
free(rsdi); free(rsdi);
for (i = 0; i < iop->DoCount; i++) for (i = 0; i < iop->DoCount; i++) {
{
rsdo[i].op.dox->ActualValue = rsdo[i].actval_p.b; rsdo[i].op.dox->ActualValue = rsdo[i].actval_p.b;
rsdo[i].op.dox->ValueIndex = rsdo[i].validx; rsdo[i].op.dox->ValueIndex = rsdo[i].validx;
} }
free(rsdo); free(rsdo);
for (i = 0; i < iop->CoCount; i++) for (i = 0; i < iop->CoCount; i++) {
{
rsco[i].op.co->RawValue = rsco[i].actval_p.i; rsco[i].op.co->RawValue = rsco[i].actval_p.i;
rsco[i].op.co->AbsValue = rscoa[i]; rsco[i].op.co->AbsValue = rscoa[i];
rsco[i].op.co->ValueIndex = rsco[i].validx; rsco[i].op.co->ValueIndex = rsco[i].validx;
...@@ -1676,38 +1541,32 @@ static void load_backup() ...@@ -1676,38 +1541,32 @@ static void load_backup()
free(rsco); free(rsco);
free(rscoa); free(rscoa);
for (i = 0; i < iop->AvCount; i++) for (i = 0; i < iop->AvCount; i++) {
{
pwr_tFloat32* ifp = gdh_TranslateRtdbPointer(iavp->Value[i]); pwr_tFloat32* ifp = gdh_TranslateRtdbPointer(iavp->Value[i]);
*ifp = avp->Value[i]; *ifp = avp->Value[i];
} }
for (i = 0; i < iop->DvCount; i++) for (i = 0; i < iop->DvCount; i++) {
{
pwr_tBoolean* ibp = gdh_TranslateRtdbPointer(idvp->Value[i]); pwr_tBoolean* ibp = gdh_TranslateRtdbPointer(idvp->Value[i]);
*ibp = dvp->Value[i]; *ibp = dvp->Value[i];
} }
for (i = 0; i < iop->IvCount; i++) for (i = 0; i < iop->IvCount; i++) {
{
pwr_tInt32* iip = gdh_TranslateRtdbPointer(iivp->Value[i]); pwr_tInt32* iip = gdh_TranslateRtdbPointer(iivp->Value[i]);
*iip = ivp->Value[i]; *iip = ivp->Value[i];
} }
for (i = 1; i < iop->ATvCount; i++) for (i = 1; i < iop->ATvCount; i++) {
{
pwr_tTime* iatp = gdh_TranslateRtdbPointer(iatvp->Value[i]); pwr_tTime* iatp = gdh_TranslateRtdbPointer(iatvp->Value[i]);
*iatp = atvp->Value[i]; *iatp = atvp->Value[i];
} }
for (i = 0; i < iop->DTvCount; i++) for (i = 0; i < iop->DTvCount; i++) {
{
pwr_tDeltaTime* idtp = gdh_TranslateRtdbPointer(idtvp->Value[i]); pwr_tDeltaTime* idtp = gdh_TranslateRtdbPointer(idtvp->Value[i]);
*idtp = dtvp->Value[i]; *idtp = dtvp->Value[i];
} }
for (i = 0; i < iop->SvCount; i++) for (i = 0; i < iop->SvCount; i++) {
{
char* istrp = gdh_TranslateRtdbPointer(isvp->Value[i]); char* istrp = gdh_TranslateRtdbPointer(isvp->Value[i]);
strncpy(istrp, svp->Value[i], 80); strncpy(istrp, svp->Value[i], 80);
} }
...@@ -1715,42 +1574,52 @@ static void load_backup() ...@@ -1715,42 +1574,52 @@ static void load_backup()
return; // Normal execution return; // Normal execution
error: error:
if (rsav != NULL) free(rsav); if (rsav != NULL)
if (rsdv != NULL) free(rsdv); free(rsav);
if (rsiv != NULL) free(rsiv); if (rsdv != NULL)
if (rsatv != NULL) free(rsatv); free(rsdv);
if (rsdtv != NULL) free(rsdtv); if (rsiv != NULL)
if (rssv != NULL) free(rssv); free(rsiv);
if (rsai != NULL) free(rsai); if (rsatv != NULL)
if (rsao != NULL) free(rsao); free(rsatv);
if (rsii != NULL) free(rsii); if (rsdtv != NULL)
if (rsio != NULL) free(rsio); free(rsdtv);
if (rsdi != NULL) free(rsdi); if (rssv != NULL)
if (rsdo != NULL) free(rsdo); free(rssv);
if (rsco != NULL) free(rsco); if (rsai != NULL)
if (rscoa != NULL) free(rscoa); free(rsai);
if (rsao != NULL)
free(rsao);
if (rsii != NULL)
free(rsii);
if (rsio != NULL)
free(rsio);
if (rsdi != NULL)
free(rsdi);
if (rsdo != NULL)
free(rsdo);
if (rsco != NULL)
free(rsco);
if (rscoa != NULL)
free(rscoa);
} }
static void ini_errl_cb(void* userdata, char* str, char severity, static void ini_errl_cb(void* userdata, char* str, char severity,
pwr_tStatus sts, int anix, int message_type) pwr_tStatus sts, int anix, int message_type)
{ {
ini_sContext* cp = (ini_sContext*)userdata; ini_sContext* cp = (ini_sContext*)userdata;
if (anix == 0 || !cp->np) if (anix == 0 || !cp->np)
return; return;
if (anix >= sizeof(cp->np->ProcStatus) / sizeof(cp->np->ProcStatus[0])) if (anix >= sizeof(cp->np->ProcStatus) / sizeof(cp->np->ProcStatus[0])) {
{
printf("Init: undefined anix %d\n", anix); printf("Init: undefined anix %d\n", anix);
return; return;
} }
switch (message_type) switch (message_type) {
{
case errh_eMsgType_Log: case errh_eMsgType_Log:
if (sts == 0) if (sts == 0) {
{ switch (severity) {
switch (severity)
{
case 'S': case 'S':
case 'I': case 'I':
sts = PWR__SRVINFO; sts = PWR__SRVINFO;
...@@ -1768,7 +1637,7 @@ static void ini_errl_cb(void* userdata, char* str, char severity, ...@@ -1768,7 +1637,7 @@ static void ini_errl_cb(void* userdata, char* str, char severity,
} }
cp->np->ProcMsgSeverity[anix - 1] = sts; cp->np->ProcMsgSeverity[anix - 1] = sts;
strncpy(cp->np->ProcMessage[anix - 1], &str[49], strncpy(cp->np->ProcMessage[anix - 1], &str[49],
sizeof(cp->np->ProcMessage[0])); sizeof(cp->np->ProcMessage[0]));
cp->np->ProcMessage[anix - 1][sizeof(cp->np->ProcMessage[0]) - 1] = 0; cp->np->ProcMessage[anix - 1][sizeof(cp->np->ProcMessage[0]) - 1] = 0;
break; break;
case errh_eMsgType_Status: case errh_eMsgType_Status:
...@@ -1789,13 +1658,11 @@ static void create_pidfile() ...@@ -1789,13 +1658,11 @@ static void create_pidfile()
pid_filename = strdup(RT_INI_PIDFILE); pid_filename = strdup(RT_INI_PIDFILE);
pid_fd = open(pid_filename, O_RDWR | O_CREAT, 0640); pid_fd = open(pid_filename, O_RDWR | O_CREAT, 0640);
if (pid_fd < 0) if (pid_fd < 0) {
{
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (lockf(pid_fd, F_TLOCK, 0) < 0) if (lockf(pid_fd, F_TLOCK, 0) < 0) {
{
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -1853,10 +1720,9 @@ static void daemonize() ...@@ -1853,10 +1720,9 @@ static void daemonize()
act.sa_sigaction = handle_signal; act.sa_sigaction = handle_signal;
act.sa_flags |= SA_SIGINFO; act.sa_flags |= SA_SIGINFO;
if ((sigemptyset(&act.sa_mask) == -1) || if ((sigemptyset(&act.sa_mask) == -1)
(sigaction(SIGTERM, &act, NULL) == -1) || || (sigaction(SIGTERM, &act, NULL) == -1)
(sigaction(SIGHUP, &act, NULL) == -1)) || (sigaction(SIGHUP, &act, NULL) == -1)) {
{
perror("Could not set up signal handlers for rt_ini"); perror("Could not set up signal handlers for rt_ini");
} }
} }
...@@ -1868,30 +1734,26 @@ void handle_signal(int sig, siginfo_t* si, void* ctx) ...@@ -1868,30 +1734,26 @@ void handle_signal(int sig, siginfo_t* si, void* ctx)
{ {
ini_sContext* cp = (ini_sContext*)ctx; ini_sContext* cp = (ini_sContext*)ctx;
switch (sig) switch (sig) {
{
case SIGTERM: case SIGTERM:
errh_LogInfo(&cp->log, "SIGNAL CAUGHT (%d). Exiting!\n", sig, errh_LogInfo(
cp->node.bodySize); &cp->log, "SIGNAL CAUGHT (%d). Exiting!\n", sig, cp->node.bodySize);
stop(cp); stop(cp);
if (cp->flags.b.daemonize) if (cp->flags.b.daemonize) {
{ if (pid_fd != -1) {
if (pid_fd != -1)
{
lockf(pid_fd, F_ULOCK, 0); lockf(pid_fd, F_ULOCK, 0);
close(pid_fd); close(pid_fd);
} }
if (pid_filename != NULL) if (pid_filename != NULL) {
{
unlink(pid_filename); unlink(pid_filename);
} }
} }
break; break;
case SIGHUP: case SIGHUP:
errh_LogInfo(&cp->log, "SIGNAL CAUGHT (%d). Restarting!\n", sig, errh_LogInfo(
cp->node.bodySize); &cp->log, "SIGNAL CAUGHT (%d). Restarting!\n", sig, cp->node.bodySize);
// TODO restart :) // TODO restart :)
break; break;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment