Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=fwsetup-ng.git;a=commitdiff;h=2b2c67f5a7459f757fd11b7004ef0244906ca6ce
commit 2b2c67f5a7459f757fd11b7004ef0244906ca6ce Author: James Buren <[email protected]> Date: Mon Oct 8 11:01:21 2012 -0500 in disk struct, cache the number of usable sectors this is needed because a certain size is reserved for the partition table diff --git a/src/block.c b/src/block.c index 3cb9fb0..37ccfa8 100644 --- a/src/block.c +++ b/src/block.c @@ -44,6 +44,7 @@ struct disk { struct device *device; enum disktype type; + long long sectors; bool modified; unsigned int dosuuid; char gptuuid[37]; @@ -150,6 +151,22 @@ static inline long long alignsector(const struct device *device,long long sector return sector + (alignment - (sector % alignment)); } +static inline void getsectors(struct disk *disk) +{ + long long size = 0; + long long sectorsize = disk->device->sectorsize; + lldiv_t n = {0}; + + if(disk->type == DISKTYPE_DOS) + size = 512; + else if(disk->type == DISKTYPE_GPT) + size = 512 + 512 + (128 * 128); + + n = lldiv(size,sectorsize); + + disk->sectors = disk->device->sectors - n.quot - (n.rem == 0) ? 0 : 1; +} + extern struct device *device_open(const char *path) { int fd = -1; @@ -302,6 +319,8 @@ extern struct disk *disk_open(struct device *device) goto bail; } + getsectors(&disk); + if(!getuuid(&disk)) goto bail; @@ -399,6 +418,8 @@ extern void disk_new_table(struct disk *disk,const char *type) disk->type = disktype; + getsectors(disk); + disk->modified = true; } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
