I (Raul) wrote::
> > --- linux-1.3.29/fs/msdos/dir.c.dist        Thu Oct 26 18:11:01 1995
> > +++ linux-1.3.29/fs/msdos/dir.c     Thu Oct 26 18:12:34 1995
> > @@ -86,7 +86,7 @@
> >                     filp->f_pos = 0;
> >     }
> >     if (filp->f_pos & (sizeof(struct msdos_dir_entry)-1))
> > -           return -ENOENT;
> > +           return NULL;
> >     bh = NULL;
> >     while ((ino = msdos_get_entry(inode,&filp->f_pos,&bh,&de)) > -1) {
> >             if (!IS_FREE(de->name)

Linus replied:
> The above doesn't look like the right fix: -ENOENT may not be the
> right value to return, but the above return value is meant to catch
> a bogus file position pointer rather than catch the end of the
> file.  A better error might be -EINVAL for that case (it means that
> somebody did a seek with a bad value at some point).

I'm sorry, I didn't pay close enough attention.

However, looking at my documentation on readdir, I think this should
be EBADF.

Me:
> > --- linux-1.3.29/fs/umsdos/dir.c.dist       Thu Oct 26 18:11:02 1995
> > +++ linux-1.3.29/fs/umsdos/dir.c    Thu Oct 26 18:13:51 1995
> > @@ -259,7 +259,7 @@
> >  }
> >  /*
> >     Read count directory entries from directory filp
> > -   Return a negative value from linux/errno.h.
> > +   Return a NULL to indicate end of file
> >     Return > 0 if success (the amount of byte written to dirent)
> >  */
> >  static int UMSDOS_readdir(
> > @@ -284,7 +284,7 @@
> >     }
> >     PRINTK (("UMSDOS_readdir out %d count %d pos %Ld\n",ret,count
> >             ,filp->f_pos));
> > -   return count == 0 ? -ENOENT : ret;
> > +   return count == 0 ? NULL : ret;
> >  }
> >  /*
> >     Complete the inode content with info from the EMD file

Linus:
> How about
>           return count ? : ret;
> instead? At the very least a NULL is definitely wrong, as we're
> returning an integer, not a pointer.

Oops.

Yes, thanks.

--
Raul

Reply via email to