Version 2.02.50 -
================================
+ Add log_errno to set a specific errno and replace log_error in due course.
Add lvm_errno and lvm_errmsg to liblvm to obtain failure information.
Change create_toolcontext to still return an object if it fails part-way.
Add EUNCLASSIFIED (-1) as the default LVM errno code.
#ifndef _LVM_LOG_H
#define _LVM_LOG_H
+#include <errno.h>
+
/*
* printf()-style macros to use for messages:
*
#define log_verbose(args...) log_notice(args)
#define log_print(args...) LOG_LINE(_LOG_WARN, args)
#define log_error(args...) log_err(args)
+#define log_errno(args...) LOG_LINE_WITH_ERRNO(_LOG_ERR, args)
/* System call equivalents */
#define log_sys_error(x, y) \
#ifndef _LVM_LOGGING_H
#define _LVM_LOGGING_H
+#define EUNCLASSIFIED -1 /* Generic error code */
+
void print_log(int level, const char *file, int line, int dm_errno,
const char *format, ...)
__attribute__ ((format(printf, 5, 6)));
-#define EUNCLASSIFIED -1 /* Generic error code */
-#define LOG_LINE(l, x...) print_log(l, __FILE__, __LINE__ , EUNCLASSIFIED, ## x)
+#define LOG_LINE(l, x...) \
+ print_log(l, __FILE__, __LINE__ , EUNCLASSIFIED, ## x)
+
+#define LOG_LINE_WITH_ERRNO(l, e, x...) \
+ print_log(l, __FILE__, __LINE__ , e, ## x)
#include "log.h"
extern dm_log_fn dm_log;
extern dm_log_with_errno_fn dm_log_with_errno;
-#define LOG_MESG(l, f, ln, x...) \
+#define LOG_MESG(l, f, ln, e, x...) \
do { \
if (dm_log_is_non_default()) \
dm_log(l, f, ln, ## x); \
else \
- dm_log_with_errno(l, f, ln, 0, ## x); \
+ dm_log_with_errno(l, f, ln, e, ## x); \
} while (0)
-#define LOG_LINE(l, x...) LOG_MESG(l, __FILE__, __LINE__, ## x)
+#define LOG_LINE(l, x...) LOG_MESG(l, __FILE__, __LINE__, 0, ## x)
+#define LOG_LINE_WITH_ERRNO(l, e, x...) LOG_MESG(l, __FILE__, __LINE__, e, ## x)
#include "log.h"
}
str[sizeof(str) - 1] = '\0';
- LOG_MESG(_LOG_INFO, mb->file, mb->line,
+ LOG_MESG(_LOG_INFO, mb->file, mb->line, 0,
"block %d at %p, size %" PRIsize_t "\t [%s]",
mb->id, mb->magic, mb->length, str);
tot += mb->length;