diff options
-rw-r--r-- | rtemsbsd/include/machine/rtems-bsd-program.h | 11 | ||||
-rw-r--r-- | rtemsbsd/rtems/rtems-bsd-program.c | 13 |
2 files changed, 24 insertions, 0 deletions
diff --git a/rtemsbsd/include/machine/rtems-bsd-program.h b/rtemsbsd/include/machine/rtems-bsd-program.h index b2e542e0..7c2837e7 100644 --- a/rtemsbsd/include/machine/rtems-bsd-program.h +++ b/rtemsbsd/include/machine/rtems-bsd-program.h @@ -56,6 +56,9 @@ rtems_bsd_program_call_main(const char *name, int (*main)(int, char **), void rtems_bsd_program_exit(int exit_code) __dead2; +void +rtems_bsd_program_error(const char *, ...) __attribute__ ((__format__ (__printf__, 1, 2))); + const char * rtems_bsd_program_get_name(void); @@ -69,14 +72,22 @@ void rtems_bsd_program_unlock(void); #ifndef RTEMS_BSD_PROGRAM_NO_EXIT_WRAP + #undef exit #define exit(code) rtems_bsd_program_exit(code) #endif +#ifndef RTEMS_BSD_PROGRAM_NO_ERROR_WRAP + #undef error + #define error(fmt, ...) rtems_bsd_program_error(fmt, ## __VA_ARGS__) +#endif + #ifndef RTEMS_BSD_PROGRAM_NO_GETPROGNAME_WRAP + #undef getprogname #define getprogname() rtems_bsd_program_get_name() #endif #ifndef RTEMS_BSD_PROGRAM_NO_PRINTF_WRAP + #undef printf #define printf(...) fprintf(stdout, __VA_ARGS__) #endif diff --git a/rtemsbsd/rtems/rtems-bsd-program.c b/rtemsbsd/rtems/rtems-bsd-program.c index 8edd8f93..7b5920e2 100644 --- a/rtemsbsd/rtems/rtems-bsd-program.c +++ b/rtemsbsd/rtems/rtems-bsd-program.c @@ -52,6 +52,8 @@ #include <setjmp.h> #include <stdlib.h> +#include <machine/rtems-bsd-program.h> + struct rtems_bsd_program_control { void *context; int exit_code; @@ -116,6 +118,17 @@ rtems_bsd_program_exit(int exit_code) panic("unexpected BSD program exit"); } +void +rtems_bsd_program_error(const char *fmt, ...) +{ + va_list list; + va_start(list, fmt); + vfprintf(stderr, fmt, list); + fprintf(stderr, "\n"); + va_end(list); + rtems_bsd_program_exit(1); +} + const char * rtems_bsd_program_get_name(void) { |