# HG changeset patch # User Michael Spacefalcon # Date 1373143929 0 # Node ID 9f4469766c7418352c2dc5b84c8d16f103565966 # Parent 15c2ac2c5c73ef2de186342d42e6e97cebf353b0 pirollback: tree walk implemented diff -r 15c2ac2c5c73 -r 9f4469766c74 pirollback/Makefile --- a/pirollback/Makefile Sat Jul 06 20:16:34 2013 +0000 +++ b/pirollback/Makefile Sat Jul 06 20:52:09 2013 +0000 @@ -2,7 +2,7 @@ CFLAGS= -O2 PROGS= analyze -ANALYZE_OBJS= analyze.o init.o +ANALYZE_OBJS= analyze.o init.o treewalk.o all: ${PROGS} diff -r 15c2ac2c5c73 -r 9f4469766c74 pirollback/analyze.c --- a/pirollback/analyze.c Sat Jul 06 20:16:34 2013 +0000 +++ b/pirollback/analyze.c Sat Jul 06 20:52:09 2013 +0000 @@ -15,5 +15,7 @@ read_img_file(); read_inodes(); printf("Last inode is #%x\n", last_inode); + walk_tree(); + printf("Tree walk succeeded\n"); exit(0); } diff -r 15c2ac2c5c73 -r 9f4469766c74 pirollback/treewalk.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pirollback/treewalk.c Sat Jul 06 20:52:09 2013 +0000 @@ -0,0 +1,30 @@ +#include +#include +#include +#include "types.h" +#include "struct.h" + +extern struct inode_info inode[]; +extern int last_inode; + +static void +walk_level(curlev) +{ + int child; + + for (child = inode[curlev].descend; child; + child = inode[child].sibling) { + inode[child].parent = curlev; + walk_level(child); + } +} + +walk_tree() +{ + if (inode[1].type != 0xF2 || *(inode[1].dataptr) != '/' || + inode[1].sibling) { + fprintf(stderr, "error: inode #1 is not the active root\n"); + exit(1); + } + walk_level(1); +}