NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
lib/43310: dirent(5) standard compliance
>Number: 43310
>Category: lib
>Synopsis: dirent(5) standard compliance
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: lib-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sat May 15 08:55:00 +0000 2010
>Originator: Jukka Ruohonen
>Release: NetBSD 5.0_STABLE
>Organization:
-
>Environment:
...
>Description:
The POSIX specification is stringent about the size of the "d_name" field in
the struct dirent, defined in NetBSD as:
struct dirent {
ino_t d_fileno; /* file number of entry */
uint16_t d_reclen; /* length of this record */
uint16_t d_namlen; /* length of string in d_name */
uint8_t d_type; /* file type, see below */
#if defined(_NETBSD_SOURCE)
#define MAXNAMLEN 511
char d_name[MAXNAMLEN + 1]; /* name must be no longer than this
#*/
#else
char d_name[511 + 1]; /* name must be no longer than this
#*/
#endif
};
Which conflicts with the specification that says:
"The character array d_name is of unspecified size, but the number
of bytes preceding the terminating null byte shall not exceed {NAME_MAX}."
given that MAXNAMLEN > NAME_MAX.
The size of d_name was doubled (due padding?) in:
revision 1.19
date: 2005/08/19 02:04:04; author: christos; state: Exp; lines: +54 -17
64 bit inode changes.
See:
http://www.opengroup.org/onlinepubs/9699919799/basedefs/dirent.h.html
>How-To-Repeat:
man dirent
$EDITOR src/sys/sys/dirent.h
>Fix:
Change the size, if there is no compelling reason not to; otherwise close
the bug report.
Home |
Main Index |
Thread Index |
Old Index