[fpc-pascal]blockread in a procedure (last try!)
Michael.VanCanneyt at Wisa.be
Michael.VanCanneyt at Wisa.be
Sun Feb 29 12:54:23 CET 2004
On Sun, 29 Feb 2004, David Emerson wrote:
> Hi there,
>
> I'm having trouble using blockread. It was working for... oh, a year... and all of a sudden it's not working. I'm getting a runtime error 87 in win32/i386 (fpc 1.0.10) and an error 217 in linux/i386 (fpc 1.0.6). Since I always compile with -gl it tells me it's failing right at blockread. Here's the code...
>
OK, last try. Not being entirely satisfied with my previous posts, I dug a
little deeper. The strace on linux pointed me to the error.
>
> const
> test_file_name = 'test.txt';
> the_source : ansistring = '';
>
> procedure read_source_file;
>
> const
> bufsize = 2048;
> var
> source_file : file;
> buf : array [1..bufsize] of char;
> count_read : longint; // longint required by blockread
>
> begin
>
> write ('Reading source file.....');
> assign (source_file, test_file_name);
> reset (source_file);
This is the culprit. It should read
reset (source_file,1);
By default, the blocksize is 128.
> the_source := '';
> repeat
> blockread (source_file, buf, bufsize, count_read);
With a blocksize of 128, this will try to read 128*2028 (256K)
bytes. My guess is that the OS decides this is outside the
valid stack range, and bails out. Chaning the blocksize to 1 in your
original procedure makes things work just fine.
Remains the question how this ever could have worked.
Michael.
More information about the fpc-pascal
mailing list