[delphizip] Re: Preliminary version of TZipBuilder 1.71

  • From: "Russell Peters" <russellpeters@xxxxxxxxxxx>
  • To: <delphizip@xxxxxxxxxxxxx>
  • Date: Mon, 2 Dec 2002 16:04:37 +1100

Did a little test and found a bug in ZipMaster (predating 1.60p) in the
function returning the disk size (only affects large disks on win98/95 - I
thought it should have only been win95)

procedure TZipMaster.DiskFreeAndSize(Action: Integer); // RCV150199
...
            if GetDiskFreeSpaceEx(pChar(FDrive), LDiskFree, LSizeOfDisk,
nil) then
            begin
                LDiskFree := -1;
                LSizeOfDisk := -1;
            end;
..
should be
            if NOT GetDiskFreeSpaceEx(pChar(FDrive), LDiskFree, LSizeOfDisk,
nil) then
            begin
                LDiskFree := -1;
                LSizeOfDisk := -1;
            end;

unfortunately cd roms are not big enough for this to effect!
I really must question the accuracy of some calculations for spanning as
they don't seem to take into account that diskspace is allocated in blocks
(I found InCD allocated 16Kbyte blocks).
I suspect somehow something is trying to use 1 too many, but run out of time
to check what).
I want to make a few large files (535M and some a bit smaller) to see what
will fit.
(Don't like InCd - it formats a CDRW disk thats inserted!)
Russell Peters
http://www.users.bigpond.com/russellpeters/delphizip.html

----- Original Message -----
From: "Alistair George" <bigal@xxxxxxxxxx>
To: "Russell Peters" <delphizip@xxxxxxxxxxxxx>
Sent: Monday, December 02, 2002 10:21 AM
Subject: [delphizip] Re: Preliminary version of TZipBuilder 1.71


>
> Hello Russell,
>
> As I thought, the change I made only suited disk#1. I am not so happy with
the
> way I have done this (it is like a band-aid) but here is a fix which will
work
> for all disks:
>             // Set the maximum number of bytes that can be written to this
disk(file).
>            // if MaxVolumeSize > 0 then
>                 if MaxVolumeSize < FFreeOnDisk then
>                     FFreeOnDisk := MaxVolumeSize
>                      else FFreeOnDisk:=round(FFreeOnDisk*0.98);
>             // Reserve space on/in the first disk(file).
>             if FDiskNr = 0 then
>             if KeepFreeOnDisk1>0 then FFreeOnDisk := FFreeOnDisk -
KeepFreeOnDisk1; // RCV150199
> --
> Regards,
>  Alistair+
>
>
>



Other related posts: