[glibc PATCH] fcntl: put F_OFD_* constants under #ifdef __USE_FILE_OFFSET64
Jeff Layton
jlayton@redhat.com
Tue Aug 23 11:36:00 GMT 2016
On Tue, 2016-08-23 at 13:03 +0200, Cyril Hrubis wrote:
> Hi!
> >
> > >
> > > So yeah, I think what I proposed before would probably be fine.
> > > But now
> > > that Michael pushed the issue, it's dawned on me that we may be
> > > able to
> > > get away with supporting it better if we turn the compatability
> > > mechanism on its head and use F_OFD_*32 constants in the non-LFS
> > > case.
> >
> > That's rather confusing to programmers, though.
> >
> > We then have:
> >
> > F_OFD_SETLKÂ Â Â Â Â always 64-bit
> > F_SETLKÂ Â Â Â Â Â Â Â Â 32-bit or 64-bit
> > F_SETLK64Â Â Â Â Â Â Â always 64-bit (not recommended)
> > F_OFD_SETLK32Â Â Â always 32-bit
>
> It's even worse, the F_OFD_SETLK32 in the proposed patch behaves
> exactly
> as F_SETLK so it's 32-bit or 64-bit depending on sizeof(long) in the
> kernel, that is because the compat fcntl64 converts struct flock from
> userspace to kernel struct flock and just call sys_fcntl() with the
> cmd
> it has. So in the end if you call fcntl with F_OFD_SETLK32 on 64bit
> kernel it expects flock64.
>
To be clear, that approach was NAK'ed by Christoph (and I think that's
a good thing, actually -- one more nail in the non-LFS coffin). I think
what we want merged into glibc is this patch that I sent late on
Thursday:
[glibc PATCHv2] fcntl: don't define OFD lock constants for 32-bit builds with small file offsets
We'll also need your patch to the fcntl(2) manpage as well, but that's
a separate problem.
--
Jeff Layton <jlayton@redhat.com>
More information about the Libc-alpha
mailing list