Date: Thu, 28 Jun 2001 07:52:59 -0700 (PDT) From: John Polstra <jdp@polstra.com> To: stable@freebsd.org Cc: avatar@mmlab.cse.yzu.edu.tw Subject: Re: lseek(SEEK_END) then read()... bug of feature? Message-ID: <200106281452.f5SEqxf93857@vashon.polstra.com> In-Reply-To: <Pine.BSF.4.33.0106281339090.72014-100000@www.mmlab.cse.yzu.edu.tw> References: <Pine.BSF.4.33.0106281339090.72014-100000@www.mmlab.cse.yzu.edu.tw>
next in thread | previous in thread | raw e-mail | index | archive | help
In article <Pine.BSF.4.33.0106281339090.72014-100000@www.mmlab.cse.yzu.edu.tw>, Tai-hwa Liang <avatar@mmlab.cse.yzu.edu.tw> wrote: > Hi, > > Anyone tried lseek() from the end of file then read something > out? I've tested the attached code on FreeBSD 4-stable. Both of the two > -stable box(cvsupped on May-02-2001 and Jun-19-2001) prints error > message(Undefined error: 0) on the first read(); however, the second > read() worked without any problem.... It is caused by a bug in your program. > #include <fcntl.h> > #include <stdio.h> > #include <unistd.h> > > int > main() > { > unsigned int l = 0; > off_t offset; > int ret, fd = open("/kernel", O_RDONLY); > > offset = 0 - sizeof(int); Due to C's type promotion rules, this assigns the value 4294967292 to "offset". Change it to this: offset = (off_t)0 - sizeof(int); and your program works fine. John -- John Polstra jdp@polstra.com John D. Polstra & Co., Inc. Seattle, Washington USA "Disappointment is a good sign of basic intelligence." -- Chögyam Trungpa To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200106281452.f5SEqxf93857>