grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 2/2] fat: Support file modification times


From: Daniel Kiper
Subject: Re: [PATCH v3 2/2] fat: Support file modification times
Date: Mon, 9 Mar 2020 12:33:51 +0100
User-agent: NeoMutt/20170113 (1.7.2)

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 <address@hidden>

Reviewed-by: Daniel Kiper <address@hidden>

...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...

Daniel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]