]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
add support for default error logging
authorRay Strode <rstrode@redhat.com>
Wed, 23 May 2007 15:22:07 +0000 (11:22 -0400)
committerRay Strode <rstrode@redhat.com>
Wed, 23 May 2007 15:22:07 +0000 (11:22 -0400)
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.

src/ply-logger.c
src/ply-logger.h

index 9cd5eed903a338658464cb03c4b6143e8f2309ed..24900d1067f2ad54ac063412a79d5d297f027737 100644 (file)
@@ -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
@@ -328,6 +349,23 @@ ply_logger_flush (ply_logger_t *logger)
   return true;
 }
 
+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)
 {
@@ -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
index 3eae6c2878ec7c244493466092149c56db46f9a1..1ea5efd532472b13371a350674b6141bcf251875 100644 (file)
 
 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: */