>From [EMAIL PROTECTED]  Tue Nov  7 05:46:56 2006
Received: from vera.drijf.net (ip234-142-210-87.adsl2.versatel.nl 
[87.210.142.234])
        by ook.oat.com (8.13.8/8.13.8) with ESMTP id kA7AkuNC015972
        for <[EMAIL PROTECTED]>; Tue, 7 Nov 2006 05:46:56 -0500 (EST)
Received: from lou.intra.drijf.net ([EMAIL PROTECTED] [10.0.1.14])
        by vera.drijf.net (8.13.8/8.13.8) with ESMTP id kA7ANk2n029198
        (version=TLSv1/SSLv3 cipher=DHE-DSS-AES256-SHA bits=256 verify=NO);
        Tue, 7 Nov 2006 11:23:47 +0100 (CET)
Date: Tue, 7 Nov 2006 11:23:46 +0100 (CET)
To: Geoff Steckel <[EMAIL PROTECTED]>
cc: [EMAIL PROTECTED], misc@openbsd.org
Subject: Re: Bug in dd?


On Tue, 7 Nov 2006, Otto Moerbeek <[EMAIL PROTECTED]> wrote:
On Tue, 7 Nov 2006, Geoff Steckel wrote:

>> > > > Index: position.c
>> > > > ===================================================================
>> > > > RCS file: /cvs/src/bin/dd/position.c,v
>> > > > retrieving revision 1.7
>> > > > diff -u -p -r1.7 position.c
>> > > > --- position.c 11 Jun 2003 23:42:12 -0000      1.7
>> > > > +++ position.c 6 Nov 2006 12:07:54 -0000
>> > > > @@ -71,7 +71,7 @@ pos_in(void)
>> > > >        int warned;
>> > > >  
>> > > >        /* If not a pipe or tape device, try to seek on it. */
>> > > > -      if (!(in.flags & (ISPIPE|ISTAPE))) {
>> > > > +      if (!(in.flags & (ISPIPE|ISTAPE|ISCHR))) {
>> > > >                if (lseek(in.fd, in.offset * in.dbsz, SEEK_CUR) == -1)
>> > > >                        err(1, "%s", in.name);
>> > > >                return;
>> 
>> 
>> I may be reading this totally wrong, but won't this
>> change prevent using seek on a character disk device?
>> That would be a -major- loss of functionality as
>> dd has traditionally been used to read areas past
>> bad spots on disks.  If I'm wrong, apologies to everyone.
>>    geoff steckel
>
>Hmmm, I think you are right. Maybe better test for isatty()?
>
>       -Otto
>
>Index: position.c
>===================================================================
>RCS file: /cvs/src/bin/dd/position.c,v
>retrieving revision 1.8
>diff -u -p -r1.8 position.c
>--- position.c 7 Nov 2006 07:10:24 -0000       1.8
>+++ position.c 7 Nov 2006 10:23:17 -0000
>@@ -70,8 +70,8 @@ pos_in(void)
>       off_t cnt;
>       int warned;
> 
>-      /* If not a pipe, tape or char device, try to seek on it. */
>-      if (!(in.flags & (ISPIPE|ISTAPE|ISCHR))) {
>+      /* If not a pipe, tape or tty device, try to seek on it. */
>+      if (!(in.flags & (ISPIPE|ISTAPE)) && !isatty(in.fd)) {
>               if (lseek(in.fd, in.offset * in.dbsz, SEEK_CUR) == -1)
>                       err(1, "%s", in.name);
>               return;
>

Looks better to me!  Are there any other character devices which
should be tested for while this section of code is under repair?
   geoff

Reply via email to