On Wed, Mar 11, 2009 at 19:11, Ted Unangst <[email protected]> wrote:
> On Wed, Mar 11, 2009 at 12:01 PM, Alexey Suslikov
> <[email protected]> wrote:
>> On Wed, Mar 11, 2009 at 17:56, Ted Unangst <[email protected]> wrote:
>>> If using a 64-bit machine fixes it, then the type in question is not off_t.
>>>
>>
>> Maybe you should try to transfer (using stock httpd) at least 3Gb file
>> on i386?
>
> I didn't say it wasn't a problem, I said your diagnosis was incorrect.
>
>> Also, I have the following in my archives:
>>>
>>> http://marc.info/?t=121379382200010&r=1&w=2
>
> from that very thread, the problem is using long *instead* of off_t.
> Using off_t would fix the problem.
>
> http://marc.info/?l=openbsd-bugs&m=121379609212212&w=2
>
I can't recall exact code from httpd, but how about libexec/ftpd:
...
extern off_t restart_point;
...
if (restart_point) {
if (type == TYPE_A) {
off_t i, n;
int c;
n = restart_point;
i = 0;
while (i++ < n) {
if ((c = getc(fin)) == EOF) {
if (ferror(fin)) {
perror_reply(550, name);
goto done;
} else
break;
}
if (c == '\n')
i++;
}
} else if (lseek(fileno(fin), restart_point, SEEK_SET) < 0) {
perror_reply(550, name);
goto done;
}
}
...
Above code effectively results in inability to REST beyond 2Gb on
i386 however sequential read from position 0 will be ok.
Alexey