Don't know enough about the C counter parts that $fread was patterned after to know if this is a bug or not, but here goes...
Let's say you use something like this:
%blah = $fread(readfile, 2621440, &block)
Only thing here is, from the position you're currently at in the file, there are only 524,288 bytes left. Hence, as I would understand it, you've now reached the EOF and $fopen(readfile).eof should read $true. This isn't the case as I've experienced it. For some odd reason one has to do another read, which returns nothing, before mIRC realizes we've reached the EOF. So, is it a bug or am I missing something?