Max has uploaded this change for review. ( https://gerrit.osmocom.org/12093
Change subject: Log: add stdout target ...................................................................... Log: add stdout target This is useful for code testing internal library functions which allows to automatically fail tests due to output mismatch. As a side-effect this also simplifies #if-#else logic due to both _stdout() and _stderr() now being simple wrappers around static function. No user-visible changes are introduced because stdout is ignored by vty code to avoid messing up vty output. Change-Id: Ia786361f5f687e43b27d87a45b4630bca58bcfe8 --- M include/osmocom/core/logging.h M src/logging.c M src/vty/logging_vty.c 3 files changed, 37 insertions(+), 7 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/93/12093/1 diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h index 295e5a8..4a835ff 100644 --- a/include/osmocom/core/logging.h +++ b/include/osmocom/core/logging.h @@ -218,6 +218,7 @@ LOG_TGT_TYPE_SYSLOG, /*!< syslog based logging */ LOG_TGT_TYPE_FILE, /*!< text file logging */ LOG_TGT_TYPE_STDERR, /*!< stderr logging */ + LOG_TGT_TYPE_STDOUT, /*!< stdout logging */ LOG_TGT_TYPE_STRRB, /*!< osmo_strrb-backed logging */ LOG_TGT_TYPE_GSMTAP, /*!< GSMTAP network logging */ }; @@ -361,6 +362,7 @@ struct log_target *log_target_create(void); void log_target_destroy(struct log_target *target); struct log_target *log_target_create_stderr(void); +struct log_target *log_target_create_stdout(void); struct log_target *log_target_create_file(const char *fname); struct log_target *log_target_create_syslog(const char *ident, int option, int facility); diff --git a/src/logging.c b/src/logging.c index 908ba54..31345d1 100644 --- a/src/logging.c +++ b/src/logging.c @@ -810,24 +810,45 @@ return target; } -/*! Create the STDERR log target - * \returns dynamically-allocated \ref log_target for STDERR */ -struct log_target *log_target_create_stderr(void) +static struct log_target *_log_target_create_std(FILE *out, enum log_target_type lt) { -/* since C89/C99 says stderr is a macro, we can safely do this! */ -#if !EMBEDDED && defined(stderr) +#if !EMBEDDED struct log_target *target; target = log_target_create(); if (!target) return NULL; - target->type = LOG_TGT_TYPE_STDERR; - target->tgt_file.out = stderr; + target->type = lt; + target->tgt_file.out = out; target->output = _file_output; return target; #else return NULL; +#endif +} + +/*! Create the STDOUT log target + * \returns dynamically-allocated \ref log_target for STDOUT */ +struct log_target *log_target_create_stdout(void) +{ +/* since C89/C99 says stdout is a macro, we can safely do this! */ +#if defined(stdout) + return _log_target_create_std(stdout, LOG_TGT_TYPE_STDOUT); +#else + return NULL; +#endif /* stdout */ +} + +/*! Create the STDERR log target + * \returns dynamically-allocated \ref log_target for STDERR */ +struct log_target *log_target_create_stderr(void) +{ +/* since C89/C99 says stderr is a macro, we can safely do this! */ +#if defined(stderr) + return _log_target_create_std(stderr, LOG_TGT_TYPE_STDERR); +#else + return NULL; #endif /* stderr */ } @@ -900,6 +921,10 @@ /* don't close stderr */ if (target->tgt_file.out != stderr) #endif +#ifdef stdout + /* don't close stdout */ + if (target->tgt_file.out != stdout) +#endif { fclose(target->tgt_file.out); target->tgt_file.out = NULL; diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c index f3e1419..e2d2b57 100644 --- a/src/vty/logging_vty.c +++ b/src/vty/logging_vty.c @@ -877,6 +877,9 @@ case LOG_TGT_TYPE_STDERR: vty_out(vty, "log stderr%s", VTY_NEWLINE); break; + case LOG_TGT_TYPE_STDOUT: + /* we don't support vty logging to stdout to avoid messing up vty prompt and user input */ + break; case LOG_TGT_TYPE_SYSLOG: #ifdef HAVE_SYSLOG_H vty_out(vty, "log syslog %s%s", -- To view, visit https://gerrit.osmocom.org/12093 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-MessageType: newchange Gerrit-Change-Id: Ia786361f5f687e43b27d87a45b4630bca58bcfe8 Gerrit-Change-Number: 12093 Gerrit-PatchSet: 1 Gerrit-Owner: Max <msur...@sysmocom.de>