Date: Sun, 03 Jun 2001 02:43:10 -0700 From: Peter Wemm <peter@wemm.org> To: Poul-Henning Kamp <phk@critter.freebsd.dk> Cc: John Polstra <jdp@polstra.com>, arch@FreeBSD.ORG, drosih@rpi.edu Subject: Re: time_t definition is wrong Message-ID: <20010603094310.8CF75380C@overcee.netplex.com.au> In-Reply-To: <45913.991557175@critter>
next in thread | previous in thread | raw e-mail | index | archive | help
Poul-Henning Kamp wrote: > In message <20010603082153.E17C3380C@overcee.netplex.com.au>, Peter Wemm writ es > : > > >One other thing.. ufs/* should probably have int32_t in the on-disk records > >(eg: struct dquot) rather than time_t. > > Somebody beat you to it, by a fair margin even: > > 1.5 (dyson 10-Feb-97): int32_t di_atime; /* 16: Last access time. */ > 1.5 (dyson 10-Feb-97): int32_t di_atimensec; /* 20: Last access time. */ > 1.5 (dyson 10-Feb-97): int32_t di_mtime; /* 24: Last modified time. */ > 1.5 (dyson 10-Feb-97): int32_t di_mtimensec; /* 28: Last modified time. */ > 1.5 (dyson 10-Feb-97): int32_t di_ctime; /* 32: Last inode change time. */ > 1.5 (dyson 10-Feb-97): int32_t di_ctimensec; /* 36: Last inode change time. */ No, there are more than this. Dyson's change was to switch from timeval/ timespec to seperate fields. /* on-disk superblock */ struct fs { time_t fs_time; /* last time written */ }; /* on disk cylinder group */ struct cg { time_t cg_time; /* time last written */ }; /* old fs on-disk cylinder group */ struct ocg { time_t cg_time; /* time last written */ }; /* on-disk quota record */ struct dqblk { time_t dqb_btime; /* time limit for excessive disk use */ time_t dqb_itime; /* time limit for excessive files */ }; There is no padding here. Any change to the size of time_t will change the on-disk format. These should be fixed. I was thinking of creating ufs_time_t or something for this purpose (along the lines of ufs_daddr_t). There is one other obvious place that is affected: /* in memory array copies of on-disk data */ struct ufsmount { ... time_t um_btime[MAXQUOTAS]; /* block quota time limit */ time_t um_itime[MAXQUOTAS]; /* inode quota time limit */ }; This is a cached copy of the on-disk records. It would be unfortunate to lose precision doing copies. > Most of the trouble here is printf. What we need is to be able to > say something like > > printf"time= %{time_t}\n", time_second); Heh. Wouldn't that be nice. :-) IMHO, RELENG_4 should not have changed time_t. -current is the place to experiment with this and to thrash out a workable solution. Cheers, -Peter -- Peter Wemm - peter@FreeBSD.org; peter@yahoo-inc.com; peter@netplex.com.au "All of this is for nothing if we don't go to the stars" - JMS/B5 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010603094310.8CF75380C>