This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: sysdeps/unix/sysv/linux/lseek.c on ILP32 question


On Tue, 2017-02-21 at 20:37 +0100, Andreas Schwab wrote:
> On Feb 21 2017, Steve Ellcey <sellcey@caviumnetworks.com> wrote:
> 
> > 
> > int main()
> > {
> > 	char fname[1024], buf[1024];
> > 	int x, fd, val;
> On x32, off_t is a 64-bit type.
> 
> Andreas.

OK, I see if I change:

  val = lseek(fd, -(sizeof(crmsg) - 1), 1);

to

  val = lseek(fd, -((off_t) sizeof(crmsg) - 1), 1);

I get the result I want.

But I am not entirely sure why, I guess it is a question of exactly how
integer conversions are done.  I have a prototype for lseek so it
should be converted to off_t before the call but why do I need to
convert the result of sizeof before negating?  Is it because sizeof
returns an unsigned type and negating the unsigned type results in a
zero instead of a negative value?

Steve Ellcey
sellcey@cavium.com



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]