From owner-freebsd-hackers@FreeBSD.ORG Thu Nov 17 07:14:32 2011 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4DD9D106564A for ; Thu, 17 Nov 2011 07:14:32 +0000 (UTC) (envelope-from tim@kientzle.com) Received: from monday.kientzle.com (99-115-135-74.uvs.sntcca.sbcglobal.net [99.115.135.74]) by mx1.freebsd.org (Postfix) with ESMTP id 0FFE28FC12 for ; Thu, 17 Nov 2011 07:14:31 +0000 (UTC) Received: (from root@localhost) by monday.kientzle.com (8.14.4/8.14.4) id pAH7EVJ2053532; Thu, 17 Nov 2011 07:14:31 GMT (envelope-from tim@kientzle.com) Received: from [192.168.2.119] (CiscoE3000 [192.168.1.65]) by kientzle.com with SMTP id s39c2n5is3743qiu6vvg8jf996; Thu, 17 Nov 2011 07:14:31 +0000 (UTC) (envelope-from tim@kientzle.com) Mime-Version: 1.0 (Apple Message framework v1251.1) Content-Type: text/plain; charset=us-ascii From: Tim Kientzle In-Reply-To: <20111117002438.GA55931@freebsd.org> Date: Wed, 16 Nov 2011 23:14:29 -0800 Content-Transfer-Encoding: quoted-printable Message-Id: References: <20111115202450.GA73512@freebsd.org> <20111116102239.GA2687@britannica.bec.de> <20111116131428.GA40723@freebsd.org> <20111116232152.GC21793@britannica.bec.de> <20111117002438.GA55931@freebsd.org> To: Alexander Best X-Mailer: Apple Mail (2.1251.1) Cc: freebsd-hackers@freebsd.org Subject: Re: easy way to determine if a stream or fd is seekable X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Nov 2011 07:14:32 -0000 On Nov 16, 2011, at 4:24 PM, Alexander Best wrote: > On Thu Nov 17 11, Joerg Sonnenberger wrote: >> On Wed, Nov 16, 2011 at 01:14:28PM +0000, Alexander Best wrote: >>> On Wed Nov 16 11, Joerg Sonnenberger wrote: >>>> On Tue, Nov 15, 2011 at 08:24:50PM +0000, Alexander Best wrote: >>>>> one of the things i'm missing is an easy way to determine, whether = a stream or >>>>> fd is seekable. i checked the dd(1) and hd(1) sources and those = tools are >>>>> performing so much stuff just to find out if this is the case, and = they still >>>>> are doing a very poor job. >>>>=20 >>>> Isn't the primary issue that FreeBSD doesn't properly report errors = for >>>> lseek(2)? I think you should start from that and not hack around = the >>>> fallout... >>>=20 >>> what do you mean? lseek(2) returns -1, when the file descriptor is = not >>> seekable. i fired lseek(2) at all sorts of file types (dir, sockets, = ...) >>> and it always returned the correct result. >>=20 >> If that were the case, you wouldn't need your flag to detect seek >> support. But e.g. some devices silently ignore seek requests without >> reporting errors. At least that is what I remember from the last time >> this has brought up. >=20 > this is the first time i hear about problems with seek requests. would = be nice > to see some examples cases. was this discussed on the mailinglists? or > submitted as a problem report? There was a version of bsdtar that made the mistake of assuming lseek() would return an error. lseek() on a tape drive does not return an error, nor does it actually do anything. After a few experiments, bsdtar stopped using lseek() on FreeBSD for anything other than regular files and block devices. I believe there are other things that do support seeking, but I don't believe there is an accurate mechanism for determining whether lseek() is correctly supported. Tim