Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
proview
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Esteban Blanc
proview
Commits
3e810925
Commit
3e810925
authored
Nov 07, 2018
by
Christoffer Ackelman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed the broken yes-no prompt in rt_ini.
parent
e8c64073
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
230 additions
and
368 deletions
+230
-368
src/exe/rt_ini/src/rt_ini.c
src/exe/rt_ini/src/rt_ini.c
+230
-368
No files found.
src/exe/rt_ini/src/rt_ini.c
View file @
3e810925
...
...
@@ -84,14 +84,16 @@ static pwr_tStatus terminate();
static
pwr_tStatus
start
(
ini_sContext
*
cp
);
static
void
usage
(
char
*
);
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
);
static
int
pid_fd
=
-
1
;
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
)
{
...
...
@@ -104,27 +106,22 @@ int main(int argc, char** argv)
ver_WriteVersionInfo
(
"ProviewR Runtime Environment"
);
if
(
cp
->
flags
.
b
.
restart
)
{
printf
(
"test
\n
"
);
if
(
cp
->
flags
.
b
.
restart
)
{
sts
=
interactive
(
argc
,
argv
,
cp
);
}
else
if
(
cp
->
flags
.
b
.
stop
)
{
}
else
if
(
cp
->
flags
.
b
.
stop
)
{
sts
=
stop
(
cp
);
}
else
{
}
else
{
// Now lets daemonize if asked to
if
(
cp
->
flags
.
b
.
daemonize
)
{
if
(
cp
->
flags
.
b
.
daemonize
)
{
daemonize
();
}
sts
=
start
(
cp
);
// Now lets create the pid file before starting our endless event loop
if
(
cp
->
flags
.
b
.
daemonize
)
{
if
(
cp
->
flags
.
b
.
daemonize
)
{
create_pidfile
();
}
...
...
@@ -149,8 +146,7 @@ static pwr_tStatus start(ini_sContext* cp)
strcpy
(
console
,
cp
->
console
);
if
((
fd
=
open
(
console
,
O_APPEND
|
O_WRONLY
))
==
-
1
)
errl_Init
(
NULL
,
ini_errl_cb
,
cp
);
else
{
else
{
close
(
fd
);
errl_Init
(
console
,
ini_errl_cb
,
cp
);
}
...
...
@@ -169,10 +165,9 @@ static pwr_tStatus start(ini_sContext* cp)
ini_CheckNode
(
&
sts
,
cp
);
cp
->
me
=
tree_Find
(
&
sts
,
cp
->
nid_t
,
&
cp
->
node
.
nid
);
if
(
cp
->
me
==
NULL
)
{
errh_LogFatal
(
&
cp
->
log
,
"Cannot find my own node in %s
\n
"
,
cp
->
nodefile
.
name
);
if
(
cp
->
me
==
NULL
)
{
errh_LogFatal
(
&
cp
->
log
,
"Cannot find my own node in %s
\n
"
,
cp
->
nodefile
.
name
);
exit
(
QCOM__WEIRD
);
}
...
...
@@ -188,10 +183,8 @@ static pwr_tStatus start(ini_sContext* cp)
ini_BuildNode
(
&
sts
,
cp
);
if
(
cp
->
np
!=
NULL
)
{
if
(
cp
->
np
->
ErrLogTerm
[
0
]
!=
'\0'
)
{
if
(
cp
->
np
!=
NULL
)
{
if
(
cp
->
np
->
ErrLogTerm
[
0
]
!=
'\0'
)
{
errh_LogInfo
(
&
cp
->
log
,
"Setting log terminal to: %s"
,
cp
->
np
->
ErrLogTerm
);
errl_SetTerm
(
cp
->
np
->
ErrLogTerm
);
}
...
...
@@ -235,8 +228,7 @@ static pwr_tStatus start(ini_sContext* cp)
qini_BuildDb
(
&
sts
,
cp
->
nid_t
,
cp
->
me
,
NULL
,
cp
->
busid
);
sts
=
redu_get_initial_state
(
cp
->
nodename
,
cp
->
busid
,
&
state
);
if
(
ODD
(
sts
))
{
if
(
ODD
(
sts
))
{
cp
->
np
->
RedundancyState
=
state
;
qcom_SetRedundancyState
(
state
);
}
...
...
@@ -254,28 +246,26 @@ static pwr_tStatus start(ini_sContext* cp)
net_Connect
(
&
sts
,
&
gdbroot
->
my_aid
,
&
gdbroot
->
my_qid
,
NULL
,
"pwr_ini"
);
/*if (!qcom_Init(&sts, 0)) {*/
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_LogFatal
(
&
cp
->
log
,
"net_Connect, %m"
,
sts
);
exit
(
sts
);
}
qcom_SignalOr
(
&
sts
,
&
qcom_cQini
,
ini_mEvent_newPlcInit
|
ini_mEvent_newPlcStart
);
qcom_SignalOr
(
&
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_ProcStart
);
ini_ProcIter
(
&
sts
,
cp
,
proc_mProcess_user
,
0
,
ini_ProcPrio
);
qcom_CreateQ
(
&
sts
,
&
cp
->
eventQ
,
NULL
,
"iniEvent"
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_LogFatal
(
&
cp
->
log
,
"qcom_CreateQ, %m"
,
sts
);
exit
(
sts
);
}
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
);
if
(
EVEN
(
sts
)
&&
sts
!=
INI__FILE
)
...
...
@@ -300,28 +290,24 @@ static pwr_tStatus interactive(int argc, char** argv, ini_sContext* cp)
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
);
exit
(
sts
);
}
qcom_CreateQ
(
&
sts
,
&
cp
->
myQ
,
NULL
,
"pwr_ini_restart"
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_LogFatal
(
&
cp
->
log
,
"qcom_CreateQ, %m"
,
sts
);
exit
(
sts
);
}
for
(
i
=
0
,
totlen
=
0
;
i
<
argc
;
i
++
)
{
for
(
i
=
0
,
totlen
=
0
;
i
<
argc
;
i
++
)
{
len
=
strlen
(
argv
[
i
]);
totlen
+=
1
+
len
;
errh_LogInfo
(
&
cp
->
log
,
"argv[%d]: %d
\"
%s
\"
"
,
i
,
len
,
argv
[
i
]);
}
bp
=
malloc
(
totlen
);
for
(
i
=
0
,
sp
=
bp
;
i
<
argc
;
i
++
)
{
for
(
i
=
0
,
sp
=
bp
;
i
<
argc
;
i
++
)
{
len
=
strlen
(
argv
[
i
]);
memcpy
(
sp
,
argv
[
i
],
len
+
1
);
sp
+=
len
+
1
;
...
...
@@ -338,18 +324,14 @@ static pwr_tStatus interactive(int argc, char** argv, ini_sContext* cp)
qcom_Put
(
&
sts
,
&
qid
,
&
put
);
while
(
1
)
{
while
(
1
)
{
char
*
s
;
get
.
data
=
NULL
;
s
=
qcom_Get
(
&
sts
,
&
cp
->
myQ
,
&
get
,
100000
);
if
(
sts
==
QCOM__TMO
&&
sts
==
QCOM__QEMPTY
)
{
if
(
sts
==
QCOM__TMO
&&
sts
==
QCOM__QEMPTY
)
{
break
;
}
else
if
(
s
!=
NULL
)
{
}
else
if
(
s
!=
NULL
)
{
printf
(
"%s
\n
"
,
s
);
qcom_Free
(
NULL
,
s
);
}
...
...
@@ -374,8 +356,7 @@ static pwr_tStatus stop(ini_sContext* cp)
// errh_Interactive();
if
(
!
qcom_Init
(
&
sts
,
0
,
"pwr_ini_stop"
))
{
if
(
!
qcom_Init
(
&
sts
,
0
,
"pwr_ini_stop"
))
{
exit
(
sts
);
}
...
...
@@ -470,12 +451,12 @@ static pwr_tStatus restart(ini_sContext* cp)
qcom_SignalOr
(
&
sts
,
&
qcom_cQini
,
ini_mEvent_newPlcInit
);
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"
);
qcom_SignalAnd
(
&
sts
,
&
qcom_cQini
,
~
cp
->
plc_sigmask
);
qcom_SignalOr
(
&
sts
,
&
qcom_cQini
,
ini_mEvent_oldPlcStop
);
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
);
ini_UpdateBodies
(
&
sts
,
cp
,
0
);
...
...
@@ -483,15 +464,13 @@ static pwr_tStatus restart(ini_sContext* cp)
qcom_SignalAnd
(
&
sts
,
&
qcom_cQini
,
~
cp
->
plc_sigmask
);
qcom_SignalOr
(
&
sts
,
&
qcom_cQini
,
ini_mEvent_newPlcStart
);
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"
);
qcom_SignalOr
(
&
sts
,
&
qcom_cQini
,
ini_mEvent_swapDone
);
for
(
pp
=
lst_Succ
(
NULL
,
&
cp
->
proc_lh
,
&
pl
);
pp
!=
NULL
;
pp
=
lst_Succ
(
NULL
,
pl
,
&
pl
))
{
if
(
pp
->
flags
.
m
&
ini_mProc_plc
&&
pp
->
objectp
)
{
pp
=
lst_Succ
(
NULL
,
pl
,
&
pl
))
{
if
(
pp
->
flags
.
m
&
ini_mProc_plc
&&
pp
->
objectp
)
{
pwr_sClass_PlcProcess
*
plc
=
pp
->
objectp
;
time_GetTime
(
&
plc
->
LastChgTime
);
...
...
@@ -559,62 +538,48 @@ static pwr_tStatus terminate()
static
int
ask_yes_no
(
char
*
text
)
{
printf
(
"%s ? (y|n) [n]: "
,
text
);
printf
(
"n
\n
"
);
return
0
;
char
ans
;
printf
(
"%s ? [Y/n]: "
,
text
);
scanf
(
"%c"
,
&
ans
);
return
(
ans
==
'y'
||
ans
==
'Y'
);
}
static
int
checkErrors
(
ini_sContext
*
cp
)
{
if
(
cp
->
warnings
==
0
&&
cp
->
errors
==
0
&&
cp
->
fatals
==
0
)
return
1
;
if
(
cp
->
fatals
>
0
)
{
if
(
cp
->
fatals
>
0
)
{
errh_LogFatal
(
&
cp
->
log
,
"Found %d warning(s), %d error(s) and %d fatal error(s)"
,
cp
->
warnings
,
cp
->
errors
,
cp
->
fatals
);
if
(
cp
->
flags
.
b
.
ignoreFatal
)
{
errh_LogInfo
(
&
cp
->
log
,
"Ignoring fatal errors, errors and warnings, continued..."
);
"Found %d warning(s), %d error(s) and %d fatal error(s)"
,
cp
->
warnings
,
cp
->
errors
,
cp
->
fatals
);
if
(
cp
->
flags
.
b
.
ignoreFatal
)
{
errh_LogInfo
(
&
cp
->
log
,
"Ignoring fatal errors, errors and warnings, continued..."
);
return
1
;
}
else
{
}
else
{
return
ask_yes_no
(
"Do you want to continue"
);
}
}
if
(
cp
->
errors
>
0
)
{
if
(
cp
->
errors
>
0
)
{
errh_LogError
(
&
cp
->
log
,
"Found %d warning(s), %d error(s) and %d fatal error(s)"
,
cp
->
warnings
,
cp
->
errors
,
cp
->
fatals
);
if
(
cp
->
flags
.
b
.
ignoreError
)
{
"Found %d warning(s), %d error(s) and %d fatal error(s)"
,
cp
->
warnings
,
cp
->
errors
,
cp
->
fatals
);
if
(
cp
->
flags
.
b
.
ignoreError
)
{
errh_LogInfo
(
&
cp
->
log
,
"Ignoring errors and warnings, continued..."
);
return
1
;
}
else
{
}
else
{
return
ask_yes_no
(
"Do you want to continue"
);
}
}
if
(
cp
->
warnings
>
0
)
{
if
(
cp
->
warnings
>
0
)
{
errh_LogWarning
(
&
cp
->
log
,
"Found %d warning(s), %d error(s) and %d fatal error(s)"
,
cp
->
warnings
,
cp
->
errors
,
cp
->
fatals
);
if
(
cp
->
flags
.
b
.
ignoreWarning
)
{
"Found %d warning(s), %d error(s) and %d fatal error(s)"
,
cp
->
warnings
,
cp
->
errors
,
cp
->
fatals
);
if
(
cp
->
flags
.
b
.
ignoreWarning
)
{
errh_LogInfo
(
&
cp
->
log
,
"Ignoring warnings, continued..."
);
return
1
;
}
else
{
}
else
{
return
ask_yes_no
(
"Do you want to continue"
);
}
}
...
...
@@ -627,31 +592,25 @@ static ini_sContext* createContext(int argc, char** argv)
ini_sContext
*
cp
;
pwr_tStatus
sts
;
if
(
argc
>
1
&&
streq
(
argv
[
1
],
"--version"
))
{
if
(
argc
>
1
&&
streq
(
argv
[
1
],
"--version"
))
{
system
(
"cat $pwr_exe/rt_version.dat"
);
exit
(
1
);
}
if
(
!
(
cp
=
ini_CreateContext
(
&
sts
)))
{
if
(
!
(
cp
=
ini_CreateContext
(
&
sts
)))
{
fprintf
(
stderr
,
"%s: could not allocate context
\n
"
,
argv
[
0
]);
exit
(
1
);
}
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
if
(
argv
[
i
][
0
]
==
'-'
)
{
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
if
(
argv
[
i
][
0
]
==
'-'
)
{
int
i_incr
=
0
;
for
(
j
=
1
;
argv
[
i
][
j
]
!=
0
&&
argv
[
i
][
j
]
!=
' '
&&
argv
[
i
][
j
]
!=
' '
;
j
++
)
{
switch
(
argv
[
i
][
j
])
{
argv
[
i
][
j
]
!=
0
&&
argv
[
i
][
j
]
!=
' '
&&
argv
[
i
][
j
]
!=
' '
;
j
++
)
{
switch
(
argv
[
i
][
j
])
{
case
'a'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -661,9 +620,8 @@ static ini_sContext* createContext(int argc, char** argv)
i_incr
=
1
;
break
;
case
'b'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -671,9 +629,8 @@ static ini_sContext* createContext(int argc, char** argv)
strcpy
(
cp
->
bootfile
.
name
,
argv
[
i
+
1
]);
break
;
case
'c'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -682,9 +639,8 @@ static ini_sContext* createContext(int argc, char** argv)
i_incr
=
1
;
break
;
case
'd'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -699,9 +655,8 @@ static ini_sContext* createContext(int argc, char** argv)
cp
->
flags
.
b
.
ignoreFatal
=
1
;
break
;
case
'h'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -714,9 +669,8 @@ static ini_sContext* createContext(int argc, char** argv)
cp
->
flags
.
b
.
interactive
=
1
;
break
;
case
'n'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -726,9 +680,8 @@ static ini_sContext* createContext(int argc, char** argv)
i_incr
=
1
;
break
;
case
'p'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -741,9 +694,8 @@ static ini_sContext* createContext(int argc, char** argv)
i_incr
=
1
;
break
;
case
'q'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -764,9 +716,8 @@ static ini_sContext* createContext(int argc, char** argv)
cp
->
flags
.
b
.
ignoreWarning
=
1
;
break
;
case
'A'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -779,9 +730,8 @@ static ini_sContext* createContext(int argc, char** argv)
cp
->
flags
.
b
.
daemonize
=
1
;
break
;
case
'P'
:
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
if
(
i
+
1
>=
argc
||
!
(
argv
[
i
][
j
+
1
]
==
' '
||
argv
[
i
][
j
+
1
]
!=
' '
))
{
usage
(
argv
[
0
]);
exit
(
0
);
}
...
...
@@ -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 "
"arg -s arg -vwA arg -H arg
\n
"
,
name
);
name
);
fprintf
(
stderr
,
" -? : give help
\n
"
);
fprintf
(
stderr
,
" -a arg: use 'arg' as application file
\n
"
);
fprintf
(
stderr
,
" -b arg: use 'arg' as boot file
\n
"
);
...
...
@@ -828,7 +778,7 @@ static void usage(char* name)
fprintf
(
stderr
,
" -w : ignore warnings
\n
"
);
fprintf
(
stderr
,
" -A arg: use 'arg' as alias file
\n
"
);
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
,
" -H arg: use 'arg' as hostname
\n
"
);
fprintf
(
stderr
,
" -N arg: use 'arg' as nodename
\n
"
);
...
...
@@ -844,18 +794,15 @@ static void logChanges(ini_sContext* cp)
int
cre
,
upd
,
upd_io
;
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
;
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
);
cre
++
;
}
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
);
if
(
iop
->
flags
.
b
.
father
)
printf
(
"father, "
);
...
...
@@ -875,8 +822,7 @@ static void logChanges(ini_sContext* cp)
upd_io
++
;
}
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
);
if
(
iop
->
flags
.
b
.
father
)
printf
(
"father, "
);
...
...
@@ -896,7 +842,7 @@ static void logChanges(ini_sContext* cp)
upd
++
;
}
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)
ivol_sVolume
*
vp
;
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
;
vp
=
lst_Succ
(
NULL
,
vl
,
&
vl
))
errh_LogInfo
(
&
cp
->
log
,
"Volume: %s, id: %d, cardinality: %d, bodysize: %d
\n
"
,
vp
->
v
olume
.
name
,
vp
->
v
id
,
vp
->
volume
.
cardinality
,
vp
->
volume
.
rbodySize
);
errh_LogInfo
(
&
cp
->
log
,
"Volume: %s, id: %d, cardinality: %d, bodysize: %d
\n
"
,
vp
->
volume
.
name
,
vp
->
vid
,
vp
->
volume
.
cardinality
,
vp
->
volume
.
rbodySize
);
}
static
pwr_tStatus
events
(
ini_sContext
*
cp
)
...
...
@@ -928,49 +874,42 @@ static pwr_tStatus events(ini_sContext* cp)
cp
->
myQ
.
nid
=
0
;
qcom_CreateQ
(
&
sts
,
&
cp
->
myQ
,
NULL
,
"events"
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_LogFatal
(
&
cp
->
log
,
"qcom_CreateQ, %m"
,
sts
);
exit
(
sts
);
}
for
(;;)
{
for
(;;)
{
int
status
;
get
.
data
=
NULL
;
qcom_Get
(
&
sts
,
&
cp
->
myQ
,
&
get
,
tmo_ms
);
/* 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
();
return
sts
;
}
/* 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
;
char
**
argv
,
*
s
;
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
);
s
+=
len
+
1
;
totlen
+=
len
+
1
;
}
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
);
argv
[
i
]
=
s
;
s
+=
len
+
1
;
}
ncp
=
createContext
(
argc
,
argv
);
if
(
ncp
!=
NULL
)
{
if
(
ncp
!=
NULL
)
{
ncp
->
log
.
put
.
type
.
b
=
10
;
ncp
->
log
.
put
.
type
.
s
=
1
;
ncp
->
log
.
send
=
1
;
...
...
@@ -994,12 +933,10 @@ static pwr_tStatus events(ini_sContext* cp)
break
;
for
(
pp
=
lst_Succ
(
NULL
,
&
cp
->
proc_lh
,
&
pl
);
pp
!=
NULL
;
pp
=
lst_Succ
(
NULL
,
pl
,
&
pl
))
{
if
(
pp
->
proc
.
pid
==
pid
)
{
pp
=
lst_Succ
(
NULL
,
pl
,
&
pl
))
{
if
(
pp
->
proc
.
pid
==
pid
)
{
errh_LogInfo
(
&
cp
->
log
,
"Process %s exited with status %d"
,
pp
->
proc
.
name
,
status
);
pp
->
proc
.
name
,
status
);
break
;
}
}
...
...
@@ -1059,218 +996,186 @@ static void load_backup()
pwr_sAttrRef
aref
;
sts
=
io_get_iohandler_object
(
&
iop
,
NULL
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"io_get_iohandler_object, %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
avp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &avp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
iavp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &iavp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
dvp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &dvp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
idvp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &idvp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
ivp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &ivp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
atvp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &atvp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
dtvp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &dtvp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
svp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &svp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
iivp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &iivp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
iatvp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &iatvp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
idtvp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &idtvp), %m"
,
sts
);
return
;
}
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
);
return
;
}
sts
=
gdh_ObjidToPointer
(
oid
,
(
void
*
)
&
isvp
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_ObjidToPointer(oid, (void *) &isvp), %m"
,
sts
);
return
;
}
for
(
i
=
0
;
i
<
iop
->
AvCount
;
i
++
)
{
for
(
i
=
0
;
i
<
iop
->
AvCount
;
i
++
)
{
pwr_tFloat32
*
ifp
=
gdh_TranslateRtdbPointer
(
iavp
->
Value
[
i
]);
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
]);
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
]);
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
]);
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
]);
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
]);
strncpy
(
svp
->
Value
[
i
],
istrp
,
sizeof
(
svp
->
Value
[
0
]));
}
typedef
struct
{
typedef
struct
{
union
{
pwr_tFloat32
*
f
;
pwr_tInt32
*
i
;
...
...
@@ -1316,14 +1221,12 @@ static void load_backup()
rsav
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
AvCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsav
[
i
].
op
.
av
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1336,14 +1239,12 @@ static void load_backup()
rsdv
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
DvCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsdv
[
i
].
op
.
dv
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1356,14 +1257,12 @@ static void load_backup()
rsiv
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
IvCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsiv
[
i
].
op
.
iv
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1376,14 +1275,12 @@ static void load_backup()
rsatv
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
ATvCount
);
i
=
1
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsatv
[
i
].
op
.
atv
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer ATv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1396,14 +1293,12 @@ static void load_backup()
rsdtv
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
DTvCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsdtv
[
i
].
op
.
dtv
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer DTv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1416,14 +1311,12 @@ static void load_backup()
rssv
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
SvCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rssv
[
i
].
op
.
sv
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Sv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1436,14 +1329,12 @@ static void load_backup()
rsai
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
AiCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsai
[
i
].
op
.
ai
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1456,14 +1347,12 @@ static void load_backup()
rsao
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
AoCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsao
[
i
].
op
.
ao
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1476,14 +1365,12 @@ static void load_backup()
rsii
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
IiCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsii
[
i
].
op
.
ii
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1496,14 +1383,12 @@ static void load_backup()
rsio
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
IoCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsio
[
i
].
op
.
io
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1516,14 +1401,12 @@ static void load_backup()
rsdi
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
DiCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsdi
[
i
].
op
.
di
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1536,14 +1419,12 @@ static void load_backup()
rsdo
=
calloc
(
sizeof
(
ini_sRestoreSig
),
iop
->
DoCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsdo
[
i
].
op
.
dox
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1557,14 +1438,12 @@ static void load_backup()
rscoa
=
calloc
(
sizeof
(
pwr_tInt32
*
),
iop
->
CoCount
);
i
=
0
;
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
)
break
;
sts
=
gdh_AttrRefToPointer
(
&
aref
,
(
pwr_tAddress
*
)
&
rsco
[
i
].
op
.
co
);
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"gdh_AttrRefToPointer Iv, %m"
,
sts
);
goto
error
;
}
...
...
@@ -1576,99 +1455,85 @@ static void load_backup()
}
sts
=
bck_LoadBackup
();
if
(
EVEN
(
sts
))
{
if
(
EVEN
(
sts
))
{
errh_Error
(
"bck_LoadBackup, %m"
,
sts
);
goto
error
;
}
// 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
->
ValueIndex
=
rsav
[
i
].
validx
;
}
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
->
ValueIndex
=
rsdv
[
i
].
validx
;
}
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
->
ValueIndex
=
rsiv
[
i
].
validx
;
}
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
->
ValueIndex
=
rsatv
[
i
].
validx
;
}
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
->
ValueIndex
=
rsdtv
[
i
].
validx
;
}
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
->
ValueIndex
=
rssv
[
i
].
validx
;
}
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
->
ValueIndex
=
rsai
[
i
].
validx
;
}
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
->
ValueIndex
=
rsao
[
i
].
validx
;
}
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
->
ValueIndex
=
rsii
[
i
].
validx
;
}
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
->
ValueIndex
=
rsio
[
i
].
validx
;
}
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
->
ValueIndex
=
rsdi
[
i
].
validx
;
}
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
->
ValueIndex
=
rsdo
[
i
].
validx
;
}
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
->
AbsValue
=
rscoa
[
i
];
rsco
[
i
].
op
.
co
->
ValueIndex
=
rsco
[
i
].
validx
;
...
...
@@ -1676,38 +1541,32 @@ static void load_backup()
free
(
rsco
);
free
(
rscoa
);
for
(
i
=
0
;
i
<
iop
->
AvCount
;
i
++
)
{
for
(
i
=
0
;
i
<
iop
->
AvCount
;
i
++
)
{
pwr_tFloat32
*
ifp
=
gdh_TranslateRtdbPointer
(
iavp
->
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
]);
*
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
]);
*
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
]);
*
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
]);
*
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
]);
strncpy
(
istrp
,
svp
->
Value
[
i
],
80
);
}
...
...
@@ -1715,42 +1574,52 @@ static void load_backup()
return
;
// Normal execution
error:
if
(
rsav
!=
NULL
)
free
(
rsav
);
if
(
rsdv
!=
NULL
)
free
(
rsdv
);
if
(
rsiv
!=
NULL
)
free
(
rsiv
);
if
(
rsatv
!=
NULL
)
free
(
rsatv
);
if
(
rsdtv
!=
NULL
)
free
(
rsdtv
);
if
(
rssv
!=
NULL
)
free
(
rssv
);
if
(
rsai
!=
NULL
)
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
);
if
(
rsav
!=
NULL
)
free
(
rsav
);
if
(
rsdv
!=
NULL
)
free
(
rsdv
);
if
(
rsiv
!=
NULL
)
free
(
rsiv
);
if
(
rsatv
!=
NULL
)
free
(
rsatv
);
if
(
rsdtv
!=
NULL
)
free
(
rsdtv
);
if
(
rssv
!=
NULL
)
free
(
rssv
);
if
(
rsai
!=
NULL
)
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
,
pwr_tStatus
sts
,
int
anix
,
int
message_type
)
pwr_tStatus
sts
,
int
anix
,
int
message_type
)
{
ini_sContext
*
cp
=
(
ini_sContext
*
)
userdata
;
if
(
anix
==
0
||
!
cp
->
np
)
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
);
return
;
}
switch
(
message_type
)
{
switch
(
message_type
)
{
case
errh_eMsgType_Log
:
if
(
sts
==
0
)
{
switch
(
severity
)
{
if
(
sts
==
0
)
{
switch
(
severity
)
{
case
'S'
:
case
'I'
:
sts
=
PWR__SRVINFO
;
...
...
@@ -1768,7 +1637,7 @@ static void ini_errl_cb(void* userdata, char* str, char severity,
}
cp
->
np
->
ProcMsgSeverity
[
anix
-
1
]
=
sts
;
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
;
break
;
case
errh_eMsgType_Status
:
...
...
@@ -1789,13 +1658,11 @@ static void create_pidfile()
pid_filename
=
strdup
(
RT_INI_PIDFILE
);
pid_fd
=
open
(
pid_filename
,
O_RDWR
|
O_CREAT
,
0640
);
if
(
pid_fd
<
0
)
{
if
(
pid_fd
<
0
)
{
exit
(
EXIT_FAILURE
);
}
if
(
lockf
(
pid_fd
,
F_TLOCK
,
0
)
<
0
)
{
if
(
lockf
(
pid_fd
,
F_TLOCK
,
0
)
<
0
)
{
exit
(
EXIT_FAILURE
);
}
...
...
@@ -1853,10 +1720,9 @@ static void daemonize()
act
.
sa_sigaction
=
handle_signal
;
act
.
sa_flags
|=
SA_SIGINFO
;
if
((
sigemptyset
(
&
act
.
sa_mask
)
==
-
1
)
||
(
sigaction
(
SIGTERM
,
&
act
,
NULL
)
==
-
1
)
||
(
sigaction
(
SIGHUP
,
&
act
,
NULL
)
==
-
1
))
{
if
((
sigemptyset
(
&
act
.
sa_mask
)
==
-
1
)
||
(
sigaction
(
SIGTERM
,
&
act
,
NULL
)
==
-
1
)
||
(
sigaction
(
SIGHUP
,
&
act
,
NULL
)
==
-
1
))
{
perror
(
"Could not set up signal handlers for rt_ini"
);
}
}
...
...
@@ -1868,30 +1734,26 @@ void handle_signal(int sig, siginfo_t* si, void* ctx)
{
ini_sContext
*
cp
=
(
ini_sContext
*
)
ctx
;
switch
(
sig
)
{
switch
(
sig
)
{
case
SIGTERM
:
errh_LogInfo
(
&
cp
->
log
,
"SIGNAL CAUGHT (%d). Exiting!
\n
"
,
sig
,
cp
->
node
.
bodySize
);
errh_LogInfo
(
&
cp
->
log
,
"SIGNAL CAUGHT (%d). Exiting!
\n
"
,
sig
,
cp
->
node
.
bodySize
);
stop
(
cp
);
if
(
cp
->
flags
.
b
.
daemonize
)
{
if
(
pid_fd
!=
-
1
)
{
if
(
cp
->
flags
.
b
.
daemonize
)
{
if
(
pid_fd
!=
-
1
)
{
lockf
(
pid_fd
,
F_ULOCK
,
0
);
close
(
pid_fd
);
}
if
(
pid_filename
!=
NULL
)
{
if
(
pid_filename
!=
NULL
)
{
unlink
(
pid_filename
);
}
}
break
;
case
SIGHUP
:
errh_LogInfo
(
&
cp
->
log
,
"SIGNAL CAUGHT (%d). Restarting!
\n
"
,
sig
,
cp
->
node
.
bodySize
);
errh_LogInfo
(
&
cp
->
log
,
"SIGNAL CAUGHT (%d). Restarting!
\n
"
,
sig
,
cp
->
node
.
bodySize
);
// TODO restart :)
break
;
default:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment