]> sourceware.org Git - lvm2.git/commitdiff
Add dm_log_with_errno and dm_log_with_errno_init, deprecating the old
authorAlasdair Kergon <agk@redhat.com>
Fri, 10 Jul 2009 09:59:37 +0000 (09:59 +0000)
committerAlasdair Kergon <agk@redhat.com>
Fri, 10 Jul 2009 09:59:37 +0000 (09:59 +0000)
Change plog to use dm_log_with_errno unless deprecated dm_log_init was used.
Rename plog macro to LOG_LINE and use in dm_dump_memory_debug.

WHATS_NEW_DM
lib/log/log.h
lib/log/lvm-logging.h
libdm/.exported_symbols
libdm/libdevmapper.h
libdm/libdm-common.c
libdm/misc/dm-logging.h
libdm/mm/dbg_malloc.c
po/pogen.h

index d6a03cfb94b85e48eb83b57b42f5a0ca0ff0e4c1..0b3c62029dd78dee909b30b3368be78288416302 100644 (file)
@@ -1,5 +1,8 @@
 Version 1.02.34 - 
 ================================
+  Rename plog macro to LOG_LINE and use in dm_dump_memory_debug.
+  Change plog to use dm_log_with_errno unless deprecated dm_log_init was used.
+  Add dm_log_with_errno and dm_log_with_errno_init, deprecating the old fns.
   Fix whitespace in linear target line to fix identical table line detection.
   Add device number to more log messages during activation.
 
index 09a75ad70fd11a28f99e402a8ce535ee61cf83af..110f1b0e998924b97ce663e36611092df029cfde 100644 (file)
 #define _LOG_ERR 3
 #define _LOG_FATAL 2
 
-#define log_debug(x...) plog(_LOG_DEBUG, x)
-#define log_info(x...) plog(_LOG_INFO, x)
-#define log_notice(x...) plog(_LOG_NOTICE, x)
-#define log_warn(x...) plog(_LOG_WARN | _LOG_STDERR, x)
-#define log_err(x...) plog(_LOG_ERR, x)
-#define log_fatal(x...) plog(_LOG_FATAL, x)
+#define log_debug(x...) LOG_LINE(_LOG_DEBUG, x)
+#define log_info(x...) LOG_LINE(_LOG_INFO, x)
+#define log_notice(x...) LOG_LINE(_LOG_NOTICE, x)
+#define log_warn(x...) LOG_LINE(_LOG_WARN | _LOG_STDERR, x)
+#define log_err(x...) LOG_LINE(_LOG_ERR, x)
+#define log_fatal(x...) LOG_LINE(_LOG_FATAL, x)
 
 #define stack log_debug("<backtrace>") /* Backtrace on error */
 #define log_very_verbose(args...) log_info(args)
 #define log_verbose(args...) log_notice(args)
-#define log_print(args...) plog(_LOG_WARN, args)
+#define log_print(args...) LOG_LINE(_LOG_WARN, args)
 #define log_error(args...) log_err(args)
 
 /* System call equivalents */
index 70693eaf7608588f9a69c2eeca33a369e7b8e228..d267e2336c27e30e6e5f1407ca7f4b3a15140931 100644 (file)
@@ -19,7 +19,7 @@
 void print_log(int level, const char *file, int line, const char *format, ...)
     __attribute__ ((format(printf, 4, 5)));
 
-#define plog(l, x...) print_log(l, __FILE__, __LINE__ , ## x)
+#define LOG_LINE(l, x...) print_log(l, __FILE__, __LINE__ , ## x)
 
 #include "log.h"
 
index f5d3852ceddb5fea48648a9b8aaf69d9e3af7625..bea4a55b868675358bae14fdd65836245af9b8e4 100644 (file)
@@ -6,6 +6,9 @@ dm_fclose
 dm_get_library_version
 dm_log
 dm_log_init
+dm_log_is_non_default
+dm_log_with_errno
+dm_log_with_errno_init
 dm_log_init_verbose
 dm_task_create
 dm_task_destroy
index 3cecf4c1b0c3098d9ff3c34bf5ecd7466a8aaefb..69faa80e6230644296736756100e9a5ac8af4c9a 100644 (file)
 #include <stdio.h>
 
 /*****************************************************************
- * The first section of this file provides direct access to the 
- * individual device-mapper ioctls.
+ * The first section of this file provides direct access to the
+ * individual device-mapper ioctls.  Since it is quite laborious to
+ * build the ioctl arguments for the device-mapper, people are
+ * encouraged to use this library.
  ****************************************************************/
 
 /*
- * Since it is quite laborious to build the ioctl
- * arguments for the device-mapper people are
- * encouraged to use this library.
- *
- * You will need to build a struct dm_task for
- * each ioctl command you want to execute.
+ * The library user may wish to register their own
+ * logging function.  By default errors go to stderr.
+ * Use dm_log_with_errno_init(NULL) to restore the default log fn.
  */
 
+typedef void (*dm_log_with_errno_fn) (int level, const char *file, int line,
+                                     int dm_errno, const char *f, ...)
+    __attribute__ ((format(printf, 5, 6)));
+
+void dm_log_with_errno_init(dm_log_with_errno_fn fn);
+void dm_log_init_verbose(int level);
+
+/*
+ * Original version of this function.
+ * dm_errno is set to 0.
+ *
+ * Deprecated: Use the _with_errno_ versions above instead.
+ */
 typedef void (*dm_log_fn) (int level, const char *file, int line,
                           const char *f, ...)
     __attribute__ ((format(printf, 4, 5)));
