Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=fwsetup-ng.git;a=commitdiff;h=81987e3dbe8bc9168335530f68b868e3149460ac
commit 81987e3dbe8bc9168335530f68b868e3149460ac Author: James Buren <[email protected]> Date: Mon Oct 8 13:16:20 2012 -0500 if partition is too big, truncate to end of disk. also, fail if the current 'last' partition is already at the end of the disk. diff --git a/src/block.c b/src/block.c index 37ccfa8..3ce669e 100644 --- a/src/block.c +++ b/src/block.c @@ -425,6 +425,7 @@ extern void disk_new_table(struct disk *disk,const char *type) extern int disk_create_partition(struct disk *disk,long long size) { + struct partition *last = 0; struct partition part = {0}; if(disk == 0 || disk->size < 0 || size <= 0) @@ -441,7 +442,7 @@ extern int disk_create_partition(struct disk *disk,long long size) } else { - struct partition *last = &disk->table[disk->size-1]; + last = &disk->table[disk->size-1]; part.number = last->number + 1; part.start = last->end + 1; } @@ -453,13 +454,17 @@ extern int disk_create_partition(struct disk *disk,long long size) part.start = alignsector(disk->device,part.start); part.end = alignsector(disk->device,part.end) - 1; + + if(part.end > disk->sectors) + part.end = disk->sectors; part.size = (part.end - part.start) + 1; if( (disk->type == DISKTYPE_DOS && part.number > 60) || (disk->type == DISKTYPE_GPT && part.number > 128) || - part.size >= disk->device->sectors + part.size >= disk->sectors || + (last != 0 && last->end >= disk->sectors) ) { errno = ERANGE; @@ -469,6 +474,8 @@ extern int disk_create_partition(struct disk *disk,long long size) memcpy(&disk->table[disk->size++],&part,sizeof(struct partition)); + disk->modified = true; + return part.number; } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
