diff options
author | Sharath M Srinivasan <Sharath.Srinivasan@Sun.COM> | 2009-12-04 11:52:47 +0530 |
---|---|---|
committer | Sharath M Srinivasan <Sharath.Srinivasan@Sun.COM> | 2009-12-04 11:52:47 +0530 |
commit | 6cb5747b0a5bbfb2ecd674b4887034dbb1874391 (patch) | |
tree | eb1cad54aa85ca312afda4a9385cae10dd2791a4 /usr/src/lib/libfdisk/common/libfdisk.c | |
parent | c0da627439dfb642fb41ab7d78406fc69d2c64b2 (diff) | |
download | illumos-joyent-6cb5747b0a5bbfb2ecd674b4887034dbb1874391.tar.gz |
6894057 cmd format Failed to initialize libfdisk
Diffstat (limited to 'usr/src/lib/libfdisk/common/libfdisk.c')
-rw-r--r-- | usr/src/lib/libfdisk/common/libfdisk.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/usr/src/lib/libfdisk/common/libfdisk.c b/usr/src/lib/libfdisk/common/libfdisk.c index db6916679b..0664bff1fa 100644 --- a/usr/src/lib/libfdisk/common/libfdisk.c +++ b/usr/src/lib/libfdisk/common/libfdisk.c @@ -155,6 +155,7 @@ libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) ext_part_t *temp; struct stat sbuf; int rval = FDISK_SUCCESS; + int found_bad_magic = 0; if ((temp = calloc(1, sizeof (ext_part_t))) == NULL) { return (ENOMEM); @@ -206,7 +207,15 @@ libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) if ((temp->mtable = parttab) == NULL) { if ((rval = fdisk_init_master_part_table(temp)) != FDISK_SUCCESS) { - return (rval); + /* + * When we have no fdisk magic 0xAA55 on the disk, + * we return FDISK_EBADMAGIC after successfully + * obtaining the disk geometry. + */ + if (rval != FDISK_EBADMAGIC) + return (rval); + else + found_bad_magic = 1; } } @@ -218,6 +227,10 @@ libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) *epp = temp; + if (found_bad_magic != 0) { + return (FDISK_EBADMAGIC); + } + if (opflag & FDISK_READ_DISK) { rval = fdisk_read_extpart(*epp); } @@ -591,7 +604,7 @@ fdisk_validate_logical_drive(ext_part_t *epp, uint32_t begsec, * Procedure to walk through the extended partitions and build a Singly * Linked List out of the data. */ -int +static int fdisk_read_extpart(ext_part_t *epp) { struct ipart *fdp, *ext_fdp; @@ -754,13 +767,15 @@ fdisk_read_master_part_table(ext_part_t *epp) if (read(epp->dev_fd, buf, sectsize) < sectsize) { return (EIO); } - bcopy(&buf[FDISK_PART_TABLE_START], epp->mtable, cpcnt); /*LINTED*/ if (LE_16((*(uint16_t *)&buf[510])) != MBB_MAGIC) { + bzero(epp->mtable, cpcnt); return (FDISK_EBADMAGIC); } + bcopy(&buf[FDISK_PART_TABLE_START], epp->mtable, cpcnt); + return (FDISK_SUCCESS); } |