-
+void dm_log_init(dm_log_fn fn);
 /*
- * The library user may wish to register their own
- * logging function, by default errors go to stderr.
- * Use dm_log_init(NULL) to restore the default log fn.
+ * For backward-compatibility, indicate that dm_log_init() was used
+ * to set a non-default value of dm_log().
  */
-void dm_log_init(dm_log_fn fn);
-void dm_log_init_verbose(int level);
+int dm_log_is_non_default(void);
 
 enum {
        DM_DEVICE_CREATE,
@@ -87,6 +97,11 @@ enum {
        DM_DEVICE_SET_GEOMETRY
 };
 
+/*
+ * You will need to build a struct dm_task for
+ * each ioctl command you want to execute.
+ */
+
 struct dm_task;
 
 struct dm_task *dm_task_create(int type);
index 924692339a3c9bfa0c8d5dffca0c5165276abebe..c44b794c130d91576a1eec19e5f6c63cb3ae9937 100644 (file)
@@ -42,10 +42,12 @@ static int _verbose = 0;
  * Library users can provide their own logging
  * function.
  */
-static void _default_log(int level, const char *file __attribute((unused)),
-                        int line __attribute((unused)), const char *f, ...)
+
+static void _default_log_line(int level,
+           const char *file __attribute((unused)),
+           int line __attribute((unused)), int dm_errno, 
+           const char *f, va_list ap)
 {
-       va_list ap;
        int use_stderr = level & _LOG_STDERR;
 
        level &= ~_LOG_STDERR;
@@ -53,22 +55,41 @@ static void _default_log(int level, const char *file __attribute((unused)),
        if (level > _LOG_WARN && !_verbose)
                return;
 
-       va_start(ap, f);
-
        if (level < _LOG_WARN)
                vfprintf(stderr, f, ap);
        else
                vfprintf(use_stderr ? stderr : stdout, f, ap);
 
-       va_end(ap);
-
        if (level < _LOG_WARN)
                fprintf(stderr, "\n");
        else
                fprintf(use_stderr ? stderr : stdout, "\n");
 }
 
+static void _default_log_with_errno(int level,
+           const char *file __attribute((unused)),
+           int line __attribute((unused)), int dm_errno, 
+           const char *f, ...)
+{
+       va_list ap;
+
+       va_start(ap, f);
+       _default_log_line(level, file, line, dm_errno, f, ap);
+       va_end(ap);
+}
+
+static void _default_log(int level, const char *file,
+                        int line, const char *f, ...)
+{
+       va_list ap;
+
+       va_start(ap, f);
+       _default_log_line(level, file, line, 0, f, ap);
+       va_end(ap);
+}
+
 dm_log_fn dm_log = _default_log;
+dm_log_with_errno_fn dm_log_with_errno = _default_log_with_errno;
 
 void dm_log_init(dm_log_fn fn)
 {
@@ -76,6 +97,23 @@ void dm_log_init(dm_log_fn fn)
                dm_log = fn;
        else
                dm_log = _default_log;
+
+       dm_log_with_errno = _default_log_with_errno;
+}
+
+int dm_log_is_non_default(void)
+{
+       return (dm_log == _default_log) ? 0 : 1;
+}
+
+void dm_log_with_errno_init(dm_log_with_errno_fn fn)
+{
+       if (fn)
+               dm_log_with_errno = fn;
+       else
+               dm_log_with_errno = _default_log_with_errno;
+
+       dm_log = _default_log;
 }
 
 void dm_log_init_verbose(int level)
index b25bc55bb285b7158e5bb8cf6a0093d4a830fc06..d2f2359178f1e171fbec0869d1907066eaf84f18 100644 (file)
 #include "libdevmapper.h"
 
 extern dm_log_fn dm_log;
+extern dm_log_with_errno_fn dm_log_with_errno;
 
-#define plog(l, x...) dm_log(l, __FILE__, __LINE__, ## x)
+#define LOG_LINE(l, x...) \
+       do { \
+               if (dm_log_is_non_default()) \
+                       dm_log(l, __FILE__, __LINE__, ## x); \
+               else \
+                       dm_log_with_errno(l, __FILE__, __LINE__, 0, ## x); \
+       } while (0)
 
 #include "log.h"
 
index ef53fc51b38c00a3c02becf6903b6f86ed62203b..24ddc37c990a93d69f90407da6e5f226fbc70b61 100644 (file)
@@ -205,9 +205,9 @@ int dm_dump_memory_debug(void)
                }
                str[sizeof(str) - 1] = '\0';
 
-               dm_log(_LOG_INFO, mb->file, mb->line,
-                      "block %d at %p, size %" PRIsize_t "\t [%s]",
-                      mb->id, mb->magic, mb->length, str);
+               LOG_LINE(_LOG_INFO, mb->file, mb->line,
+                        "block %d at %p, size %" PRIsize_t "\t [%s]",
+                        mb->id, mb->magic, mb->length, str);
                tot += mb->length;
        }
 
index 2be92ba70492c9f7a3068b989500ba8bb57b3cdb..6ab8154516c9d284c45f36f1580cea819b20dfd7 100644 (file)
@@ -21,3 +21,6 @@
 
 #define print_log(level, file, line, format, args...) print_log(format, args)
 #define dm_log(level, file, line, format, args...) dm_log(format, args)
+#define dm_log_with_errno(level, file, line, format, dm_errno, args...) \
+    dm_log(format, args)
+
This page took 0.055798 seconds and 5 git commands to generate.