Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=fwsetup-ng.git;a=commitdiff;h=50e855d52e809569b8b50a762db7a8ecbb26437b

commit 50e855d52e809569b8b50a762db7a8ecbb26437b
Author: James Buren <[email protected]>
Date:   Tue Oct 9 07:44:14 2012 -0500

rewrite main partition code to use new common function

diff --git a/src/block.c b/src/block.c
index 225fb77..5666d85 100644
--- a/src/block.c
+++ b/src/block.c
@@ -178,51 +178,46 @@ static inline void getsectors(struct disk *disk)
disk->sectors = sectors;
}

-static int newpartition(struct disk *disk,long long size)
+static bool newpartition(struct disk *disk,long long size,struct partition 
*part)
{
struct partition *last = 0;
-  struct partition part = {0};

if(disk->size == 0)
{
-    part.number = 1;
-    part.start = disk->device->alignment;
+    part->number = 1;
+    part->start = disk->device->alignment;
}
else
{
last = &disk->table[disk->size-1];
-    part.number = last->number + 1;
-    part.start = last->end + 1;
+    part->number = last->number + 1;
+    part->start = last->end + 1;
}

-  part.size = size / disk->device->sectorsize;
+  part->size = size / disk->device->sectorsize;

-  part.end = part.start + part.size - 1;
+  part->end = part->start + part->size - 1;

-  part.start = alignsector(disk->device,part.start);
+  part->start = alignsector(disk->device,part->start);

-  part.end = alignsector(disk->device,part.end) - 1;
+  part->end = alignsector(disk->device,part->end) - 1;

-  if(part.end > disk->sectors)
-    part.end = disk->sectors;
+  if(part->end > disk->sectors)
+    part->end = disk->sectors;

-  part.size = (part.end - part.start) + 1;
+  part->size = (part->end - part->start) + 1;

if(
-    part.size >= disk->sectors                ||
+    part->size >= disk->sectors               ||
(last != 0 && last->end >= disk->sectors)
)
{
errno = ERANGE;
fprintf(logfile,"%s: %s\n",__func__,strerror(errno));
-    return -1;
+    return false;
}

-  memcpy(&disk->table[disk->size++],&part,sizeof(struct partition));
-
-  disk->modified = true;
-
-  return disk->size;
+  return true;
}

extern struct device *device_open(const char *path)
@@ -483,7 +478,6 @@ 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)
@@ -492,37 +486,13 @@ extern int disk_create_partition(struct disk *disk,long 
long size)
fprintf(logfile,"%s: %s\n",__func__,strerror(errno));
return -1;
}
-
-  if(disk->size == 0)
-  {
-    part.number = 1;
-    part.start = disk->device->alignment;
-  }
-  else
-  {
-    last = &disk->table[disk->size-1];
-    part.number = last->number + 1;
-    part.start = last->end + 1;
-  }
-
-  part.size = size / disk->device->sectorsize;
-
-  part.end = part.start + part.size - 1;
-
-  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(!newpartition(disk,size,&part))
+    return -1;
+
if(
-    (disk->type == DISKTYPE_DOS && part.number > 4)   ||
-    (disk->type == DISKTYPE_GPT && part.number > 128) ||
-    part.size >= disk->sectors                        ||
-    (last != 0 && last->end >= disk->sectors)
+    (disk->type == DISKTYPE_DOS && part.number > 4)  ||
+    (disk->type == DISKTYPE_GPT && part.number > 128)
)
{
errno = ERANGE;
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to