1 056fe1ba 2003-11-23 devnull #include <u.h>
2 056fe1ba 2003-11-23 devnull #include <libc.h>
3 056fe1ba 2003-11-23 devnull #include <venti.h>
6 056fe1ba 2003-11-23 devnull vtzeroextend(int type, uchar *buf, uint n, uint nn)
8 056fe1ba 2003-11-23 devnull uchar *p, *ep;
10 056fe1ba 2003-11-23 devnull switch(type&7) {
12 056fe1ba 2003-11-23 devnull memset(buf+n, 0, nn-n);
15 056fe1ba 2003-11-23 devnull p = buf + (n/VtScoreSize)*VtScoreSize;
16 056fe1ba 2003-11-23 devnull ep = buf + (nn/VtScoreSize)*VtScoreSize;
17 056fe1ba 2003-11-23 devnull while(p < ep) {
18 056fe1ba 2003-11-23 devnull memmove(p, vtzeroscore, VtScoreSize);
19 056fe1ba 2003-11-23 devnull p += VtScoreSize;
21 056fe1ba 2003-11-23 devnull memset(p, 0, buf+nn-p);
27 056fe1ba 2003-11-23 devnull vtzerotruncate(int type, uchar *buf, uint n)
29 056fe1ba 2003-11-23 devnull uchar *p;
31 056fe1ba 2003-11-23 devnull if(type == VtRootType){
32 056fe1ba 2003-11-23 devnull if(n < VtRootSize)
33 056fe1ba 2003-11-23 devnull return n;
34 056fe1ba 2003-11-23 devnull return VtRootSize;
37 056fe1ba 2003-11-23 devnull switch(type&7){
39 056fe1ba 2003-11-23 devnull for(p = buf + n; p > buf; p--) {
40 056fe1ba 2003-11-23 devnull if(p[-1] != 0)
43 056fe1ba 2003-11-23 devnull return p - buf;
45 056fe1ba 2003-11-23 devnull /* ignore slop at end of block */
46 056fe1ba 2003-11-23 devnull p = buf + (n/VtScoreSize)*VtScoreSize;
48 056fe1ba 2003-11-23 devnull while(p > buf) {
49 056fe1ba 2003-11-23 devnull if(memcmp(p - VtScoreSize, vtzeroscore, VtScoreSize) != 0)
51 056fe1ba 2003-11-23 devnull p -= VtScoreSize;
53 056fe1ba 2003-11-23 devnull return p - buf;