rtemsbsd: Add call to program with a data restore

This adds the rtems_bsd_program_call_main_width_data_restore function.
This commit is contained in:
Christian Mauderer
2016-07-15 11:39:48 +02:00
parent fa43d6a7ea
commit 3d91340868
3 changed files with 62 additions and 0 deletions

View File

@@ -53,6 +53,11 @@ int
rtems_bsd_program_call_main(const char *name, int (*main)(int, char **),
int argc, char **argv);
int
rtems_bsd_program_call_main_with_data_restore(const char *name,
int (*main)(int, char **), int argc, char **argv,
const void *data_buf, const size_t data_size);
void
rtems_bsd_program_exit(int exit_code) __dead2;

View File

@@ -200,6 +200,29 @@ rtems_bsd_program_call_main(const char *name, int (*main)(int, char **),
return exit_code;
}
int
rtems_bsd_program_call_main_with_data_restore(const char *name,
int (*main)(int, char **), int argc, char **argv,
const void *data_buf, const size_t data_size)
{
int exit_code = EXIT_FAILURE;
void *savebuf;
savebuf = malloc(data_size, M_TEMP, 0);
if(savebuf == NULL) {
errno = ENOMEM;
exit_code = EXIT_FAILURE;
} else {
memcpy(savebuf, data_buf, data_size);
exit_code = rtems_bsd_program_call_main(name, main, argc,
argv);
memcpy(data_buf, savebuf, data_size);
free(savebuf, M_TEMP);
}
return exit_code;
}
static struct mtx program_mtx;
MTX_SYSINIT(rtems_bsd_program, &program_mtx, "BSD program", MTX_DEF);