Re: struct dirent question

[ Available lists | Index of freebsd-hackers | Month of Aug 2006 | Week of 16 Aug 2006 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
Eric Anderson <anderson@centtech.com>
Date
16 Aug 2006 16:31:03
Subject
Re: struct dirent question
Message-ID
44E3484D.8090905@centtech.com

In reply to
References to

[ Hide this part ]
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.
------------------------------------------------------------------------


Elapsed time: 0.260 seconds