root/trunk/client/revimage/compress_vol.template

Revision 12, 2.6 kB (checked in by ludo, 4 years ago)

initial ci: revimage= filesystem compression programs

Line 
1 void compress_vol(FILE *fi,unsigned char *nameprefix,PARAMS *p)
2 {
3         int i,j,k,nb;
4         IMAGE_HEADER header;
5         COMPRESS *c;
6         unsigned char buffer[TOTALLG],*ptr,*dataptr;
7         unsigned long remaining,used,skip;
8         unsigned short lg,datalg;
9         FILE *fo;
10         unsigned char filename[128],firststring[200];
11  
12         printf("Compressing Image :\n");
13  
14         printf("- Bitmap lg    : %ld\n",p->bitmaplg);
15         printf("- Nb of blocks : %d\n",nb=((p->bitmaplg+ALLOCLG-1)/ALLOCLG));
16  
17         remaining=p->bitmaplg;
18         ptr=p->bitmap;
19  
20         skip=0;
21  
22         sprintf(firststring,"NTFS=1\nTYPE=%d\nSECTORS=%lld\nBLOCKS=%d\n",type,p->boot.sectors,nb);
23  
24         for (i=0;i<nb;i++)
25         {
26                 used=0;
27  
28                 printf("- Block %d : O",i+1);
29  
30                 sprintf(filename,"%s%03d",nameprefix,i);
31                 fo=fopen(filename,"wb");
32  
33                 printf("H");
34  
35                 if (remaining>ALLOCLG) lg=ALLOCLG;
36                                 else   lg=remaining;
37  
38                 bzero(header.header,HEADERLG);
39                 sprintf(header.header,"%sALLOCTABLELG=%d\n",firststring,lg);
40                 firststring[0]=0;
41                 bzero(header.bitmap,ALLOCLG);
42                 memcpy(header.bitmap,ptr,lg);
43  
44                 remaining-=lg;
45                 ptr+=lg;
46  
47                 compress_init(&c);
48                 compress_data(c,(unsigned char *)&header,TOTALLG,fo,0);
49  
50                 printf("D");
51                 dataptr=buffer;
52                 datalg=0;
53  
54                 for(j=0;j<lg;j++)
55                  {
56                   printf("%3d\b\b\b",(100*j)/lg);
57  
58                   for(k=1;k<256;k+=k)
59                    {
60                     if (!(header.bitmap[j]&k))
61                          {skip+=512; if (skip>30*1024*1024) {fseek(fi,skip,SEEK_CUR);skip=0;}}
62                     else {
63                             if (skip) fseek(fi,skip,SEEK_CUR);
64                             fread(dataptr,512,1,fi);
65                             skip=0; dataptr+=512; datalg+=512; used++;
66  
67                             if (datalg==TOTALLG)
68                                     { compress_data(c,buffer,TOTALLG,fo,0);
69                                       dataptr=buffer;
70                                       datalg=0;}
71                                     }
72                          }
73                    }
74  
75                 printf("F");
76  
77                 if (datalg>0) compress_data(c,buffer,datalg,fo,1);
78  
79                 printf("C");
80  
81                 compress_end(c,fo);
82                 fclose(fo);
83  
84                 printf(". (used : %ld)\n",used);
85         }
86 }
Note: See TracBrowser for help on using the browser.