summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2007-05-23 11:22:07 -0400
committerRay Strode <rstrode@redhat.com>2007-05-23 11:22:07 -0400
commitc8e7fc693c0f959f5ee26715908df5aa7e8a0eae (patch)
tree547f161f67d20ef27ed16bdd1de3e77cce4876da
parentb3dca3908969dc95f5bb555cf4c2714fe68f7aec (diff)
downloadplymouth-c8e7fc693c0f959f5ee26715908df5aa7e8a0eae.tar.gz
plymouth-c8e7fc693c0f959f5ee26715908df5aa7e8a0eae.tar.xz
plymouth-c8e7fc693c0f959f5ee26715908df5aa7e8a0eae.zip
add support for default error logging
This commit adds a convience macros, ply_error (), that will by default log error messages to the standard error. This commit also adds a new api for specifying a policy for determining when to automatically flush the log buffer.
-rw-r--r--src/ply-logger.c54
-rw-r--r--src/ply-logger.h31
2 files changed, 67 insertions, 18 deletions
diff --git a/src/ply-logger.c b/src/ply-logger.c
index 9cd5eed..24900d1 100644
--- a/src/ply-logger.c
+++ b/src/ply-logger.c
@@ -58,6 +58,8 @@ struct _ply_logger
char *buffer;
size_t buffer_size;
size_t buffer_capacity;
+
+ ply_logger_flush_policy_t flush_policy;
uint32_t is_enabled : 1;
uint32_t tracing_is_enabled : 1;
@@ -222,7 +224,7 @@ ply_logger_new (void)
logger = calloc (1, sizeof (ply_logger_t));
- logger->output_fd = STDOUT_FILENO;
+ logger->output_fd = -1;
logger->filename = NULL;
logger->is_enabled = true;
logger->tracing_is_enabled = false;
@@ -237,12 +239,31 @@ ply_logger_new (void)
ply_logger_t *
ply_logger_get_default (void)
{
- static ply_logger_t *ply_logger = NULL;
+ static ply_logger_t *logger = NULL;
+
+ if (logger == NULL)
+ {
+ logger = ply_logger_new ();
+ ply_logger_set_output_fd (logger, STDOUT_FILENO);
+ }
+
+ return logger;
+}
+
+ply_logger_t *
+ply_logger_get_error_default (void)
+{
+ static ply_logger_t *logger = NULL;
- if (ply_logger == NULL)
- ply_logger = ply_logger_new ();
+ if (logger == NULL)
+ {
+ logger = ply_logger_new ();
+ ply_logger_set_output_fd (logger, STDERR_FILENO);
+ ply_logger_set_flush_policy (logger,
+ PLY_LOGGER_FLUSH_POLICY_EVERY_TIME);
+ }
- return ply_logger;
+ return logger;
}
void
@@ -329,6 +350,23 @@ ply_logger_flush (ply_logger_t *logger)
}
void
+ply_logger_set_flush_policy (ply_logger_t *logger,
+ ply_logger_flush_policy_t policy)
+{
+ assert (logger != NULL);
+
+ logger->flush_policy = policy;
+}
+
+ply_logger_flush_policy_t
+ply_logger_get_flush_policy (ply_logger_t *logger)
+{
+ assert (logger != NULL);
+
+ return logger->flush_policy;
+}
+
+void
ply_logger_toggle_logging (ply_logger_t *logger)
{
assert (logger != NULL);
@@ -418,6 +456,12 @@ ply_logger_inject_bytes (ply_logger_t *logger,
assert (number_of_bytes != 0);
ply_logger_buffer (logger, bytes, number_of_bytes);
+
+ assert ((logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_WHEN_ASKED)
+ || (logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_EVERY_TIME));
+
+ if (logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_EVERY_TIME)
+ ply_logger_flush (logger);
}
#ifdef PLY_ENABLE_TRACING
diff --git a/src/ply-logger.h b/src/ply-logger.h
index 3eae6c2..1ea5efd 100644
--- a/src/ply-logger.h
+++ b/src/ply-logger.h
@@ -28,6 +28,12 @@
typedef struct _ply_logger ply_logger_t;
+typedef enum
+{
+ PLY_LOGGER_FLUSH_POLICY_WHEN_ASKED = 0,
+ PLY_LOGGER_FLUSH_POLICY_EVERY_TIME
+} ply_logger_flush_policy_t;
+
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_logger_t *ply_logger_new (void);
void ply_logger_free (ply_logger_t *logger);
@@ -38,12 +44,14 @@ void ply_logger_set_output_fd (ply_logger_t *logger,
int fd);
int ply_logger_get_output_fd (ply_logger_t *logger);
bool ply_logger_flush (ply_logger_t *logger);
+void ply_logger_set_flush_policy (ply_logger_t *logger,
+ ply_logger_flush_policy_t policy);
+ply_logger_flush_policy_t ply_logger_get_flush_policy (ply_logger_t *logger);
void ply_logger_toggle_logging (ply_logger_t *logger);
bool ply_logger_is_logging (ply_logger_t *logger);
void ply_logger_inject_bytes (ply_logger_t *logger,
const void *bytes,
size_t number_of_bytes);
-
#define ply_logger_inject(logger, format, args...) \
ply_logger_inject_with_non_literal_format_string (logger, \
format "", ##args)
@@ -52,6 +60,8 @@ void ply_logger_inject_with_non_literal_format_string (ply_logger_t *logger,
const char *format, ...);
ply_logger_t *ply_logger_get_default (void);
+ply_logger_t *ply_logger_get_error_default (void);
+
/* tracing is a debugging facility that incurs a hefty performance hit on the
* program, so we conditionally compile support for it
*/
@@ -93,26 +103,21 @@ while (0)
ply_logger_open_file (ply_logger_get_default (), filename)
#define ply_close_log_file() \
ply_logger_close_file (ply_logger_get_default ())
-#define ply_set_logging_fd(fd) \
- ply_logger_set_output_fd (ply_logger_get_default (), fd)
-#define ply_get_logging_fd() \
- ply_logger_get_output_fd (ply_logger_get_default ())
#define ply_flush_log () \
ply_logger_flush (ply_logger_get_default ())
-#define ply_toggle_logging() \
- ply_logger_toggle_logging (ply_logger_get_default ())
-#define ply_is_logging() \
- ply_logger_is_logging (ply_logger_get_default ())
#define ply_log(format, args...) \
ply_logger_inject (ply_logger_get_default (), format, ##args)
+#define ply_error(format, args...) \
+ ply_logger_inject (ply_logger_get_error_default (), format, ##args)
#define ply_toggle_tracing() \
- ply_logger_toggle_tracing (ply_logger_get_default ())
+ ply_logger_toggle_tracing (ply_logger_get_error_default ())
#define ply_is_tracing() \
- ply_logger_is_tracing_enabled (ply_logger_get_default ())
+ ply_logger_is_tracing_enabled (ply_logger_get_error_default ())
#define ply_trace(format, args...) \
- ply_logger_trace (ply_logger_get_default (), format, ##args)
-#endif /* !PLY_HIDE_FUNCTION_DECLARATIONS */
+ ply_logger_trace (ply_logger_get_error_default (), format, ##args)
+
+#endif
#endif /* PLY_LOGGER_H */
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */