Query about <dirent.h>

Dennis Ritchie dmr at research.att.com
Wed Nov 29 18:51:16 AEST 1989


From: dmr at research.att.com (Dennis Ritchie)

I wish Gwyn et. al had sounded a bit more embarrassed about using
`char d_name[1]' in struct dirent.  Tanenbaum is absolutely correct to
question it; it is an abuse of the language and would not pass a
compiler system with careful run-time checks.  From the language point
of view, there is no reason at all to forbid declaring an instance of
struct dirent, or copying the value pointed to by the value of readdir().
Gwyn's definition implies incorrect C.   (Well, the definition
is well-defined, but not the expectation that there is more than 1 character
actually in the d_name array).

There is no such type as char[], and `char d_name[]' may not appear
in a structure, and if the declaration is `char d_name[1]' then
you may not refer to d_name[i] when i>1.

I don't have the POSIX wording at hand, but if it forbids
`struct dirent d = *readdir(dp)' then it is flaky.

	Dennis Ritchie
	dmr at research.att.com
	att!research!dmr

Volume-Number: Volume 17, Number 76



More information about the Comp.std.unix mailing list