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,103 @@
|
||||
/*
|
||||
* Copyright 2000-2004 by Hans Reiser, licensing governed by
|
||||
* reiserfsprogs/README
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "reiserfs/libreiserfs.h"
|
||||
#include "misc/unaligned.h"
|
||||
|
||||
/* check item length, ih_free_space for pure 3.5 format, unformatted node
|
||||
pointers */
|
||||
int reiserfs_ext_check (reiserfs_filsys_t * fs,
|
||||
reiserfs_ih_t * ih,
|
||||
char * item,
|
||||
unfm_func_t func)
|
||||
{
|
||||
unsigned int i;
|
||||
__u32 * ind = (__u32 *)item;
|
||||
|
||||
if (reiserfs_ih_get_len (ih) % REISERFS_EXT_SIZE)
|
||||
return 1;
|
||||
|
||||
for (i = 0; i < reiserfs_ext_count (ih); i ++) {
|
||||
if (!ind [i])
|
||||
continue;
|
||||
if (func && func (fs, d32_get (ind, i)))
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (fs->fs_format == REISERFS_FORMAT_3_5) {
|
||||
/* check ih_free_space for 3.5 format only */
|
||||
if (reiserfs_ih_get_free (ih) > fs->fs_blocksize - 1)
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// printing of extent item
|
||||
//
|
||||
static void start_new_sequence (__u32 * start, int * len, __u32 new)
|
||||
{
|
||||
*start = new;
|
||||
*len = 1;
|
||||
}
|
||||
|
||||
static int sequence_finished (__u32 start, int * len, __u32 new)
|
||||
{
|
||||
if (le32_to_cpu (start) == MAX_INT)
|
||||
return 1;
|
||||
|
||||
if (start == 0 && new == 0) {
|
||||
(*len) ++;
|
||||
return 0;
|
||||
}
|
||||
if (start != 0 && (le32_to_cpu (start) + *len) == le32_to_cpu (new)) {
|
||||
(*len) ++;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void print_sequence (FILE * fp, __u32 start, int len)
|
||||
{
|
||||
if (start == MAX_INT)
|
||||
return;
|
||||
|
||||
if (len == 1)
|
||||
reiserfs_warning (fp, " %d", le32_to_cpu (start));
|
||||
else
|
||||
reiserfs_warning (fp, " %d(%d)", le32_to_cpu (start), len);
|
||||
}
|
||||
|
||||
void reiserfs_ext_print(FILE * fp,
|
||||
reiserfs_bh_t * bh,
|
||||
int item_num)
|
||||
{
|
||||
reiserfs_ih_t * ih;
|
||||
unsigned int j;
|
||||
__u32 * unp, prev = MAX_INT;
|
||||
int num = 0;
|
||||
|
||||
ih = reiserfs_ih_at (bh, item_num);
|
||||
unp = (__u32 *)reiserfs_item_by_ih (bh, ih);
|
||||
|
||||
if (reiserfs_ih_get_len (ih) % REISERFS_EXT_SIZE)
|
||||
reiserfs_warning (fp, "reiserfs_ext_print: invalid item len");
|
||||
|
||||
reiserfs_warning (fp, "%d pointer%s\n[", reiserfs_ext_count (ih),
|
||||
reiserfs_ext_count (ih) != 1 ? "s" : "" );
|
||||
for (j = 0; j < reiserfs_ext_count (ih); j ++) {
|
||||
if (sequence_finished (prev, &num, d32_get(unp, j))) {
|
||||
print_sequence (fp, prev, num);
|
||||
start_new_sequence (&prev, &num, d32_get(unp, j));
|
||||
}
|
||||
}
|
||||
print_sequence (fp, prev, num);
|
||||
reiserfs_warning (fp, "]\n");
|
||||
}
|
||||
Reference in new issue
Block a user