Garance A Drosihn drosih at rpi.edu
Fri Aug 5 12:57:55 PDT 2005

At 9:23 AM -0700 8/5/05, Matthew Dillon wrote:
    Joerg and I have discussed the struct stat and struct dirent
    changes.  So far the stat work has been committed and the dirent
    work is still in progress.  This is work to increase ino_t from
    32 to 64 bits and nlink_t from 16 to 32 bits.
How about dev_t to 64 bits?  For "worldwide" distributed filesystems
(such as OpenAFS), this would be a very nice thing.
At 5:42 PM +0100 8/5/05, Hiten Pandya wrote:
What about time related fields, are they currently 64-bits wide?
    We are stuck with various time standards so there isn't much
    we can do with the time fields.  The standards idiots didn't
    fix the seconds  field when they changed the microseconds
    field to nanoseconds.
One thing I considered is coming up with a "struct_time_t" macro.
This could be used to at least *reserve* 64-bit areas in a struct
for any struct where a time_t value is used.  That way, if you
later want to have a 64-bit time_t, you'll have the room reserved
for it.  I'm hoping to get something like this together for
FreeBSD 7.x, when I'm in a particularly optimistic mood...
Something along the lines of:

#include <sys/cdefs.h>
#include <sys/types.h>
/* This uses specific sizes, and then some other include file
 * would set the real time_t to either time32_t or time64_t. */
typedef	int32_t	time32_t;
typedef	int64_t	time64_t;
#define	STRUCT_TIME_T(vname) \
	union __aligned(8) { \
		time64_t	__CONCAT(vname,_64); \
		struct { \
			time32_t	vname; \
			int32_t		__CONCAT(vname,_h32); \
		}; \
#define	STRUCT_TIME_T(vname) \
	union __aligned(8) { \
		time64_t	__CONCAT(vname,_64); \
		struct { \
			int32_t		__CONCAT(vname,_h32); \
			time32_t	vname; \
		}; \
(which I have done some limited testing with, and it seems to do
what I want it to do).  You would use it like:
struct test_stat {
	dev_t	  st_rdev;		/* device type */
	STRUCT_TIME_T(st_atime);	/* time of last access */
	long	  st_atimensec;		/* nsec of last access */
	STRUCT_TIME_T(st_mtime);	/* time of last data modification */
	long	  st_mtimensec;		/* nsec of last data modification */
	STRUCT_TIME_T(st_ctime);	/* time of last file status change */
	long	  st_ctimensec;		/* nsec of last file status change */
	char abyte;
Garance Alistair Drosehn            =   gad at xxxxxxxxxxxxxxxxxxxx
Senior Systems Programmer           or  gad at xxxxxxxxxxx
Rensselaer Polytechnic Institute    or  drosih at xxxxxxx

More information about the Users mailing list