Imported reiserfsprogs-3.6.20
This commit is contained in:
1 parent
0ed773997f
commit
dac518d099
189 files changed
+43353
-29787
No files matched your search
@@ -0,0 +1,200 @@
|
||||
/*
|
||||
* Copyright 1996-2004 by Hans Reiser, licensing governed by
|
||||
* reiserfsprogs/README
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "reiserfs/libreiserfs.h"
|
||||
#include "misc/device.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <printf.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
|
||||
# include <uuid/uuid.h>
|
||||
#endif
|
||||
|
||||
#define PA_KEY (PA_LAST)
|
||||
#define PA_BUFFER_HEAD (PA_LAST + 1)
|
||||
#define PA_ITEM_HEAD (PA_LAST + 2)
|
||||
#define PA_DISK_CHILD (PA_LAST + 3)
|
||||
|
||||
static int _arginfo_b (const struct printf_info *info, size_t n, int *argtypes) {
|
||||
if (n > 0)
|
||||
argtypes[0] = PA_BUFFER_HEAD | PA_FLAG_PTR;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _arginfo_K (const struct printf_info *info, size_t n, int *argtypes) {
|
||||
if (n > 0)
|
||||
argtypes[0] = PA_KEY | PA_FLAG_PTR;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _arginfo_H (const struct printf_info *info, size_t n, int *argtypes) {
|
||||
if (n > 0)
|
||||
argtypes[0] = PA_ITEM_HEAD | PA_FLAG_PTR;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _arginfo_y (const struct printf_info *info, size_t n, int *argtypes) {
|
||||
if (n > 0)
|
||||
argtypes[0] = PA_DISK_CHILD | PA_FLAG_PTR;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _arginfo_M (const struct printf_info *info, size_t n, int *argtypes) {
|
||||
if (n > 0)
|
||||
argtypes[0] = PA_INT | PA_FLAG_SHORT | PA_FLAG_PTR;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _arginfo_U (const struct printf_info *info, size_t n, int *argtypes) {
|
||||
if (n > 0)
|
||||
argtypes[0] = (PA_CHAR|PA_FLAG_PTR);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* %b */
|
||||
static int print_block_head (FILE * stream,
|
||||
const struct printf_info *info,
|
||||
const void *const *args)
|
||||
{
|
||||
const reiserfs_bh_t * bh;
|
||||
|
||||
bh = *((const reiserfs_bh_t **)(args[0]));
|
||||
return fprintf(stream, "level=%d, nr_items=%d, free_space=%d rdkey",
|
||||
reiserfs_node_level (bh), reiserfs_node_items (bh),
|
||||
reiserfs_node_free (bh));
|
||||
}
|
||||
|
||||
|
||||
/* %K */
|
||||
static int print_short_key (FILE * stream,
|
||||
const struct printf_info *info,
|
||||
const void *const *args)
|
||||
{
|
||||
const reiserfs_key_t * key;
|
||||
|
||||
key = *((const reiserfs_key_t **)(args[0]));
|
||||
return fprintf(stream, "[%u %u]", reiserfs_key_get_did (key),
|
||||
reiserfs_key_get_oid (key));
|
||||
}
|
||||
|
||||
|
||||
/* %k */
|
||||
static int print_key (FILE * stream,
|
||||
const struct printf_info *info,
|
||||
const void *const *args)
|
||||
{
|
||||
const reiserfs_key_t * key;
|
||||
|
||||
key = *((const reiserfs_key_t **)(args[0]));
|
||||
return fprintf(stream, "[%u %u 0x%Lx %s (%d)]",
|
||||
reiserfs_key_get_did (key), reiserfs_key_get_oid (key),
|
||||
(unsigned long long)reiserfs_key_get_off (key),
|
||||
reiserfs_key_name (key), reiserfs_key_get_type (key));
|
||||
}
|
||||
|
||||
|
||||
/* %H */
|
||||
static int print_item_head (FILE * stream,
|
||||
const struct printf_info *info,
|
||||
const void *const *args)
|
||||
{
|
||||
const reiserfs_ih_t * ih;
|
||||
|
||||
ih = *((const reiserfs_ih_t **)(args[0]));
|
||||
return fprintf(stream, "%u %u 0x%Lx %s (%d), len %u, location "
|
||||
"%u entry count %u, fsck need %u, format %s",
|
||||
reiserfs_key_get_did (&ih->ih_key),
|
||||
reiserfs_key_get_oid (&ih->ih_key),
|
||||
(unsigned long long)reiserfs_key_get_off (&ih->ih_key),
|
||||
reiserfs_key_name (&ih->ih_key),
|
||||
reiserfs_key_get_type (&ih->ih_key),
|
||||
reiserfs_ih_get_len (ih), reiserfs_ih_get_loc (ih),
|
||||
reiserfs_ih_get_entries (ih), reiserfs_ih_get_flags (ih),
|
||||
reiserfs_ih_get_format (ih) == KEY_FORMAT_2 ? "new" :
|
||||
((reiserfs_ih_get_format (ih) == KEY_FORMAT_1) ? "old" : "BAD"));
|
||||
}
|
||||
|
||||
|
||||
static int print_disk_child (FILE * stream,
|
||||
const struct printf_info *info,
|
||||
const void *const *args)
|
||||
{
|
||||
const reiserfs_dc_t * dc;
|
||||
|
||||
dc = *((const reiserfs_dc_t **)(args[0]));
|
||||
return fprintf(stream, "[dc_number=%u, dc_size=%u]",
|
||||
reiserfs_dc_get_nr (dc), reiserfs_dc_get_size (dc));
|
||||
}
|
||||
|
||||
static int rwx (FILE * stream, mode_t mode)
|
||||
{
|
||||
return fprintf (stream, "%c%c%c",
|
||||
(mode & S_IRUSR) ? 'r' : '-',
|
||||
(mode & S_IWUSR) ? 'w' : '-',
|
||||
(mode & S_IXUSR) ? 'x' : '-');
|
||||
}
|
||||
|
||||
|
||||
/* %M */
|
||||
static int print_sd_mode (FILE * stream,
|
||||
const struct printf_info *info,
|
||||
const void *const *args)
|
||||
{
|
||||
int len = 0;
|
||||
__u16 mode;
|
||||
|
||||
mode = *(mode_t *)args[0];
|
||||
len = fprintf (stream, "%c", misc_device_typec (mode));
|
||||
len += rwx (stream, (mode & 0700) << 0);
|
||||
len += rwx (stream, (mode & 0070) << 3);
|
||||
len += rwx (stream, (mode & 0007) << 6);
|
||||
return len;
|
||||
}
|
||||
|
||||
/* %U */
|
||||
static int print_sd_uuid (FILE * stream,
|
||||
const struct printf_info *info,
|
||||
const void *const *args)
|
||||
{
|
||||
#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
|
||||
const unsigned char *uuid = *((const unsigned char **)(args[0]));
|
||||
char buf[37];
|
||||
|
||||
buf[36] = '\0';
|
||||
uuid_unparse(uuid, buf);
|
||||
return fprintf(stream, "%s", buf);
|
||||
#else
|
||||
return fprintf(stream, "<no libuuid installed>");
|
||||
#endif
|
||||
}
|
||||
|
||||
void reiserfs_warning (FILE * fp, const char * fmt, ...)
|
||||
{
|
||||
static int registered = 0;
|
||||
va_list args;
|
||||
|
||||
if (!registered) {
|
||||
registered = 1;
|
||||
|
||||
register_printf_function ('K', print_short_key, _arginfo_K);
|
||||
register_printf_function ('k', print_key, _arginfo_K);
|
||||
register_printf_function ('H', print_item_head, _arginfo_H);
|
||||
register_printf_function ('b', print_block_head, _arginfo_b);
|
||||
register_printf_function ('y', print_disk_child, _arginfo_y);
|
||||
register_printf_function ('M', print_sd_mode, _arginfo_M);
|
||||
register_printf_function ('U', print_sd_uuid, _arginfo_U);
|
||||
}
|
||||
|
||||
va_start (args, fmt);
|
||||
vfprintf (fp, fmt, args);
|
||||
va_end (args);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user