mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-10-14 10:27:12 +08:00
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:
@@ -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;
|
||||
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user