DragonFly BSD
DragonFly users List (threaded) for 2006-07
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: struct dirent - difference between getdents(2) manpage and definition in /usr/src/sys/dirent.h


From: Joerg Sonnenberger <joerg@xxxxxxxxxxxxxxxxx>
Date: Wed, 26 Jul 2006 12:59:01 +0200
Mail-followup-to: users@crater.dragonflybsd.org

On Wed, Jul 26, 2006 at 02:55:00PM +0530, Karthik Subramanian wrote:
> I was fooling around a little with getdents (yes, I know that I
> shouldn't be using getdents!) and found that the getdents manpage
> happened to say this about struct dirent:

Yeah, you shouldn't :-)

> The data in the buffer is a series of dirent structures each containing
>     the following entries:
> 
>           u_int32_t d_fileno;
>           u_int16_t d_reclen;
>           u_int8_t  d_type;
>           u_int8_t  d_namlen;
>           char    d_name[MAXNAMELEN + 1]; /* see below */
> 
>     The d_fileno entry is a number which is unique for each distinct file in
>     the filesystem.  Files that are linked by hard links (see link(2)) have
>     the same d_fileno.  The d_reclen entry is the length, in bytes, of the
>     directory record.

Yeah, this is outdated. I'm seriously thinking about just eliminiating
this. Hm. We even have a partly outdated comment on sys/dirent.h...

> It looks like this def is missing d_reclen, whereas the getdents
> manpage mentions it - or am I missing something here?

d_reclen doesn't exist anymore, since it was superfluous from the very
beginning. It was abused by some filesystems to save logic, but since
the 64bit ino_t need to convert the output anyway, it was just easier to
merge it into a commmon helper function.

Joerg



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]