ref: 23d91e5e4cae62b6d855b6b4721861f620621118
dir: /badcheck.c/
#include <u.h>
#include <libc.h>
#include <bio.h>
#include "neoventi.h"
extern VtArena *arenas;
extern u32int numarenas;
int
checkarenas(void)
{
int bad = 0;
u8int magicbuf[4];
u32int magic;
u64int addr;
for(int i = numarenas-1; i >= 0; i -= 1){
addr = 0;
fprint(2, ".");
if(i % 20 == 19 || i+1 == numarenas)
fprint(2, "\n");
for(int j = 0 ; 1 ; j += 1){
if(vtreadarena(&arenas[i], addr, magicbuf, 4) != 4){
sysfatal("corrupt arena");
}
magic = U32GET(magicbuf);
if(magic == 0) // TODO: verify stopping point
break;
if(magic == arenas[i].clumpmagic)
fprint(2, "valid!...");
else{
fprint(2, "arena contains invalid clumps!");
break;
}
}
};
return bad;
}
void
threadmain(int argc, char **argv)
{
if(argc != 1)
sysfatal("i'm a dummy, sorry.");
fprint(2, "loading arena partition metadata... ");
initarenas();
fprint(2, "...scanning.\n");
if(!checkarenas())
sysfatal("arenas do be corrupt, yo!");
fprint(2, "looks like you're good - for now...\n");
}