Date: Thu, 19 Apr 2007 21:25:09 +0100 (BST) From: Robert Watson <rwatson@FreeBSD.org> To: Diomidis Spinellis <dds@aueb.gr> Cc: arch@FreeBSD.org, re@FreeBSD.org Subject: Re: Accounting changes Message-ID: <20070419212253.L2913@fledge.watson.org> In-Reply-To: <4627A6C3.2070409@aueb.gr> References: <461958CC.4040804@aueb.gr> <20070414170218.M76326@fledge.watson.org> <4621E826.6050306@aueb.gr> <20070415105157.J84174@fledge.watson.org> <46231C64.9010707@aueb.gr> <20070419101815.Y2913@fledge.watson.org> <4627A6C3.2070409@aueb.gr>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 19 Apr 2007, Diomidis Spinellis wrote: > I will work on developing a mechanism for backwards compatibility. > > Adding a version and length field in each record as you now propose is I > think the way to go. However, it is not trivial, because lastcomm(1) often > reads the file backwards. One approach would be to add a flag in ac_flags > indicating a new version, and second copy of the length field before > ac_flags. Thus, the new structure would be something like: Are there any alignment/padding considerations we should be taking into account with the last two fields to make sure they are consistently aligned with respect to the end of the record as new fields are added to the middle? Robert N M Watson Computer Laboratory University of Cambridge > > #define AC_COMM_LEN 16 > struct acct { > char ac_zero; /* zero identifies new version */ > char ac_version; /* record version number */ > u_int16_t ac_len; /* record length */ > > > /* Business as usual: */ > char ac_comm[AC_COMM_LEN]; /* command name */ > comp_t ac_utime; /* user time */ > comp_t ac_stime; /* system time */ > comp_t ac_etime; /* elapsed time */ > time_t ac_btime; /* starting time */ > uid_t ac_uid; /* user id */ > gid_t ac_gid; /* group id */ > u_int16_t ac_mem; /* average memory usage */ > comp_t ac_io; /* count of IO blocks */ > __dev_t ac_tty; /* controlling tty */ > > > /* Changes here: */ > u_int16_t ac_len2; /* record length */ > > #define AFORK 0x01 /* forked but not exec'ed */ > /* ASU is no longer supported */ > #define ASU 0x02 /* used super-user permissions */ > #define ACOMPAT 0x04 /* used compatibility mode */ > #define ACORE 0x08 /* dumped core */ > #define AXSIG 0x10 /* killed by a signal */ > #define ANVER 0x20 /* new record version */ > u_int8_t ac_flag; /* accounting flags */ > }; > > This structure allows the file to be read in both directions, and also > provides backwards compatibility. > > Diomidis >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070419212253.L2913>