URI:
       tzero.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tzero.c (898B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <venti.h>
            4 
            5 void
            6 vtzeroextend(int type, uchar *buf, uint n, uint nn)
            7 {
            8         uchar *p, *ep;
            9 
           10         switch(type&7) {
           11         case 0:
           12                 memset(buf+n, 0, nn-n);
           13                 break;
           14         default:
           15                 p = buf + (n/VtScoreSize)*VtScoreSize;
           16                 ep = buf + (nn/VtScoreSize)*VtScoreSize;
           17                 while(p < ep) {
           18                         memmove(p, vtzeroscore, VtScoreSize);
           19                         p += VtScoreSize;
           20                 }
           21                 memset(p, 0, buf+nn-p);
           22                 break;
           23         }
           24 }
           25 
           26 uint
           27 vtzerotruncate(int type, uchar *buf, uint n)
           28 {
           29         uchar *p;
           30 
           31         if(type == VtRootType){
           32                 if(n < VtRootSize)
           33                         return n;
           34                 return VtRootSize;
           35         }
           36 
           37         switch(type&7){
           38         case 0:
           39                 for(p = buf + n; p > buf; p--) {
           40                         if(p[-1] != 0)
           41                                 break;
           42                 }
           43                 return p - buf;
           44         default:
           45                 /* ignore slop at end of block */
           46                 p = buf + (n/VtScoreSize)*VtScoreSize;
           47 
           48                 while(p > buf) {
           49                         if(memcmp(p - VtScoreSize, vtzeroscore, VtScoreSize) != 0)
           50                                 break;
           51                         p -= VtScoreSize;
           52                 }
           53                 return p - buf;
           54         }
           55 }