Date: Mon, 21 Nov 2011 23:29:56 -0500 (EST) From: Benjamin Kaduk <kaduk@MIT.EDU> To: Alexander Best <arundel@freebsd.org> Cc: freebsd-hackers@freebsd.org, perryh@pluto.rain.com, nox@jelal.kn-bremen.de Subject: Re: easy way to determine if a stream or fd is seekable Message-ID: <alpine.GSO.1.10.1111212311530.882@multics.mit.edu> In-Reply-To: <20111121120751.GA85679@freebsd.org> References: <201111172055.pAHKtZso061118@triton8.kn-bremen.de> <B06B2304-A1BC-49A3-A811-F05625138D58@kientzle.com> <20111118203122.GA9508@freebsd.org> <E693FAEB-1D8D-41A0-AEB7-3EB00419F432@kientzle.com> <20111120124034.GA54811@freebsd.org> <20111120140450.GA62286@freebsd.org> <20111120142131.GA64913@freebsd.org> <4eca40f5.fvA0Xb1G9w%2BwuGj6%perryh@pluto.rain.com> <alpine.GSO.1.10.1111210112050.882@multics.mit.edu> <20111121110206.GA63744@freebsd.org> <20111121120751.GA85679@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 21 Nov 2011, Alexander Best wrote: > On Mon Nov 21 11, Alexander Best wrote: >> On Mon Nov 21 11, Benjamin Kaduk wrote: >>> On Mon, 21 Nov 2011, perryh@pluto.rain.com wrote: >>> >>>> Alexander Best <arundel@freebsd.org> wrote: >>>> >>>>> here's a revised patch. >>>>> ... >>>>> +.Sh CAVEATS >>>>> +If the >>>>> +.Fn lseek >>>>> +system call is operating on a device, which is incapable of seeking, >>>>> +it will request the seek operation and complete successfully. >>>> >>>> I think it would be better without the first comma (after "device"). >>> >>> Definitely. >>> >>> Also, >>> >>> +.Sh CAVEATS >>> +If the >>> +.Fn lseek >>> +system call is operating on a device, which is incapable of seeking, >>> +it will request the seek operation and complete successfully. >>> >>> I would prefer something like "request the seek operation and return as if >>> the seek was successful, even though no seek was performed." >>> >>> +The value of the pointer associated with such a device is undefined. >>> >>> "Which pointer?" That it is "the file offset" was clear from context >>> where this line was moved from, but is no longer, here. >>> >>> +Device types which can be incapable of seeking include, >>> +but are not limited to, tape drives. >>> >>> This is an awkward phrasing; perhaps just "Many tape drives are incapable >>> of seeking and can trigger this bug."? >> >> this is too limited. this suggests that only certain tape drives won't seek >> after a successfull return of lseek(). as i mentioned beforehand, this is also >> the case with device with insertable media, such as dvd and blue-ray drives. >> here lseek() will sucessfully return, without a media inserted. >> >> i'll rephrase the whole patch and will submit a revised version. i think a >> reference to POLA, would also be a good idea, as suggested by perry@ > > here's a revised patch. % diff --git a/lib/libc/sys/lseek.2 b/lib/libc/sys/lseek.2 % index 874c523..bcd9d20 100644 % --- a/lib/libc/sys/lseek.2 % +++ b/lib/libc/sys/lseek.2 % @@ -197,13 +196,43 @@ is associated with a pipe, socket, or FIFO. % The % .Fn lseek % system call is expected to conform to % -.St -p1003.1-90 . % +.St -p1003.1-2008 . % +.Pp % +The % +.Dv SEEK_HOLE % +and % +.Dv SEEK_DATA % +directives, along with the % +.Er ENXIO % +error, are extensions to that specification. % .Sh HISTORY % The % .Fn lseek % function appeared in % .At v7 . % .Sh BUGS % +If the % +.Fn lseek % +system call is operating on a device which is incapable of seeking, % +it will request the seek operation and return successfully, % +even though no seek was performed. % +Because the % +.Ar offset % +argument will be stored in the file descriptor of that device, This sentence assumes more familiarity with file i/o implementation than seems prudent. Perhaps "stored in the file descriptor of that device and thus used for future queries" or something similar? % +there is no way to verifying/falsify the seek operation afterwards "verifying" is incorrect, here. Just "verify" would work, but the combo "verify/falsify" doesn't feel quite right. I guess I want "no way to confirm success of the seek operation" (no 'afterwards'). % +(e.g. using the % +.Fn ftell % +function). % +Device types which are known to be incapable of seeking include % +tape drives. "most"? I think someone said that certain (old) drives could actually seek under some circumstances. % +.Pp % +The % +.Fn lseek % +system call will not detect, whether media are present in changeable % +media devices, such as DVD or Blue-ray devices. The first comma is bogus; the second comma could be removed, and probably should be. Also, "Blu-ray" has no 'e' (but apparently is capitalized in that way). % +A requested seek operation will therefore return sucessfully in case % +of an uninserted medium. s/in case of an uninserted medium/when no medium is present/. Thanks for the fixups, Ben % +.Pp % This document's use of % .Fa whence % is incorrect English, but is maintained for historical reasons.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.GSO.1.10.1111212311530.882>