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
