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

Reply via email to