From 77b19ed5f259bc62680acf2b1a3454baa2472bc5 Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Fri, 12 May 2017 12:32:07 +0100 Subject: New upstream release. --- super-gpt.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'super-gpt.c') diff --git a/super-gpt.c b/super-gpt.c index 1a2adce0..8b080a05 100644 --- a/super-gpt.c +++ b/super-gpt.c @@ -73,6 +73,7 @@ static int load_gpt(struct supertype *st, int fd, char *devname) struct MBR *super; struct GPT *gpt_head; int to_read; + unsigned int sector_size; free_gpt(st); @@ -81,6 +82,11 @@ static int load_gpt(struct supertype *st, int fd, char *devname) return 1; } + if (!get_dev_sector_size(fd, devname, §or_size)) { + free(super); + return 1; + } + lseek(fd, 0, 0); if (read(fd, super, sizeof(*super)) != sizeof(*super)) { no_read: @@ -100,6 +106,8 @@ static int load_gpt(struct supertype *st, int fd, char *devname) free(super); return 1; } + /* Set offset to second block (GPT header) */ + lseek(fd, sector_size, SEEK_SET); /* Seem to have GPT, load the header */ gpt_head = (struct GPT*)(super+1); if (read(fd, gpt_head, sizeof(*gpt_head)) != sizeof(*gpt_head)) @@ -111,6 +119,8 @@ static int load_gpt(struct supertype *st, int fd, char *devname) to_read = __le32_to_cpu(gpt_head->part_cnt) * sizeof(struct GPT_part_entry); to_read = ((to_read+511)/512) * 512; + /* Set offset to third block (GPT entries) */ + lseek(fd, sector_size*2, SEEK_SET); if (read(fd, gpt_head+1, to_read) != to_read) goto no_read; -- cgit v1.2.3