瀏覽代碼

Generate CRC for package files

pcp.pas, tpcpfile:
  + new field do_crc which controls CRC generation
  + override putdata() method to generate CRC when data is written
  * resetfile: enable do_crc by default

git-svn-id: branches/svenbarth/packages@32136 -
svenbarth 9 年之前
父節點
當前提交
fa2e4a8955
共有 1 個文件被更改,包括 16 次插入0 次删除
  1. 16 0
      compiler/pcp.pas

+ 16 - 0
compiler/pcp.pas

@@ -59,6 +59,7 @@ interface
       header : tpcpheader;
       header : tpcpheader;
       { crc for the entire package }
       { crc for the entire package }
       crc : cardinal;
       crc : cardinal;
+      do_crc : boolean;
     protected
     protected
       function getheadersize:longint;override;
       function getheadersize:longint;override;
       function getheaderaddr:pentryheader;override;
       function getheaderaddr:pentryheader;override;
@@ -68,10 +69,14 @@ interface
     public
     public
       procedure writeheader;override;
       procedure writeheader;override;
       function checkpcpid:boolean;
       function checkpcpid:boolean;
+      procedure putdata(const b;len:integer);override;
     end;
     end;
 
 
 implementation
 implementation
 
 
+uses
+  fpccrc;
+
   { tpcpfile }
   { tpcpfile }
 
 
   function tpcpfile.getheadersize: longint;
   function tpcpfile.getheadersize: longint;
@@ -142,6 +147,7 @@ implementation
   procedure tpcpfile.resetfile;
   procedure tpcpfile.resetfile;
     begin
     begin
       crc:=0;
       crc:=0;
+      do_crc:=true;
     end;
     end;
 
 
 
 
@@ -184,5 +190,15 @@ implementation
     end;
     end;
 
 
 
 
+  procedure tpcpfile.putdata(const b;len:integer);
+    begin
+      if do_crc then
+        begin
+          crc:=UpdateCrc32(crc,b,len);
+        end;
+      inherited putdata(b, len);
+    end;
+
+
 end.
 end.