Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Apr 1997 19:19:03 +1000
From:      Stephen McKay <syssgm@dtir.qld.gov.au>
To:        freebsd-hackers@freebsd.org
Cc:        syssgm@dtir.qld.gov.au
Subject:   Switching one hack for another in ufs/ufs/dir.h
Message-ID:  <199704170919.TAA10663@troll.devetir.qld.gov.au>

next in thread | raw e-mail | index | archive | help
I've been looking at the hack in ufs/ufs/dir.h for supporting old (pre 4.4)
directory entries.  It came about because a short was split into two bytes,
one of which was, conveniently, always zero in existing file systems.  Yes,
this is actually relevant to the real world as I have some old external disk
packs that I just carried over unchanged from BSD/OS 1.0 to FreeBSD and I
was interested in the mechanism that allowed it to work.

Wouldn't it be better to put the hack in the definition of struct direct
rather than in the DIRSIZ macro?  I think what we have currently violates
the principle of least surprise.

Instead of the current hack, I'd use something like:

struct	direct {
	u_int32_t d_ino;		/* inode number of entry */
	u_int16_t d_reclen;		/* length of this record */
#if (BYTE_ORDER == LITTLE_ENDIAN)
	u_int8_t  d_namlen;		/* length of string in d_name */
	u_int8_t  d_type;		/* file type, see below */
#else
	u_int8_t  d_type;		/* file type, see below */
	u_int8_t  d_namlen;		/* length of string in d_name */
#endif
	char      d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */
};

#define DIRSIZ(oldfmt, dp)	DIRECTSIZ((dp)->d_namlen)

Ok, now that I've really got your blood pumping with enthusiasm, I can sit
back and wait for your opinions. :-)

Stephen.



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