diff --git a/ChangeLog b/ChangeLog index 0d8176af5..5678b40fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-06-08 Robert Millan + + * include/grub/ntfs.h (struct grub_ntfs_bpb): Rename `serial_number' to + `num_serial' (for consistency with other variables). + (struct grub_ntfs_data): Add `uuid' member. + * fs/ntfs.c (grub_ntfs_mount): Initialize `data->uuid'. + (grub_ntfs_uuid): New function. + (grub_ntfs_fs): Reference grub_ntfs_uuid() in `uuid' struct member. + 2008-06-07 Pavel Roskin * util/biosdisk.c (open_device): Revert last change to the diff --git a/fs/ntfs.c b/fs/ntfs.c index ad5374091..5608e4e23 100644 --- a/fs/ntfs.c +++ b/fs/ntfs.c @@ -830,6 +830,8 @@ grub_ntfs_mount (grub_disk_t disk) (disk, data->mft_start, 0, data->mft_size << BLK_SHR, data->mmft.buf)) goto fail; + data->uuid = grub_le_to_cpu64 (bpb.num_serial); + if (fixup (data, data->mmft.buf, data->mft_size, "FILE")) goto fail; @@ -1078,6 +1080,34 @@ fail: return grub_errno; } +static grub_err_t +grub_ntfs_uuid (grub_device_t device, char **uuid) +{ + struct grub_ntfs_data *data; + grub_disk_t disk = device->disk; + +#ifndef GRUB_UTIL + grub_dl_ref (my_mod); +#endif + + data = grub_ntfs_mount (disk); + if (data) + { + *uuid = grub_malloc (16 + sizeof ('\0')); + grub_sprintf (*uuid, "%016llx", data->uuid); + } + else + *uuid = NULL; + +#ifndef GRUB_UTIL + grub_dl_unref (my_mod); +#endif + + grub_free (data); + + return grub_errno; +} + static struct grub_fs grub_ntfs_fs = { .name = "ntfs", .dir = grub_ntfs_dir, @@ -1085,6 +1115,7 @@ static struct grub_fs grub_ntfs_fs = { .read = grub_ntfs_read, .close = grub_ntfs_close, .label = grub_ntfs_label, + .uuid = grub_ntfs_uuid, .next = 0 }; diff --git a/include/grub/ntfs.h b/include/grub/ntfs.h index e66e0c318..bdd1a9ece 100644 --- a/include/grub/ntfs.h +++ b/include/grub/ntfs.h @@ -115,7 +115,7 @@ struct grub_ntfs_bpb grub_int8_t reserved_4[3]; grub_int8_t clusters_per_index; grub_int8_t reserved_5[3]; - grub_uint64_t serial_number; + grub_uint64_t num_serial; grub_uint32_t checksum; } __attribute__ ((packed)); @@ -151,6 +151,7 @@ struct grub_ntfs_data grub_uint32_t spc; grub_uint32_t blocksize; grub_uint32_t mft_start; + grub_uint64_t uuid; }; struct grub_ntfs_comp