|
@@ -204,11 +204,15 @@ bool_t kexec_done(const kexec_t *exec)
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
bool_t kexec_retcode(const kexec_t *exec, int *status)
|
|
|
{
|
|
|
+ kexec_contexts_node_t *iter = NULL;
|
|
|
+ kcontext_t *context = NULL;
|
|
|
+
|
|
|
assert(exec);
|
|
|
if (!exec)
|
|
|
return BOOL_FALSE;
|
|
@@ -219,9 +223,18 @@ bool_t kexec_retcode(const kexec_t *exec, int *status)
|
|
|
if (!kexec_done(exec))
|
|
|
return BOOL_FALSE;
|
|
|
|
|
|
- if (status)
|
|
|
- *status = kcontext_retcode(
|
|
|
- (kcontext_t *)faux_list_data(faux_list_head(exec->contexts)));
|
|
|
+ if (!status)
|
|
|
+ return BOOL_TRUE;
|
|
|
+
|
|
|
+ *status = 0;
|
|
|
+ iter = kexec_contexts_iter(exec);
|
|
|
+ while ((context = kexec_contexts_each(&iter))) {
|
|
|
+ int retcode = kcontext_retcode(context);
|
|
|
+ if (retcode != 0) {
|
|
|
+ *status = retcode;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
return BOOL_TRUE;
|
|
|
}
|