Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Aug 2006 11:31:09 -0500
From:      Eric Anderson <anderson@centtech.com>
To:        Tobias Roth <roth@iam.unibe.ch>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: struct dirent question
Message-ID:  <44E3484D.8090905@centtech.com>
In-Reply-To: <20060816054925.GA11651@droopy.unibe.ch>
References:  <44E29055.3080205@centtech.com> <20060816054925.GA11651@droopy.unibe.ch>

next in thread | previous in thread | raw e-mail | index | archive | help
On 08/16/06 00:49, Tobias Roth wrote:
> On Tue, Aug 15, 2006 at 10:26:13PM -0500, Eric Anderson wrote:
>> Does the ifdef in the struct dirent (pasted in below) make any sense? 
>> Seems like regardless of whether the __BSD_VISIBLE is defined or not, 
>> the d_name length will always be 255 + 1.
>>
>> Eric
>>
>>
>> struct dirent {
>>         __uint32_t d_fileno;            /* file number of entry */
>>         __uint16_t d_reclen;            /* length of this record */
>>         __uint8_t  d_type;              /* file type, see below */
>>         __uint8_t  d_namlen;            /* length of string in d_name */
>> #if __BSD_VISIBLE
>> #define MAXNAMLEN       255
>>         char    d_name[MAXNAMLEN + 1];  /* name must be no longer than 
>> this */
>> #else
>>         char    d_name[255 + 1];        /* name must be no longer than 
>> this */
>> #endif
>> };
> 
> The difference is whether MAXNAMLEN is defined or not, the value of d_name
> is irrelevant. How far not defining MAXNAMLEN (in the case __BSD_VISIBLE=
> false) makes sense, I cannot tell.
> 
> cheers, t.


My point was, that either path you take (if BSD_VISIBLE is defined or 
not), you end up with d_name having a size of 255 + 1, so what's the 
point the having it at all?  Isn't this the same thing (but easier to read):

#if __BSD_VISIBLE
#define MAXNAMLEN       255
#endif

struct dirent {
          __uint32_t d_fileno;            /* file number of entry */
          __uint16_t d_reclen;            /* length of this record */
          __uint8_t  d_type;              /* file type, see below */
          __uint8_t  d_namlen;            /* length of string in d_name
          char    d_name[255 + 1];        /* name must be no longer than
this */
};



-- 
------------------------------------------------------------------------
Eric Anderson        Sr. Systems Administrator        Centaur Technology
Anything that works is better than anything that doesn't.
------------------------------------------------------------------------



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?44E3484D.8090905>