On Mon, Mar 9, 2020 at 7:33 AM Daniel Kiper <dki...@net-space.pl> wrote: > On Sat, Mar 07, 2020 at 12:59:52AM -0500, David Michael wrote: > > This allows comparing file ages on EFI system partitions. > > > > Signed-off-by: David Michael <fedora....@gmail.com> > > Reviewed-by: Daniel Kiper <daniel.ki...@oracle.com> > > ...except... > > > --- > > > > Changes since v2: > > * Added comments referencing the specs > > * Set errno when the timestamp is invalid > > > > I set errno rather than print to the console since it looks like most > > other file systems don't tend to write to the console. I also went with > > GRUB_ERR_OUT_OF_RANGE since that error only occurs when a time field is > > above the valid range, but maybe GRUB_ERR_BAD_FS belongs there. > > > > grub-core/fs/fat.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 56 insertions(+) > > > > diff --git a/grub-core/fs/fat.c b/grub-core/fs/fat.c > > index dc493add2..24a47e2df 100644 > > --- a/grub-core/fs/fat.c > > +++ b/grub-core/fs/fat.c > > @@ -26,6 +26,7 @@ > > #include <grub/err.h> > > #include <grub/dl.h> > > #include <grub/charset.h> > > +#include <grub/datetime.h> > > #ifndef MODE_EXFAT > > #include <grub/fat.h> > > #else > > @@ -730,6 +731,31 @@ grub_fat_iterate_dir_next (grub_fshelp_node_t node, > > return grub_errno ? : GRUB_ERR_EOF; > > } > > > > +/* Convert a timestamp in exFAT format to seconds since the UNIX epoch > > + according to sections 7.4.8 and 7.4.9 in the exFAT specification. > > + > > https://docs.microsoft.com/en-us/windows/win32/fileio/exfat-specification */ > > The comment is formated incorrectly... > > https://www.gnu.org/software/grub/manual/grub-dev/grub-dev.html#Multi_002dLine-Comments > > > +static int > > +grub_exfat_timestamp (grub_uint32_t field, grub_uint8_t msec, grub_int32_t > > *nix) { > > + struct grub_datetime datetime = { > > + .year = (field >> 25) + 1980, > > + .month = (field & 0x01E00000) >> 21, > > + .day = (field & 0x001F0000) >> 16, > > + .hour = (field & 0x0000F800) >> 11, > > + .minute = (field & 0x000007E0) >> 5, > > + .second = (field & 0x0000001F) * 2 + (msec >= 100 ? 1 : 0), > > + }; > > + > > + /* The conversion below allows seconds=60, so don't trust its > > validation. */ > > + if ((field & 0x1F) > 29) > > + return 0; > > + > > + /* Validate the 10-msec field even though it is rounded down to seconds. > > */ > > + if (msec > 199) > > + return 0; > > + > > + return grub_datetime2unixtime (&datetime, nix); > > +} > > + > > #else > > > > static grub_err_t > > @@ -857,6 +883,27 @@ grub_fat_iterate_dir_next (grub_fshelp_node_t node, > > return grub_errno ? : GRUB_ERR_EOF; > > } > > > > +/* Convert a date and time in FAT format to seconds since the UNIX epoch > > + according to sections 11.3.5 and 11.3.6 in ECMA-107. > > + > > https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-107.pdf > > */ > > Ditto... > > This time I can fix them both before commiting if you wish...
Yes, please. I just wrote them that way to be consistent with the other multiline comments in that file. Thanks. David _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel