Perl module: fix sendfile() to work with large files.

Maxim Dounin mdounin at mdounin.ru
Wed Apr 29 00:13:25 MSD 2009


Hello!

On Tue, Apr 28, 2009 at 09:28:53PM +0400, Igor Sysoev wrote:

> On Tue, Apr 28, 2009 at 08:09:51PM +0400, Maxim Dounin wrote:
> 
> > # HG changeset patch
> > # User Maxim Dounin <mdounin at mdounin.ru>
> > # Date 1240934462 -14400
> > # Node ID a2d0123c0f1cbdd30de9f1f85831e781b8f0329b
> > # Parent  28335b73075091c0e231e7660b1c1fca1dc23ef8
> > Perl: fix sendfile() to work with large files.
> > 
> > diff --git a/src/http/modules/perl/nginx.xs b/src/http/modules/perl/nginx.xs
> > --- a/src/http/modules/perl/nginx.xs
> > +++ b/src/http/modules/perl/nginx.xs
> > @@ -607,7 +607,7 @@ sendfile(r, filename, offset = -1, bytes
> >  
> >      ngx_http_request_t        *r;
> >      char                      *filename;
> > -    int                        offset;
> > +    off_t                      offset;
> >      size_t                     bytes;
> >      ngx_str_t                  path;
> >      ngx_buf_t                 *b;
> 
> Ты это проверял ?

Да.

> Когда я программировал это дело, я не мог понять, как
> передать off_t вместо int. У меня есть ощущение, что это будет работать
> только, если перл собран как xxxxxxx-64int.

Тоже да.  Если перл собран с 32-битными integer'ами - то будет 
обрезаться как и до патча (только уже перлом).  Но если с 
64-битными - всё будет работать, что не есть плохо.  В частности, 
на фре даже под i386 перл из портов собирается с -Duse64bitint.

Можно пытаться сделать чтобы работало (e.g. при передаче строки 
или double) даже для перла собранного с 32-битными интами, но IMHO 
оно не стоит того.

Maxim Dounin





More information about the nginx-ru mailing list