1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Add dm_log_with_errno and dm_log_with_errno_init, deprecating the old

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.
This commit is contained in:
Alasdair Kergon 2009-07-10 09:59:37 +00:00
parent f1c90ec108
commit a9cb6969b0
9 changed files with 103 additions and 34 deletions

View 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.

View File

@ -50,17 +50,17 @@
#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 */

View 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"

View 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

View File

@ -31,29 +31,39 @@
/*****************************************************************
* The first section of this file provides direct access to the
* individual device-mapper ioctls.
* 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)));
/*
* 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.
*/
void dm_log_init(dm_log_fn fn);
void dm_log_init_verbose(int level);
/*
* For backward-compatibility, indicate that dm_log_init() was used
* to set a non-default value of dm_log().
*/
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);

View 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)

View File

@ -19,8 +19,15 @@
#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"

View File

@ -205,7 +205,7 @@ int dm_dump_memory_debug(void)
}
str[sizeof(str) - 1] = '\0';
dm_log(_LOG_INFO, mb->file, mb->line,
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;

View 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)