|
@@ -404,7 +404,7 @@ const
|
|
bufsize = 16384;
|
|
bufsize = 16384;
|
|
var
|
|
var
|
|
f,g : file;
|
|
f,g : file;
|
|
- oldfilemode : longint;
|
|
|
|
|
|
+ oldfilemode : byte;
|
|
st : string;
|
|
st : string;
|
|
addsize,
|
|
addsize,
|
|
i : longint;
|
|
i : longint;
|
|
@@ -435,18 +435,18 @@ begin
|
|
end;
|
|
end;
|
|
assign(f,fn1);
|
|
assign(f,fn1);
|
|
{$I-}
|
|
{$I-}
|
|
- reset(f,1);
|
|
|
|
|
|
+ { Try using read only file mode }
|
|
|
|
+ oldfilemode:=filemode;
|
|
|
|
+ filemode:=READ_ONLY;
|
|
|
|
+ reset(f,1);
|
|
{$I+}
|
|
{$I+}
|
|
addsize:=0;
|
|
addsize:=0;
|
|
|
|
+ getmem(buf,bufsize);
|
|
if ioresult<>0 then
|
|
if ioresult<>0 then
|
|
begin
|
|
begin
|
|
sleep(1000);
|
|
sleep(1000);
|
|
{$I-}
|
|
{$I-}
|
|
- { Retry using read only file mode }
|
|
|
|
- oldfilemode:=system.filemode;
|
|
|
|
- system.filemode:=READ_ONLY;
|
|
|
|
reset(f,1);
|
|
reset(f,1);
|
|
- filemode:=oldfilemode;
|
|
|
|
{$I+}
|
|
{$I+}
|
|
if ioresult<>0 then
|
|
if ioresult<>0 then
|
|
begin
|
|
begin
|
|
@@ -456,11 +456,13 @@ begin
|
|
// blocksize is larger than 255, so no check is needed
|
|
// blocksize is larger than 255, so no check is needed
|
|
move(st[1],buf^,i);
|
|
move(st[1],buf^,i);
|
|
blockwrite(g,buf^,i);
|
|
blockwrite(g,buf^,i);
|
|
|
|
+ freemem(buf,bufsize);
|
|
close(g);
|
|
close(g);
|
|
|
|
+ filemode:=oldfilemode;
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
- getmem(buf,bufsize);
|
|
|
|
|
|
+ filemode:=oldfilemode;
|
|
repeat
|
|
repeat
|
|
blockread(f,buf^,bufsize,i);
|
|
blockread(f,buf^,bufsize,i);
|
|
blockwrite(g,buf^,i);
|
|
blockwrite(g,buf^,i);
|