grub-devel
[Top][All Lists]
Advanced

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

[PATCH] 64-bit file sizes in NTFS


From: Colin Watson
Subject: [PATCH] 64-bit file sizes in NTFS
Date: Thu, 10 Sep 2009 17:39:14 +0100
User-agent: Mutt/1.5.18 (2008-05-17)

NTFS "non-resident" files (i.e. ones for which pa[8] is true) may have
64-bit sizes. This patch updates GRUB's NTFS driver to understand this.

(I ran into this when helping out one of the Wubi developers who was
trying to use 'loopback' to look inside an ext3 filesystem image stored
on an NTFS filesystem, and wondering why he was getting "out of disk"
errors. Also, obviously, I didn't refer to Microsoft code in the process
of fixing this.)

2009-09-10  Colin Watson  <address@hidden>

        * include/grub/ntfs.h (struct grub_fshelp_node): Change `size'
        to grub_uint64_t.
        * fs/ntfs.c (init_file): Understand 64-bit sizes for
        non-resident files.

Index: include/grub/ntfs.h
===================================================================
--- include/grub/ntfs.h (revision 2584)
+++ include/grub/ntfs.h (working copy)
@@ -133,7 +133,7 @@ struct grub_fshelp_node
 {
   struct grub_ntfs_data *data;
   char *buf;
-  grub_uint32_t size;
+  grub_uint64_t size;
   grub_uint32_t ino;
   int inode_read;
   struct grub_ntfs_attr attr;
Index: fs/ntfs.c
===================================================================
--- fs/ntfs.c   (revision 2584)
+++ fs/ntfs.c   (working copy)
@@ -543,7 +543,7 @@ init_file (struct grub_ntfs_file *mft, grub_uint32
       if (!pa[8])
        mft->size = u32at (pa, 0x10);
       else
-       mft->size = u32at (pa, 0x30);
+       mft->size = u64at (pa, 0x30);
 
       if ((mft->attr.flags & AF_ALST) == 0)
        mft->attr.attr_end = 0; /*  Don't jump to attribute list */

-- 
Colin Watson                                       address@hidden




reply via email to

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