mirror of
https://git.code.sf.net/p/ntfs-3g/ntfs-3g.git
synced 2024-11-30 21:44:21 +08:00
d6fc63d0b1
(Logical change 1.538)
159 lines
3.8 KiB
C
159 lines
3.8 KiB
C
/*
|
|
* debug.c - Debugging output functions. Part of the Linux-NTFS project.
|
|
*
|
|
* Copyright (c) 2002-2004 Anton Altaparmakov
|
|
*
|
|
* This program/include file is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as published
|
|
* by the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program/include file is distributed in the hope that it will be
|
|
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
|
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program (in the main directory of the Linux-NTFS
|
|
* distribution in the file COPYING); if not, write to the Free Software
|
|
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include "types.h"
|
|
#include "attrib.h"
|
|
#include "debug.h"
|
|
|
|
/**
|
|
* Sprintf - silencable output to stderr
|
|
* @silent: if 0 string is output to stderr
|
|
* @fmt: printf style format string
|
|
* @...: optional arguments for the printf style format string
|
|
*
|
|
* If @silent is 0, output the string @fmt to stderr.
|
|
*
|
|
* This is basically a replacement for:
|
|
*
|
|
* if (!silent)
|
|
* fprintf(stderr, fmt, ...);
|
|
*
|
|
* It is more convenient to use Sprintf instead of the above code and perhaps
|
|
* more importantly, Sprintf makes it much easier to turn it into a "do
|
|
* nothing" function, by defining it to "do {} while (0)" in debug.h instead of
|
|
* to * __Sprintf, thus removing the whole output completely.
|
|
*/
|
|
void __Sprintf(const int silent, const char *fmt, ...)
|
|
{
|
|
int eo;
|
|
va_list ap;
|
|
|
|
if (silent)
|
|
return;
|
|
eo = errno;
|
|
va_start(ap, fmt);
|
|
vfprintf(stderr, fmt, ap);
|
|
va_end(ap);
|
|
errno = eo;
|
|
}
|
|
|
|
#ifdef DEBUG
|
|
|
|
/* Debug output to stderr. To get it run ./configure --enable-debug. */
|
|
|
|
void __ntfs_error(const char *function, const char *fmt, ...)
|
|
{
|
|
int eo = errno;
|
|
int flen = 0;
|
|
va_list args;
|
|
char err_buf[1024];
|
|
|
|
if (function)
|
|
flen = strlen(function);
|
|
va_start(args, fmt);
|
|
vsnprintf(err_buf, sizeof(err_buf), fmt, args);
|
|
va_end(args);
|
|
fprintf(stderr, "NTFS error: %s(): %s\n", flen ? function : "",
|
|
err_buf);
|
|
errno = eo;
|
|
}
|
|
|
|
void __ntfs_debug (const char *file, int line, const char *function,
|
|
const char *fmt, ...)
|
|
{
|
|
int eo = errno;
|
|
int flen = 0;
|
|
va_list args;
|
|
char err_buf[1024];
|
|
|
|
if (function)
|
|
flen = strlen(function);
|
|
va_start(args, fmt);
|
|
vsnprintf(err_buf, sizeof(err_buf), fmt, args);
|
|
va_end(args);
|
|
fprintf(stderr, "NTFS DEBUG (%s, %d): %s(): %s\n", file, line,
|
|
flen ? function : "", err_buf);
|
|
errno = eo;
|
|
}
|
|
|
|
void __Dprintf(const char *fmt, ...)
|
|
{
|
|
int eo = errno;
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
vfprintf(stderr, fmt, ap);
|
|
va_end(ap);
|
|
errno = eo;
|
|
}
|
|
|
|
void __Dputs(const char *s)
|
|
{
|
|
int eo = errno;
|
|
fprintf(stderr, "%s\n", s);
|
|
errno = eo;
|
|
}
|
|
|
|
void __Dperror(const char *s)
|
|
{
|
|
int eo = errno;
|
|
perror(s);
|
|
errno = eo;
|
|
}
|
|
|
|
/**
|
|
* ntfs_debug_runlist_dump - Dump a runlist.
|
|
*/
|
|
void ntfs_debug_runlist_dump(const runlist_element *rl)
|
|
{
|
|
int i = 0;
|
|
const char *lcn_str[5] = { "LCN_HOLE ", "LCN_RL_NOT_MAPPED",
|
|
"LCN_ENOENT ", "LCN_EINVAL ",
|
|
"LCN_unknown " };
|
|
|
|
Dputs("NTFS-fs DEBUG: Dumping runlist (values in hex):");
|
|
if (!rl) {
|
|
Dputs("Run list not present.");
|
|
return;
|
|
}
|
|
Dputs("VCN LCN Run length");
|
|
do {
|
|
LCN lcn = (rl + i)->lcn;
|
|
|
|
if (lcn < (LCN)0) {
|
|
int idx = -lcn - 1;
|
|
|
|
if (idx > -LCN_EINVAL - 1)
|
|
idx = 4;
|
|
Dprintf("%-16llx %s %-16llx%s\n", rl[i].vcn,
|
|
lcn_str[idx], rl[i].length,
|
|
rl[i].length ? "" : " (runlist end)");
|
|
} else
|
|
Dprintf("%-16llx %-16llx %-16llx%s\n", rl[i].vcn,
|
|
rl[i].lcn, rl[i].length,
|
|
rl[i].length ? "" : " (runlist end)");
|
|
} while (rl[i++].length);
|
|
}
|
|
|
|
#endif
|